你如何在matlab中绘制非线性微分方程

时间:2013-04-15 19:47:57

标签: matlab

Dx=y
Dy=-k*y-x^3+9.8*cos(t)
inits=('x(0)=0,y(0)=0')

这些是我想绘制的微分方程。

首先,我尝试解决微分方程,然后绘制图形。

Dsolve('Dx=y','Dy=-k*y-x^3+9.8*cos(t)', inits)
然而,像这样,这个系统没有明确的解决方案。

现在我被卡住了:(

如何在不解决方程式的情况下绘制该系统?

1 个答案:

答案 0 :(得分:3)

首先定义要解决的微分方程。它需要是一个函数,它接受两个参数 - 当前时间t和当前位置x,并返回一个列向量。我们将使用x(1)x(2)来代替x和y。

k = 1;
f = @(t,x) [x(2); -k * x(2) - x(1)^3 + 9.8 * cos(t)];

定义要解决的时间跨度和初始条件:

tspan = [0, 10];
xinit = [0, 0];

现在使用ode45

以数字方式求解方程式
ode45(f, tspan, xinit)

导致这个情节:

enter image description here

如果您想在时间点获取解决方案的值,那么只需要输出一些输出参数:

[t, y] = ode45(f, tspan, xinit);

您可以通过

y 绘制相位肖像 x
plot(y(:,1), y(:,2)), xlabel('x'), ylabel('y'), grid

导致以下情节

enter image description here