matlab練習程式(常微分方程組向量場)

2022-06-08 13:24:07 字數 1941 閱讀 9860

過去有畫過常微分方程的向量場,通過向量場能夠很形象的看出方程解的狀態。

這裡用matlab也實現一下,同時對三維情況也做了乙個實現。

繪製的方法就是計算方程在二維或三維某個點的方向,然後把方向歸一化,畫出歸一化的向量即可。

二維微分方程組如下:

三維微分方程組如下:

matlab**如下:

二維情況:

clear all;close all;clc;

mu = 0.1

; gdl = 1

; x = -2:0.4:16

;y = -5:0.4:5

;[x,y] =meshgrid(x,y);

dx =y;

dy= -mu*y-gdl*sin(x);

d = sqrt(dx.^2+dy.^2

);dx = dx./d;

dy = dy./d;

quiver(x,y,dx,dy);

hold on;

[t,h] = ode45(@test,[0

100],[0.01

3]);

plot(h(:,

1),h(:,2),'r'

)[t,h] = ode45(@test,[0

100],[0.01

2]);

plot(h(:,

1),h(:,2),'g'

)grid on;

axis equal;

test.m:

function dy=test(t,x)

mu = 0.1

; gdl = 1

; dy=[x(2

); -mu*x(2)-gdl*sin(x(1))];

結果:

紅色和綠色的線為方程組的兩個特解。

三維情況:

clear all;close all;clc;

a = 16

;b = 4

;c = 45

;x = -40:6:40

;y =-40:6:40

;z = 0:6:80

;[x,y,z] =meshgrid(x,y,z);

dx = a*(y-x);

dy = c*x - x.*z-y;

dz = x.*y-b*z;

d = sqrt(dx.^2+dy.^2+dz.^2

);dx = dx./d;

dy = dy./d;

dz = dz./d;

quiver3(x,y,z,dx,dy,dz);

hold on;

[t,h] = ode45(@test2,[0

30],[1240

]);plot3(h(:,

1),h(:,2),h(:,3

));grid on;

axis equal;

test2.m:

function dy=test2(t,y)

a = 16

;b = 4

;c = 45

;dy=[a*(y(2)-y(1

)); c*y(1)-y(1)*y(3)-y(2

); y(

1)*y(2)-b*y(3)];

結果:

常微分方程

微分方程這裡,感覺難度明顯上來了。核心思路,消去微分 分離變數法,想方設法分離變數 齊次微分方程 對於無法直接分離變數的方程,如果是y和x的次數一樣,並且不含常數項。可以可以化為齊次,變數代換求解 一階線性微分方程 常數變易法。常數變易法我覺得關鍵是變和易,因為先當作乙個常數0,是比較容易解決的。然...

matlab練習程式(線性常微分方程組引數擬合)

比如我們已經有了微分方程模型和相關資料,如何求模型的引數。這裡以seir模型為例子,seir模型可以參考之前的文章。一般的線性方程我們可以用最小二乘來解,一般的非線性方程我們可以用lm來解。這裡是線性微分方程組,所以我們採用最小二乘來解。關鍵是構造出最小二乘形式,微分可以通過前後資料差分的方法來求。...

matlab練習程式(高階常微分方程組數值解)

這裡以三元二次常微分方程組做乙個例子,更多元更高次的都類似。比如下列方程組 x x x y z y y y x z z z x matlab 如下 main.m clear all close all clc t,x ode45 testfun 0 0.1 5 1 1 1 10.5 0 0 0.1 ...