MATLAB Answers

Passing a matrix as a parameter in ode15s

2 views (last 30 days)
I am trying to pass a matrix of the same dimension as the output value of vx in the code below. I have attached my code for both the script (where the ode15s function is called) and the contents of my called function that returns the output for x_val and vx. Its showing me this error -
Error using odearguments (line 93)
@(X_VAL,VX)ODE_X(X_VAL,VX,VFX) must return a column vector.
The code -
% in the script
psi = norm(vf)*(y-2+m*atan2(y-2,x-2+a)-m*atan2(y-2,x-2-a));
[vfy1,vfx1] = gradient(psi);
vfy= -1*vfy1;% 10 x 10 matrix
vfx = vfx1;% 10 x 10 matrix
vpx0 = 5.*(ones(10,1));
x_range =linspace(1,3,10) ;
[x_val,vx] = ode15s(@(x_val,vx) ode_x(x_val,vx,vfx), x_range, vpx0); % vfx is to be passed as a whole to the ode15s function
% function called
function dvdx = ode_x(x,vx,vfx)
dvdx = (vfx./vx - 1); % here I need to divide each value of vfx by resultant value of vx. But because of inconsistent dimensions I am unable to do that
end
How do I solve this issue ?

  0 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 30 May 2020
function dvdx = ode_x(x,vx,vfx)
dvdx = reshape(vfx./reshape(vx, size(vfx)) - 1), [], 1);
end

  1 Comment

Sanjana Singh
Sanjana Singh on 30 May 2020
I am getting this error using this correction-
Error using reshape
To RESHAPE the number of elements must not change.

Sign in to comment.

More Answers (0)


Translated by