導航:首頁 > 安裝方法 > 數值分析歐拉方法的演算法步驟

數值分析歐拉方法的演算法步驟

發布時間:2025-03-24 16:39:45

A. matlab實現歐拉法和RK-4方法的數值計算

程序已經寫了,不過步長你得自己調,當步長較小時,計算時間會很長
另外,tend是時間的終值,你可以設小一些。因為解析解為10*cos(x),我設成pi,就是計算半個周期。

x''(t)=-x(t)
引入y1=x,y2=x',則
y1'=y2
y2'=-x=-y1

初始條件為:
y1(0)=10;
y2(0)=0;

將下面兩行百分號之間的內容,保存成DiffEulerRk4.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function MaxDiffX=DiffEulerRk4(dt,PlotFlag)
%dt是步長
%PlotFlag是否作圖
if nargin<1
dt=0.01;
end
if nargin<2
PlotFlag=0;
end

f=inline('[y(2);-y(1)]','t','y'); %微分方程的右邊項
t0=0; %初始時刻
tend=pi; %計算的點數
tt=t0:dt:tend; %一系列離散的點
N=length(tt); %點數
y0=[10;0];

%%(1)歐拉法
EulerY=y0;
for i=2:N
EulerY(:,i)=EulerY(:,i-1)+dt*f(tt(i-1),EulerY(:,i-1));
end
EulerX=EulerY(1,:); %取x

%%(2)龍格庫塔法
RkY=y0;
for i=2:N
k1=f(tt(i-1), RkY(:,i-1));
k2=f(tt(i-1)+dt/2, RkY(:,i-1)+k1*dt/2);
k3=f(tt(i-1)+dt/2, RkY(:,i-1)+k2*dt/2);
k4=f(tt(i-1)+dt, RkY(:,i-1)+k3*dt);
RkY(:,i)=RkY(:,i-1)+(k1+2*k2+2*k3+k4)*dt/6;
end
RkX=RkY(1,:); %取x

%精確解
syms t
analytic=dsolve('D2x=-x','x(0)=10','Dx(0)=0','t');
rightdata=subs(analytic,t,tt);

if PlotFlag
plot(tt,EulerX,'b-',tt,RkX,'r--',tt,rightdata,'g-.')
legend('Euler','Runge-Kutta','analytic')
end

MaxDiffX=[max(abs(RkX-rightdata)),max(abs(EulerX-rightdata))];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

所有題,都得你自己調步長。
輸入:
DiffEulerRk4(0.01,1) %步長取0.01的計算結果,參數為1代表作圖,自己得修改步長

%%下面是變化
Error=[];
Dt=[5e-4,1e-3,2e-3,5e-3,0.01,0.05,0.1];
for dt=Dt %幾種步長,自行修改
dt %查看dt,步長小,計算量大
Error_1=DiffEulerRk4(dt); %不作圖
Error=[Error;Error_1]; %保存歐拉法誤差
end
semilogx(Dt,Error)
legend('Euler','RK4')
xlabel('步長')
ylabel('誤差')
title('與理論值誤差')

閱讀全文

與數值分析歐拉方法的演算法步驟相關的資料

熱點內容
如何惹女生的正確方法 瀏覽:914
中風髖關節外翻康復訓練方法 瀏覽:977
閱讀理解題技巧和方法小學二年級 瀏覽:140
六大方法教你檢測燕窩真假 瀏覽:344
屬馬刑太歲的最佳解決方法 瀏覽:685
python中show方法怎麼用 瀏覽:782
brita凈水壺使用方法 瀏覽:442
有什麼好的減肥方法健康又快速 瀏覽:539
真假紫金鼠手串鑒別方法 瀏覽:231
房子進老鼠用什麼方法抓住它 瀏覽:25
酸辣椒腌制方法簡單又好吃 瀏覽:957
連接瓷磚接縫的方法 瀏覽:144
工程項目中風險的解決方法 瀏覽:360
洗頭時如何防止脫發最有效的方法 瀏覽:836
關於前列腺治療方法 瀏覽:357
國6的排氣管有哪些處理方法 瀏覽:788
有什麼好的方法趕蚊子 瀏覽:692
汽車電瓶調節最佳方法 瀏覽:125
早泄的解決方法治療周期 瀏覽:409
西方歷史研究中的問題和方法 瀏覽:36