
[英]matlab ode45 how to change a parameter inside the function continiously
[英]How do I change the value of a parameter inside Matlab's ode45 solver
我正在尝试在Matlab中使用ode45
求解微分方程。 我正在运行两个脚本:
function xdot=linearproblem(t,x)
global kappa mass F
xdot(1)=-(kappa/mass)*x(2)+(F/mass)*(cos(omega1*t));
xdot(2)=x(1);
xdot=xdot';
end
然后在第二个脚本中
close all
clear
clc
global kappa mass F
kappa=4;
F=2;
mass=0.5;
options=odeset('omega1',[1.4 1.5 1.6]);
[t x]=ode45(@linearproblem,0:0.005:100,[0 0],options);
a=x(8000,2);
omega1=omega1'
a=a'
我正在尝试使用omega1
三个值来求解方程,但这给了我一个错误:
Error using odeset (line 226)
Unrecognized property name 'omega1'.
Error in frequencysweep (line 12)
options=odeset('omega1',1.4);
我尝试将omega1
定义为参数: function xdot=linearproblem(t,x,omega1)
,但这没有帮助。
有没有所谓的参数omega1
的帮助或文档odeset
。 该函数用于设置ode45
(或其他ODE求解器)的选项,而不是用于将您自己的值传递给积分函数。
并且不要使用全局变量。 在这种情况下,大多数情况下都不需要。 而是使用匿名函数传递参数:
@(t,x)linearproblem(t,x,kappa,mass,F)
并确保linearproblem
函数本身也将这些参数用作输入。 也许应该以相同的方式传递omega1
:
@(t,x)linearproblem(t,x,omega1,kappa,mass,F)
(但是,由于右侧第一个ydot
方程将是一个向量,所以会出现错误,但是xdot(1)
是一个元素–可能传递omega1(i)
并在调用ode45
周围使用for
循环?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.