导航:首页 > 安装方法 > 数值分析欧拉方法的算法步骤

数值分析欧拉方法的算法步骤

发布时间: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('与理论值误差')

阅读全文

与数值分析欧拉方法的算法步骤相关的资料

热点内容
国6的排气管有哪些处理方法 浏览:788
有什么好的方法赶蚊子 浏览:692
汽车电瓶调节最佳方法 浏览:125
早泄的解决方法治疗周期 浏览:409
西方历史研究中的问题和方法 浏览:36
硬度测量方法和范围 浏览:212
挺腿的锻炼方法 浏览:689
牙角酥制作方法视频 浏览:462
筛查宫颈癌的最常用的方法是 浏览:657
手摇式电子血压计正确测量方法 浏览:694
如何强制复制网站中禁止复制网页文字的方法 浏览:904
解决投诉的最好方法 浏览:558
中学生如何减肥快速有效方法 浏览:659
锚杆注浆量计算方法 浏览:359
手机拍照清晰度高的方法 浏览:163
儿童自制家具训练方法 浏览:896
锦鲤卡使用方法 浏览:761
胖子如何瘦腿最快方法 浏览:583
笋怎么剥春笋的正确焯水方法 浏览:362
手脚出汗治疗简单方法西药 浏览:830