MATLABode45已知初值如何求解

2021-03-04 09:01:08 字數 6619 閱讀 6693

1樓:匿名使用者

function dx = rigid(t,x)dx = ones(6,1);

dx(1) = 0.0515*x(2)-0.388*x(1)-0.136*x(1);

dx(2) = 0.388*x(1)-0.0515*x(2);

dx(3) = 0.136*x(1)+0.0254*x(6)-0.067*x(3)-0.0788*x(3);

dx(4) = 0.0788*x(3)-0.0068*x(4)+0.001*x(5);

dx(5) = 0.0068*x(4)-0.001*x(5);

dx(6) = 0.067*x(3)-0.0254*x(6);

end以上**應該儲存在rigid.m檔案中然後在命令列中或者另乙個m檔案中執行一下回**ts=[0 10]; %這是求解的範

答圍,可以需要自己設定

x0=[100 0 0 0 0 0]';

[t x]=ode45(@rigid,ts,x0);

得到的結果t是nx1的數列,x是nx6的矩陣x中每一行的6個數對於t中相應行時間的x1~x6的值

用matlab算ode23、ode45求解初值等問題

2樓:匿名使用者

編寫m檔案

cdq.m

function dy=cdq(x,y)

dy=zeros(2,1);

dy(1)=y(2);

dy(2)=-2*y(2)-y(1)+cos(x);

編寫m檔案cdq1.m

function dy=cdq1(x,y)

dy=[0 1;-1 -2]*y+[0;1]*cos(x);

命令視窗

>> subplot(1,2,1),ode23(@ cdq,[0,2*pi],[0,3/2]),grid

>> subplot(1,2,2),ode45(@ cdq,[0,2*pi],[0,3/2]),grid

>> [x,y]=ode23(@ cdq1,[0,2*pi],[0,3/2]),grid

x =0

0.0001

0.0003

0.0017

0.0083

0.0417

0.1276

0.2556

0.4238

0.6344

0.8650

1.0990

1.3340

1.5637

1.8325

2.2382

2.6170

2.9650

3.2904

3.4980

3.7056

3.9507

4.2760

4.6394

4.7487

4.8580

4.9902

5.1739

5.4015

5.6654

5.9586

6.2249

6.2832

y =0 1.5000

0.0001 1.4999

0.0005 1.4994

0.0025 1.4967

0.0124 1.4834

0.0608 1.4188

0.1760 1.2638

0.3244 1.0602

0.4831 0.8328

0.6329 0.5964

0.7450 0.3810

0.8118 0.1941

0.8376 0.0292

0.8275 -0.1145

0.7763 -0.2626

0.6317 -0.4416

0.4422 -0.5515

0.2416 -0.5947

0.0495 -0.5812

-0.0677 -0.5454

-0.1754 -0.4902

-0.2851 -0.4029

-0.3928 -0.2583

-0.4528 -0.0735

-0.4576 -0.0160

-0.4562 0.0412

-0.4463 0.1088

-0.4180 0.1981

-0.3613 0.2975

-0.2700 0.3911

-0.1443 0.4611

-0.0172 0.4891

0.0114 0.4904

>> [x,y]=ode45(@ cdq1,[0,2*pi],[0,3/2]),grid

x =0

0.0000

0.0001

0.0001

0.0001

0.0003

0.0005

0.0006

0.0008

0.0016

0.0025

0.0033

0.0042

0.0083

0.0125

0.0167

0.0209

0.0418

0.0628

0.0837

0.1046

0.2093

0.3140

0.4186

0.5233

0.6667

0.8101

0.9535

1.0969

1.2540

1.4111

1.5682

1.7252

1.8823

2.0394

2.1965

2.3536

2.5106

2.6677

2.8248

2.9819

3.1390

3.2960

3.4531

3.6102

3.7497

3.8892

4.0288

4.1683

4.3147

4.4612

4.6076

4.7540

4.8899

5.0258

5.1617

5.2976

5.4425

5.5874

5.7323

5.8773

5.9787

6.0802

6.1817

6.2832

y =0 1.5000

0.0001 1.4999

0.0001 1.4999

0.0002 1.4998

0.0002 1.4997

0.0005 1.4994

0.0007 1.4991

0.0010 1.4987

0.0012 1.4984

0.0025 1.4967

0.0037 1.4951

0.0050 1.4934

0.0062 1.4917

0.0124 1.4834

0.0186 1.4751

0.0248 1.4669

0.0309 1.4587

0.0610 1.4185

0.0903 1.3792

0.1188 1.3410

0.1465 1.3037

0.2737 1.1305

0.3838 0.9767

0.4787 0.8393

0.5599 0.7156

0.6515 0.5640

0.7226 0.4291

0.7752 0.3073

0.8111 0.1958

0.8329 0.0833

0.8377 -0.0207

0.8268 -0.1171

0.8014 -0.2061

0.7625 -0.2876

0.7114 -0.3610

