常微分方程欧拉法代码_常微分方程欧拉方法
大家好,今天我将为大家讲解常微分方程欧拉法代码的问题。为了让大家更好地理解这个问题,我将相关资料进行了整理,现在就让我们一起来看看吧。
1.大佬救命这matlab题怎么做?
2.matlab实现欧拉法和RK-4方法的数值计算
3.用改进的欧拉公式求初值问题!如能解答,万分感谢!
4.关于改进欧拉法计算常微分方程,急!
5.证明能用改进的欧拉方法精确求解初值问题y'=ax+b,y(0)=0
大佬救命这matlab题怎么做?
问题常微分方程数值解问题。用预估校正Euler法,求解初值问题。求出步长h=0.1的所有点的值,并绘制图形。
求解方法用预估校正Euler法来求解,其方法是:
第一步,根据y(0)=1边界值,通过折线法计算,提供初值,即
上述式(1)也就是预报公式。
第二步,根据初值,通过梯形法计算,得到较精确的值,即
上述式(2)也就是校正公式。
这里,yn—表示y(xn)的近似值;h=x(i+1)-x(i)—表示步长
第三步,按上述循环计算,计算当x分别等于0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1的y(x)值。
第四步,根据x和y值,进行绘制该微分方程的数值解曲线。
求解过程
通过计算,得到微分方程的数值解
x =[0 0.1 0.20.30.4 0.50.6 0.7 0.8 0.91.0]
y =[1 1.0959 1.1841 1.26621.3434 1.4164 1.4860 1.5525 1.6165 1.6782 1.7379]
根据这些点,就可以绘制其图形。
matlab求解求解步骤:
第一步,根据预估校正Euler法的迭代式,编写其函数,如Euler_Cauchy(func,x0,y0,xf,h)
这里,func——表示微分方程,x0,y0——表示微分方程初始值,xf——表示x的终值,hf——表示步长
第二步,编写微分方程函数,即
function f=func(x,y);?
f(1)=y-2*x/y;
f=f(:);
end
第三步,编写主程序,即
y0=1; ?%初值
x0=0;xf=1; %x的范围
n=10; %等份
h=(xf-x0)/n %步长
[t,x]=Euler_Cauchy(@func,x0,y0,xf,h); %预估校正Euler法计算
plot(x,y,'ks-') %绘制函数图
tu on %绘制坐标区网格线
xlabel('x'),ylabel('y(x)') %标注坐标轴名称
第四步,运行后,即可得到如下图形。
数值解图形分析从上述图形中,可以看到得到的数值解与精确解比较,精度较高的顺序依次是:
欧拉法→改进的欧拉法(预估校正Euler法)→龙格-库塔法→解析解
常微分方程数值解方法
1、欧拉法。欧拉方法(也叫折线法)是最早的一种数值方法。欧拉方法是一种数值解微分方程的方法,它是由瑞士数学家欧拉发明的。欧拉方法的基本思想是将微分方程转化为差分方程然后通过迭代求解差分方程来逼近微分方程的解。是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解。它是一种解决数值常微分方程的最基本的一类显型方法。
欧拉方法的具体步骤如下:
首先将微分方程转化为差分方程,即将微分方程史的导数用差分代替,然后将差分方程史的未知函数值用前一时刻的函数值代替,得到一介递推公式。接着.从初始时刻开始,按照递推公式依次计算出每个时刻的函数值,直到达到所需的时刻为止。最后,将计算出的函数值作为微分方程的近似解。
欧拉法迭代式
2、预估校正欧拉法。预估校正欧拉法是对欧拉算法的改进方法。微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值,这个过程称为离散化。实现离散化的基本途径是用向前差商来近似代替导数,这就是欧拉算法实现的依据。
这个方法中,(1)式用折线法提供初值,称为预报公式。(2)式用梯形法给出较精确的值,称为校正公式。合称预报校正公式。
matlab实现欧拉法和RK-4方法的数值计算
我只有欧拉法可以吗。我有前欧拉法和后欧拉法。你要哪个呢?
先给你前欧拉法
function [tF,yF] = ForwardEuler(f,a,b,h,y0)
N = fix((b - a)/h);
t=a %set initial values
y=y0
tF = zeros(N+1,1); % initialize tF and yF with zero arrays
yF = zeros(N+1,length(y));
tF(1) = t; % store initial values in arrays tF, yF
yF(1,:) = y.'; % Note: y values are stored as ROW of array yF
for i=1:N
y = y + h*feval(f,t,y); % evaluate slope= feval(f,t,y);
t = t + h;
tF(i+1,:) = t; % store new values in arrays tF, yF
yF(i+1,:) = y.'; % Note: y values are stored as ROW of array yF
end
运行之后调入你的函数就ok了。a,b是范围,h是步长,y0是初值
用改进的欧拉公式求初值问题!如能解答,万分感谢!
程序已经写了,不过步长你得自己调,当步长较小时,计算时间会很长
另外,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('与理论值误差')
关于改进欧拉法计算常微分方程,急!
Author:Wacs5Date:20090106(YYYY-MM-DD)
Function:欧拉方法与改进的欧拉方法求常微分方程
Describe
用欧拉方法与改进的欧拉方法求初值问题dy/dx=(2x)/(3y^2)
y(0)=1 ,在区间[0,1]上取步长h=0.1的数值解。
要求:显示各x值下(0、0.1、0.2… 0.9、1)两种方法计算的y值。
扩展资料:
可以将区间[a,b]分成n段,那么方程在第xi点有y'(xi)=f(xi,y(xi)),再用向前差商近似代替导数则为:(y(xi+1)-y(xi))/h= f(xi,y(xi)),在这里,h是步长,即相邻两个结点间的距离。因此可以根据xi点和yi点的数值计算出yi+1来:
yi+1= yi+h*f(xi ,yi),i=0,1,2,L
这就是欧拉公式,若初值yi+1是已知的,则可依据上式逐步算出数值解y1,y2,L。
百度百科-改进欧拉法
证明能用改进的欧拉方法精确求解初值问题y'=ax+b,y(0)=0
由y'=y得y=ce^x
设y=c(x)*e^x
代入原方程
则c'(x)=(x+1)/e^x
则c(x)=-(x+1)e^(-x)-e^(-x)+c
因此,y=[-(x+1)e^(-x)-e^(-x)+c)e^x=-x-2+ce^x
把y(0)=0代入得c=2
因此,y=-x-2+2e^x
证明能用改进的欧拉方法精确求解初值问题y'=ax+b,y(0)=0:欧拉法是常微分方程的数值解法的一种,其基本思想是迭代。其中分为前进的EULER法、后退的EULER法、改进的EULER法。
研究一些物理问题,如热的传导、圆膜的振动、电磁波的传播等问题时,常常碰到如下形式的方程:ax?D?y+bxDy+cy=f(x)其中a、b、c是常数,这是一个二阶变系数线性微分方程。
它的系数具有一定的规律:二阶导数D?y的系数是二次函数ax?,一阶导数Dy的系数是一次函数bx,y的系数是常数。这样的方程称为欧拉方程。
例如:(x?D?-xD+1)y=0,(x?D?-2xD+2)y=2x?-x等都是欧拉方程。化学中足球烯即C-60和此方程有关。?
扩展资料
欧拉法的定义有很多,主要分为以下几类:
一种简单的显示单步法.计算公式由yn+1=yn+hfn表出,式中fn=f(xn,yn).欧拉法是一阶显式方法,且是收敛的。其稳定函数为一次多项式R(z)=1+z,z为复数,绝对稳定区域为复平面上以(-1,0)为中心的单位圆内部。
是指用“流速场”这个概念来描述流体的运动,它表示流速在流场中的分布和随时间的变化。把流速u在各坐标轴上的投影ua、uy和uz表为x、y、z和t四个变量的函数,ux=ux(x,y,z,t),uy=uy(x,y,z,t),uz=uz(x,y,z,t)。这样的描述方法称为欧拉法
今天的讨论已经涵盖了“常微分方程欧拉法代码”的各个方面。我希望您能够从中获得所需的信息,并利用这些知识在将来的学习和生活中取得更好的成果。如果您有任何问题或需要进一步的讨论,请随时告诉我。
- 上一篇:野马新能源ev350
- 下一篇:日产汽车全部车型_日产汽车全部车型图片