MATLAB ode45 OutputFcn 监控 if 循环的变化值
MATLAB ode45 OutputFcn to monitor changing value of if loop
我尝试save/see 我的变量 m,它在 ode45 微分方程求解过程中被 if 循环改变。
%Some parameter setting above
myfun=fprintf('m', num2str(m))
options = odeset('NonNegative',[1:3],'RelTol',1e-5,'AbsTol',1e-8, 'OutputFcn', @myfun);
[t,x] = ode45('myfunction', tspan, x0, options); %calculation
if 循环在方程文件中位于所有其他方程之前:
if x(1)>=threshold
m=1 ;
return
else
m=0 ;
end
我已经查看了 ode45 的 OutputFcn 选项的 matlab 描述,还阅读了
https://de.mathworks.com/help/deeplearning/ug/customize-output-during-deep-learning-training.html
没有正确理解它。我也对其他解决方案持开放态度,以“查看”在 ode 计算期间 m 具有哪个值。
创建一个单独的文件,并使用以下代码调用此文件myOutputFcn.m
function status = myOutputFcn(t,y,flag,threshold)
switch(flag)
case 'init' % code to run before integration
;
case '' % code to run after each integration step
% act on state
if y(1)>=threshold
m = 1;
else
m = 0;
end
% print m
fprintf('% 4.3f\t%i, t, m\n',t,m);
case 'done' % code to run when integation is finished
;
end
status = 0; % need to set status, otherwise integration will halt
end
然后要在每次迭代时使用正确的阈值调用此输出函数,您必须执行以下操作
threshold = 10; % idk, your threshold
options = odeset('NonNegative',[1:3],'RelTol',1e-5,'AbsTol',1e-8, 'OutputFcn', @(t,y,flag) myOutputFcn(t,y,flag,threshold));
[t,x] = ode45('myfunction', tspan, x0, options); %calculation
我尝试save/see 我的变量 m,它在 ode45 微分方程求解过程中被 if 循环改变。
%Some parameter setting above
myfun=fprintf('m', num2str(m))
options = odeset('NonNegative',[1:3],'RelTol',1e-5,'AbsTol',1e-8, 'OutputFcn', @myfun);
[t,x] = ode45('myfunction', tspan, x0, options); %calculation
if 循环在方程文件中位于所有其他方程之前:
if x(1)>=threshold
m=1 ;
return
else
m=0 ;
end
我已经查看了 ode45 的 OutputFcn 选项的 matlab 描述,还阅读了 https://de.mathworks.com/help/deeplearning/ug/customize-output-during-deep-learning-training.html 没有正确理解它。我也对其他解决方案持开放态度,以“查看”在 ode 计算期间 m 具有哪个值。
创建一个单独的文件,并使用以下代码调用此文件myOutputFcn.m
function status = myOutputFcn(t,y,flag,threshold)
switch(flag)
case 'init' % code to run before integration
;
case '' % code to run after each integration step
% act on state
if y(1)>=threshold
m = 1;
else
m = 0;
end
% print m
fprintf('% 4.3f\t%i, t, m\n',t,m);
case 'done' % code to run when integation is finished
;
end
status = 0; % need to set status, otherwise integration will halt
end
然后要在每次迭代时使用正确的阈值调用此输出函数,您必须执行以下操作
threshold = 10; % idk, your threshold
options = odeset('NonNegative',[1:3],'RelTol',1e-5,'AbsTol',1e-8, 'OutputFcn', @(t,y,flag) myOutputFcn(t,y,flag,threshold));
[t,x] = ode45('myfunction', tspan, x0, options); %calculation