Hello,
I am trying to find the optimal values for two parameters of a first order differential equation but am having some errors that are difficult to bypass. I would be very grateful if anyone could point to sources or give me feedback on this. Please see below for the code and errors:
function bestalfatau = odeparam1()%Initial data
load rcp85_expansionmidmatlab.txt;load rcp85_temperaturemidmatlab.txt;time= rcp85_temperaturemidmatlab(:,1);temp= rcp85_temperaturemidmatlab(:,2);sealevel=rcp85_expansionmidmatlab(:,2);plot(time,sealevel)%ODE information
tSpan = [2006:1:2100];z0 = 0.0118;%Initial guess
alfa=0.2;tau=82;ODE_Sol= ode45(@(t,z)updateStates(t,z,alfa,tau), tSpan, z0); % Run the ODE
simsealevel = deval(ODE_Sol, time); % Evaluate the solution at the experimental time steps
hold onplot(time, simsealevel, '-r')%% Set up optimization
myObjective = @(x) objFcn(x, time, sealevel,tSpan,z0);lb = [0.2,82];ub = [0.63,1290];bestalfatau = lsqnonlin(myObjective, alfa,tau, lb, ub);%% Plot best result
ODE_Sol = ode45(@(t,z)updateStates(t,z,bestalfatau), tSpan, z0);bestsealevel = deval(ODE_Sol, time);plot(time, bestsealevel, '-g')legend('IPCC Data','Initial Param','Best Param');function f = updateStates(t,z,alfa,tau)f = (alfa.*temp-z)*(1/tau);function cost= objFcn (x,time,sealevel,tSpan,z0)ODE_Sol = ode45(@(t,z)updateStates(t,z,x), tSpan, z0);simsealevel = deval(ODE_Sol, time);cost = simsealevel-sealevel;
ERRORS:
>> odeparam1Unrecognized function or variable 'temp'.Error in odeparam1>updateStates (line 49)f = (alfa.*temp-z)*(1/tau);Error in odeparam1>@(t,z)updateStates(t,z,alfa,tau) (line 19)ODE_Sol= ode45(@(t,z)updateStates(t,z,alfa,tau), tSpan, z0); % Run the ODEError 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);Error in odeparam1 (line 19)ODE_Sol= ode45(@(t,z)updateStates(t,z,alfa,tau), tSpan, z0); % Run the ODE
Many thanks in advance!
Best Answer