在MATLAB中求解一个ODE系统?

时间:2017-11-07 18:20:32

标签: matlab matlab-figure matlab-deployment

这是我第一次发帖,所以如果您需要更多信息或我没有做正确的事情请告诉我!

我想绘制一个 ODES 的系统,这不会有问题,因为我会做以下事情;

F=@(t,x) [
.the RHS of my first order ODES.
];


[t x]=ode45(F,[Range], [Initial conditions]);

在创建包含x'(1),x'(2),...其中x(1)的向量时,x(2)将是时间因变量。

但是我的系统有点复杂。我有6个微分方程,它们由包含微分方程和时间相关变量的方程组成。例如,我的ODES的RHS就像 2 * X(2)* X'(1)* F(a)中

其中f(a)可以是基于常数的另一个函数,a。

我按以下顺序设置了我的代码;

常数,然后是形式为f(a)的方程,然后是我的微分方程,接着是ode45求解器和绘图命令。但是我得到了几个错误“未定义的函数或变量”,因为早期的等式依赖于直到以后才定义的变量/等式。

非常感谢你的帮助:)

正如所建议的,这里是我的代码类型的一个例子;

`%Constants
a=34
b=31
c=20
%Equations
A=b*cos(2*pi)
B=a*EQ1
C=c*x(2)
%DifferentialEquations
EQ1=x(1)*A
EQ2=(EQ3-EQ1)*(B-C)
EQ3=x(2)*x(3)
F=@(t,x) [EQ1;EQ2;EQ3;];[t x]=ode45(F,[0 10], [0 0 0 ]);

提供错误。 生成未定义的函数或变量'DEQ1A'。

1 个答案:

答案 0 :(得分:0)

根据评论,您尝试在定义之前使用变量。在MATLAB中,您需要在使用它们之前定义变量和函数。由于方程式是彼此的函数,因此您可以使用anonymous functions来定义F

示例:

a=34;
b=31;
c=20;
A = b*cos(2*pi);
EQ1 = @(x) x(1)*A;
B = @(x) a*EQ1(x);
C = @(x) c*x(2);
EQ3 = @(x) x(2)*x(3);
EQ2 = @(x) (EQ3(x) - EQ1(x))*(B(x)-C(x));
F = @(t,x) [EQ1(x);EQ2(x);EQ3(x)];
[t,x] = ode45(F,[0 10], [0 0 0]);