matlab解常微分方程組並畫圖的語句

時間 2021-09-05 10:39:19

1樓:匿名使用者

說明

求解常微分方程一般使用ode系列函式(其中最常用的是ode45),基本做法就是把微分方程用函式表示出來,然後呼叫ode函式求解即可。對於本題而言,使用匿名函式描述微分方程更為方便一些。

參考**

k0=8; k1=1; k=1; k2=5; n=2;    % 常數定義

ds = @(t,s)[k0-k1*(1+(s(2)/k)^n)*s(1); k1*(1+(s(2)/k)^n)*s(1)-k2*s(2)];

s0 = [0; 0];     % 初始條件,注意自行設定

tf = 10;         % **時間,可根據需要自行修改

[t,s] = ode45(ds,[0 tf],s0);   % 使用ode求解器求解微分方程

% 繪圖

plot(t,s)

xlabel \itt; ylabel '_1, _2'

legend('_1(\itt)', '_2(\itt)')

2樓:百川一歸大海

function myode4()

clc;close all

tspan=[0:0.1:12];

x0=[0 0];%假設t=0時s1=0,s2=0,如果不是自己改[t,x]=ode45(@(t,x) weifen(t,x),tspan,x0,);

disp('     時間       s1       s2')disp([t,x])

plot(t,x(:,1))

hold on

plot(t,x(:,2),'r')

xlabel('t')

ylabel('s')

legend('s1(t)曲線圖','s2(t)曲線圖')function dx=weifen(t,x)dx=zeros(2,1);

k0=8;k1=1;k=1;k2=5;n=2;

dx(1)=k0-k1*(1+(x(2)/k)^n)*x(1);

dx(2)=k1*(1+(x(2)/k)^n)*x(1)-k2*x(2);

endend

matlab解多元常微分方程組

3樓:三城補橋

這個方程要解出來還要初始條件吧

不妨設(x(0),y(0))=(a,b);

還有用ode45只能得到數值解,不能給出解析式表達那麼先建立一個函式檔案

test_fun.m

function dx=tsst_fun(x,t)dx(1)= c-b*x(1)-w*x(1)*x(2);

dx(2)=w*x(1)*x(2)-(b+m)*x(2);

那麼呼叫ode45

x0=(0,0);

t0=0:0.01:10;

;%根據你所想要的求得值設定t0,間隔是任意的,與求解所用的步長無關,

[x,t]=ode45(@test_fun,t0,x0);得到了

如何用matlab求解一個二階常係數微分方程組

4樓:我行我素

用命令:dsolve('s','s1','s2',…,'x')

其中s 為方程s1,s1,s3,…為初始條件x 為自變數方程s 中用d 表示求導

數d2,d3,…表示二階三階等高階導數初始條件預設時給出帶任意常數

c1,c2,..的通解自變數預設值為t 也可求解微分方程組

例1、dsolve('dy=1+y^2')

結果ans =tan(t+c1)

2、y=dsolve('dy=1+y^2','y(0)=1','x')

結果y =tan(x+1/4*pi)

3、x=dsolve('d2x+2*d1x+2*x=exp(t)','x(0)=1','dx(0)=0')

結果x =1/5*exp(t)+3/5*exp(-t)*sin(t)+4/5*exp(-t)*cos(t)

4、s=dsolve('df=3*f+4*g','dg=-4*f+3*g') %解微分方程組

s =f: [1x1 sym]

g: [1x1 sym]

計算結果返回在一個結構 s 中為了看到其中 f,g 的值有如下指令

f=s.f

g=s.g

f =exp(3*t)*(cos(4*t)*c1+sin(4*t)*c2)

g =-exp(3*t)*(sin(4*t)*c1-cos(4*t)*c2)

5樓:minquan一人

一、理論解,用dsolve函式(在command window 中輸入doc dsolve可以檢視幫助)

示例:**:

[x,y]=dsolve('d2x+2*dx=x+2*y-exp(-t)','dy=4*x+3*y+4*exp(-t)')

二、數值解,用ode45,或ode23, ode15s其他函式。(在command window 中輸入doc ode45可以檢視幫助)

示例:1. 建立m檔案

function dy=vdp(t,y)

dy=[y(2);

1000*(1-y(1)^2)*y(2)-y(1);];

2. 呼叫matlab 函式ode15s

[t,y]=ode15s('vdp',[0 1000],[2 0]);

plot(t,y(:,1));

影象為:

matlab解微分方程組(帶引數) 20

6樓:匿名使用者

可以藉助於巢狀函式或匿名函式實現附加引數的傳遞,例如function main

y0 = [1.4; 0.1; 0.1];

a = linspace(eps, 10, 20);

y = a * nan;

for ii = length(a)

a = a(ii);

y = ode45(@eq2, [0 a], y0);

y(ii) = y(end, 1);

endplot(a, y)

function dy=eq2(t,y)

dy = y*0;

dy(1)=-(a*y(2))/(4*exp(a*t/4));

dy(2)=-(a/4)*(exp(a*t/4))*(y(1)+0.5)+(a/4)*y(2)-y(3)*((exp(a*t/4))^2);

dy(3)=4*y(2);

endend

但微分方程組似乎是剛性的,不過換用ode15s、ode23s等適合剛性系統的演算法效果也不理想(可以呼叫ode*函式時不返回引數,觀察求解的過程)。

急求matlab解常微分方程組數值解的解決方案

7樓:日向淳正

呼叫方法:[t,x] = ode45(@eqx,[0 0.2] , [0 1 1.1 1.25])x的初始值寫在一個矩陣裡.

另外你的函式定義時k少一維k(4),我給你加了一個:

function xdot = eqx(t,x);

m = 0.5;

alf = 0.15;

k=[0.0265,0.1,0.15,0.12];

q=20;

a=0.8;

xdot = zeros(4,1);

xdot(1) = q - alf * x(1) * x(2) + a*m*(x(1)+x(2)+x(3)+x(4));

xdot(2) = x(2) * (-m + k(2) * alf * x(1) - alf * x(3));

xdot(3) = x(3) * (-m + k(3) * alf * x(2) - alf * x(4));

xdot(4) = x(4) * (-m + k(4) * alf * x(3));

8樓:匿名使用者

你那個函式裡k(4)是多少啊?沒有定義

求解微分方程組的matlab程式

一般解非線性微分方程組可以用ode45,ode23等命令,程式設計時將p,v,th,x,y 記為x 5 x 1 x 2 x 3 x 4 方便方程組函式的編寫就這麼記號 下面便方程組函式,檔案命名為myfun.m function dx myfun t,x c n cx g r ta 引數項值自賦 d...

二元二階微分方程組求數值解的matlab程式

花開勿敗的雨季 方程或者初始條件有問題,請認真核實。原因 如果按照現在的初始條件,則第一個微分方程各項為0,方程不起作用。而且就演算法而言,二階 最高階 導數的係數為0,會導致數值積分演算法無法啟動。參考 大致如下 12 3456 78910 1112 1314 1516 17m 1 g 9.8 k...

MATLAB求解非線性高階微分方程組方法

信科濱 參考 回答的一樣的問題,還有下面的程式 function dy odefun t,y y 1 x y 2 x y 3 y y 4 y y 5 z y 6 z u 9.8 1 dy zeros 6,1 dy 1 y 2 dy 2 u y 1 sqrt y 1 2 y 3 2 y 5 2 3 d...