matlab中怎么使用微分方程

這個例子展示了如何用MATLAB建立和求解三種不同類型的微分方程 。 MATLAB提供了幾種數值算法來求解各種各樣的微分方程 。
需要這些哦
matlab軟件
電腦
方式/
1初值問題

范德波德莫是界說范德波爾方程的函數 。
type vanderpoldemo

2按“Enter”鍵 。
如圖1所示 。

matlab中怎么使用微分方程



3方程被寫當作一個二階一階賦格 。 對于參數Mu的分歧值 , 對它們進行計較 。 為了加速積分速度 , 我們按照參數μ的值來選擇合適的求解器 。

對于μ=1 , 肆意一個MATLAB的ODE解算器都能有用地求解范德波爾方程 。 下面利用的ODE45求解器就是這樣一個例子 。 方程在[0,20]域內求解 。
tspan = [0, 20];
y0 = [2; 0];
Mu = 1;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode45(ode, tspan, y0);


% Plot of the solution
plot(t,y(:,1))
xlabel('t')
ylabel('solution y')
title('van der Pol Equation, \mu = 1')

4按“Enter”鍵 。
得圖2所示 。
matlab中怎么使用微分方程



5對于較大的μ量級 , 問題變得棘手 。 快速積分需要特別的數值方式 。 ODe15S、ODe23S、ODe23T和ODe23Tb能有用地解決剛性問題 。
這里是一個解決范德波爾方程的μ=1000利用ODe15S 。
tspan = [0, 3000];
y0 = [2; 0];
Mu = 1000;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode15s(ode, tspan, y0);


plot(t,y(:,1))
title('van der Pol Equation, \mu = 1000')
axis([0 3000 -3 3])
xlabel('t')
ylabel('solution y')

6按“Enter”鍵 。
得圖3所示 。
matlab中怎么使用微分方程



7邊值問題

Bvp4C求解常微分方程邊值問題 。
示例函數TWOODE有一個微分方程 , 它被寫當作二階一階ODEs系統 。
type twoode

8TWOBC的鴻溝前提 。
type twobc

9在利用Bvp4C之前 , 我們必需為我們想要在網格上暗示的解決方案供給一個猜測 。 然后求解器調整網格以細化解決方案 。

BVPINIT以求解器Bvp4C所需的形式調集了最初的猜測 。 對于初始網格[0 1 2 3 4]和常量猜測的y(x)=1 , y'(x)=0 , 像這樣挪用BVPINIT:
solinit = bvpinit([0 1 2 3 4],[1; 0]);

10有了這個初步的猜想 , 我們就可以解決Bvp4C的問題 。

溶液溶膠(如下圖) , 然后用DEVAL計較并繪制 。
sol = bvp4c(@twoode, @twobc, solinit);


xint = linspace(0, 4, 50);
yint = deval(sol, xint);
plot(xint, yint(1,:),'b');
xlabel('x')
ylabel('solution y')
hold on

11按“Enter”鍵 。
得圖4所示 。
matlab中怎么使用微分方程



12這個特別的邊值問題正好有兩個解 。 獲得的另一個解是對
 y(x) = -1, y'(x) = 0
像以前一樣繪圖 。
solinit = bvpinit([0 1 2 3 4],[-1; 0]);
sol = bvp4c(@twoode,@twobc,solinit);


xint = linspace(0,4,50);
yint = deval(sol,xint);
plot(xint,yint(1,:),'r');

猜你喜歡