0

ode45我正在尝试在 Matlab中求解一个微分方程。我正在运行两个脚本:

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),但这没有帮助。

4

1 回答 1

1

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)并使用一个循环?)forode45

于 2013-11-20T20:37:03.987 回答