繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM