過去有畫過常微分方程的向量場,通過向量場能夠很形象的看出方程解的狀態。
這裡用matlab也實現一下,同時對三維情況也做了乙個實現。
繪製的方法就是計算方程在二維或三維某個點的方向,然後把方向歸一化,畫出歸一化的向量即可。
二維微分方程組如下:
三維微分方程組如下:
matlab**如下:
二維情況:
clear all;close all;clc;test.m: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;
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;test2.m: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;
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 ...