如何在Matlab的ode45求解器中更改参数的值

时间:2013-11-20 20:15:32

标签: matlab numerical-integration

我正在尝试使用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),但这没有帮助。

1 个答案:

答案 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循环?)