Input struct in function

7 views (last 30 days)
Nader Mohamed
Nader Mohamed on 31 Oct 2021
Commented: Walter Roberson on 1 Nov 2021
When I try to run a function that needs constants defined in a struct outside of it, it give the error "Not enough input arguments.". How can I give as input in the function the data struct?
data.fluid.rho = 890;
data.accumulator.V_N2 = 10e-3;
data.accumulator.P_N2 = 2.5e6;
data.accumulator.p0 = 21e6;
data.accumulator.gamma = 1.2;
data.delivery.D23 = 1;
function dydt = problem(t,y,data)
A23 = (data.delivery.D23^2/4)*pi;
end
This is just an example with some line of codes, I get an error on A23, not enough input arguments. I suspect the function doesnt know what data.delivery.D23 is even if its written outside, how can I pass the data structure in the function?
  3 Comments
Nader Mohamed
Nader Mohamed on 1 Nov 2021
Yes you're right. I'm trying to call the function in an ODE15s.
options = odeset('RelTol',1e-9,'AbsTol',1e-9,'Events',@event);
[tt,yy] = ode15s(@problem,[t0,tf],[0,0,1e-3,data.accumulator.Vf],options);
I don't understand what's the form to say to the ode solver to grab the function problem with the inputs data.
P.S This is just an example with some parts of the full code, I just want to understand how to make ode15s know to grab the data inputs of problem

Sign in to comment.

Answers (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 31 Oct 2021
data.fluid.rho = 890;
data.accumulator.V_N2 = 10e-3;
data.accumulator.P_N2 = 2.5e6;
data.accumulator.p0 = 21e6;
data.accumulator.gamma = 1.2;
data.delivery.D23 = 1;
% A few things are missing:
t = ... % initialize t
y = ... % initialize y
function dydt = problem(t,y,data)
A23 = (data.delivery.D23^2/4)*pi;
dydt = ... % Define dydt
end
  2 Comments
Walter Roberson
Walter Roberson on 1 Nov 2021
options = odeset('RelTol',1e-9,'AbsTol',1e-9,'Events',@event);
[tt,yy] = ode15s(@(t,y)problem(t,y,data),[t0,tf],[0,0,1e-3,data.accumulator.Vf],options);

Sign in to comment.

Products


Release

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!