0.6495 -0.4259

0.5781 -0.4813

0.4989 -0.5265

0.4134 -0.5607

0.3234 -0.5834

0.2307 -0.5941

0.1374 -0.5928

0.0452 -0.5792

-0.0439 -0.5536

-0.1282 -0.5166

-0.1975 -0.4751

-0.2603 -0.4258

-0.3160 -0.3697

-0.3633 -0.3078

-0.4033 -0.2380

-0.4327 -0.1644

-0.4513 -0.0883

-0.4587 -0.0114

-0.4554 0.0591

-0.4426 0.1277

-0.4208 0.1933

-0.3903 0.2547

-0.3490 0.3143

-0.2996 0.3666

-0.2432 0.4107

-0.1810 0.4457

-0.1348 0.4644

-0.0869 0.4781

-0.0379 0.4867

0.0117 0.4902

matlab ode45用法

3樓:大野瘦子

用法:[t,y] = ode45(odefun,tspan,y0)1、odefun 是函式

控制代碼,可以是函式檔名,匿名函式控制代碼或內聯函式名。

2、tspan是區間 [t0 tf] 或者一系列散點[t0,t1,...,tf]。

3、y0是初始值向量。

4、t返回列向量的時間點。

5、y返回對應t的求解列向量。

算例程式:

function testode45

tspan=[3.9 4.0]; %求解區間y0=[8 2]; %初值

[t,x]=ode45(@odefun,tspan,y0);

plot(t,x(:,1),'-o',t,x(:,2),'-*')legend('y1','y2')

title('y'' ''=-t*y + e^t*y'' +3sin2t')

xlabel('t')

ylabel('y')

function y=odefun(t,x)y=zeros(2,1); % 列向量

y(1)=x(2);

y(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t); %常微分方程公式

endend

4樓:機智的煎餅

ode45,常微分方程的數值求解。matlab提供了求常微分方程數值解的函式。當難以求得微分方程的解析解時,可以求其數值解。matlab ode45用法如下:

[t,y] = ode45(odefun,tspan,y0)

[t,y] = ode45(odefun,tspan,y0,options)

[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)

sol = ode45(odefun,[t0tf],y0...)

[t,y] = ode45(odefun,tspan,y0)

odefun 是函式控制代碼,可以是函式檔名,匿名函式控制代碼或內聯函式名

tspan 是區間 [t0 tf] 或者一系列散點[t0,t1,...,tf]

y0 是初始值向量

t 返回列向量的時間點

y 返回對應t的求解列向量

[t,y] = ode45(odefun,tspan,y0,options)

options 是求解引數設定,可以用odeset在計算前設定誤差,輸出引數,事件等

[t,y,te,ye,ie] =ode45(odefun,tspan,y0,options)

在設定了事件引數後的對應輸出

te 事件發生時間

ye 事件發生時之答案

ie 事件函式消失時之指標i

sol =ode45(odefun,[t0 tf],y0...)

sol 結構體輸出結果

ode的作用

ode是matlab專門用於解微分方程的功能函式。該求解器有變步長(variable-step)和定步長(fixed-step)兩種型別。

不同型別有著不同的求解器,其中ode45求解器屬於變步長的一種,採用runge-kutta演算法;其他採用相同演算法的變步長求解器還有ode23。

ode45表示採用四階-五階runge-kutta演算法,它用4階方法提供候選解,5階方法控制誤差,是一種自適應步長(變步長)的常微分方程數值解法,其整體截斷誤差為(δx)^5。

解決的是nonstiff(非剛性)常微分方程。ode45是解決數值解問題的首選方法,若長時間沒結果,應該就是剛性的,可換用ode15s試試。

已知邊緣密度函式如何求聯合密度函式?已知X,YD獨立

兩個連續型的隨機變數相互獨立的話,聯合密度函式就是兩個邊緣密度函式的乘積 已知xy的邊緣密度函式 如何求聯合概率密度 f x 1 2 1他0 f y e y y 0 f x,y f x f y 1 2 e y 100 其他 已知聯合概率分布函式怎樣求邊緣概率密度函式 5 解 1 f x,y d dx...

已知生產函式,如何求擴充套件線方程

擴充套件線是所有等生產線的最優組合的軌跡。所以方程就是 mpl mpk w r這個公式可以進行推導出其他形式,比如你要用資本和勞動的投入量比例進行反應,那你就能推導出k l和w r之間的關係,也就是k l f w r 所有的最優組合軌跡一定是按w r這個結構落在各條等生產線上。柯布 道格拉斯 生產函...

如何求反函式,如何求已知函式的反函式?

可以使用arccos計算公式 cos arcsinx 1 x 2 計算。設函式y f x x a 的值域是c,若找得到一個函式g y 在每一處g y 都等於x,這樣的函式x g y y c 叫做函式y f x x a 的反函式,記作x f 1 y 反函式x f 1 y 的定義域 值域分別是函式y f...