我正在尝试使用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)
,但这没有帮助。
答案 0 :(得分:1)
odeset
的帮助或文档中没有名为omega1
的参数。该函数用于设置ode45
(或其他ODE求解器)的选项,而不是将您自己的值传递给积分函数。
并且不使用全局变量。 There's no need in this case and most others.而是使用匿名函数传递参数:
@(t,x)linearproblem(t,x,kappa,mass,F)
并确保linearproblem
函数本身也将这些参数作为输入。也许omega1
应该以同样的方式传递:
@(t,x)linearproblem(t,x,omega1,kappa,mass,F)
(但是,你会得到一个错误,因为右边的第一个ydot
等式将是一个向量,但是xdot(1)
是一个单独的元素 - 可能会传递omega1(i)
并且围绕您对for
的调用使用ode45
循环?)