MATLAB: Syntax Question struct array – Unexpected MATLAB operator.

MATLABodestruct

Hello,
I have been trying to reorganize my variables & parameters into struct arrays in order to group all corresponding to a same physical quantity (like temperature.air pressure.atmosphere etc.)
Some of these parameters are used in an ODE system (see below) and seeing the error I realize that I might have to abandon my idea of using struct arrays… Please let me know what I missed 🙂
Also, I would be happy if someone can send me some good literature on the proper use of struct arrays for modeling.
Thanks!!
>> NewCode
Error: File: myODE.m Line: 1 Column: 29
Unexpected MATLAB operator.
Error in
NewCode>@(L,y)myODE(L,y,AREA.CONV,AREA.COND,HEATTRANSF.AIRSHEET,MASSTRANSF.AIRSHEET,MASSFIBER,TEMP.CYL,MOLARWEIGHT.WATER,SPEED.PAPERMACHINE,GASCONSTANT,HEATTRANSF.CYLSHEET_REF,SPECIFICHEAT.FIBER,SPECIFICHEAT.WATER,PARTIALPRESSURE.VAPOR_MAXI_HOOD,TEMP.AIR_AFTER_STEAMHEATING)
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
function dy = myODE(L,y,AREA.CONV,AREA.COND,HEATTRANSF.AIRSHEET,MASSTRANSF.AIRSHEET,MASSFIBER,TEMP.CYL,MOLARWEIGHT.WATER,SPEED.PAPERMACHINE,GASCONSTANT,HEATTRANSF.CYLSHEET_REF,SPECIFICHEAT.FIBER,SPECIFICHEAT.WATER,PARTIALPRESSURE.VAPOR_MAXI_HOOD,TEMP.AIR_AFTER_STEAMHEATING)
u=y(1); Tp=y(2);
dudL = myODE1(L,u,Tp,AREA.CONV,AREA.COND,HEATTRANSF.AIRSHEET,MASSTRANSF.AIRSHEET,MASSFIBER,TEMP.CYL,MOLARWEIGHT.WATER,SPEED.PAPERMACHINE,GASCONSTANT,HEATTRANSF.CYLSHEET_REF,SPECIFICHEAT.FIBER,SPECIFICHEAT.WATER,PARTIALPRESSURE.VAPOR_MAXI_HOOD,TEMP.AIR_AFTER_STEAMHEATING);
dTpdL = myODE2(L,u,Tp,AREA.CONV,AREA.COND,HEATTRANSF.AIRSHEET,MASSTRANSF.AIRSHEET,MASSFIBER,TEMP.CYL,MOLARWEIGHT.WATER,SPEED.PAPERMACHINE,GASCONSTANT,HEATTRANSF.CYLSHEET_REF,SPECIFICHEAT.FIBER,SPECIFICHEAT.WATER,PARTIALPRESSURE.VAPOR_MAXI_HOOD,TEMP.AIR_AFTER_STEAMHEATING);
dy = [dudL;dTpdL];
end

Best Answer

Refer to general arguments in your function definition, not specific variables.
So your function would be defined as:
function dy = myODE(L,y,A,B,C,D, ... ))
making appropriate changes in your ‘dudL’ and ‘dTpdL’ assignments, then call it as:
[T,Y] = ode45(@(L,y) myODE(L,y,AREA.CONV,AREA.COND,HEATTRANSF.AIRSHEET,MASSTRANSF.AIRSHEET, ...), tspan, y0);
Related Question