ZKX's LAB

MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程 龙格库塔法和隐式欧拉法

2020-07-22知识5

MATLAB中已知系统微分方程及初始值用欧拉法和龙格库塔法解一阶微分方程 function Euler欧拉法和龙格库塔算法解一阶常微分方程源代码例子dy/dx=-y+x+1f=inline('-y+x+1','x','y');微分方程的右边项dx=0.5;x方向步长xleft=0;区域的左边界xright=10;区域的右边界xx=xleft:dx:xright;一系列离散的点n=length(xx);点的个数y0=1;(1)欧拉法Euler=y0;for i=2:nEuler(i)=Euler(i-1)+dx*f(xx(i-1),Euler(i-1));end(2)龙格库塔法RK=y0;for i=2:nk1=f(xx(i-1),RK(i-1));k2=f(xx(i-1)+dx/2,RK(i-1)+k1*dx/2);k3=f(xx(i-1)+dx/2,RK(i-1)+k2*dx/2);k4=f(xx(i-1)+dx,RK(i-1)+k3*dx);RK(i)=RK(i-1)+dx*(k1+2*k2+2*k3+k4)/6;endEuler和Rk法结果比较plot(xx,Euler,xx,RK)hold on精确解用作图syms xrightsolve=dsolve('Dy=-y+x+1','y(0)=1','x');求出解析解rightdata=subs(rightsolve,xx);将xx代入解析解,得到解析解对应的数值plot(xx,rightdata,'r*')legend('Euler','Runge-Kutta','analytic')什么是欧拉方法(Euler's method)? ?www.zhihu.com 简单来说,隐式欧拉这里 是已知的,这里的 才是未知量,F是函数。我们需要求得当F=0时,y究竟应该是多少,也就是根是多少。怎么办呢?先猜一个数,然后。分别用 欧拉法 和 四阶龙格-库塔法 解微分方程 f=inline('x*y','x','y');微分2113方程的右边项dx=0.05;x方向步长xleft=0;区域的左5261边界4102xright=3;区域的右边界xx=xleft:dx:xright;一系列离散的点n=length(xx);点的个数y0=1;(1)欧拉法Euler=y0;for i=2:nEuler(i)=Euler(i-1)+dx*f(xx(i-1),Euler(i-1));end(2)龙格1653库塔法RK=y0;for i=2:nk1=f(xx(i-1),RK(i-1));k2=f(xx(i-1)+dx/2,RK(i-1)+k1*dx/2);k3=f(xx(i-1)+dx/2,RK(i-1)+k2*dx/2);k4=f(xx(i-1)+dx,RK(i-1)+k3*dx);RK(i)=RK(i-1)+dx*(k1+2*k2+2*k3+k4)/6;endEuler和Rk法结果比较plot(xx,Euler,xx,RK)hold on精确解用作图syms xrightsolve=dsolve('Dy=x*y','y(0)=1','x');求出解析解rightdata=subs(rightsolve,xx);将xx代入解析解,得到解析解对应的数值plot(xx,rightdata,'r*')legend('Euler','Runge-Kutta','analytic')数值分析计算方法求解 欧拉法的局部截断误差的阶为O(h2);改进欧拉法的局部截断误差的阶为 O(h3);三阶龙格-库塔法的局部截断误差的阶为 O(h4).四阶龙格-库塔法的局部截断误差的阶为 O(h5).欧拉法的绝对稳定实区域为-2龙格-库塔方法求解三阶常微分方程 第一步:将高阶常微分方程转换成常微分方程组,func(t,x)第二步:调用runge_kutta(@func,y0,h,a,b)例如:二阶常微分方程func。mfunction z=func(t,y)z=[y(2);(1-y(1)^2)*y(2)-y(1)];main。mclear all;close all;clcy0=[0.25;0];h=0.1;a=0;b=20;[t1 y1]=runge_kutta(@rhs_7,y0,h,a,b)分别用改进的欧拉法和四阶龙格-库塔公式求解微分方程初值问题 分别用改进的欧拉法和四阶龙格-库塔公式求解微分方程初值问题(1)Y'=Y-2X/Y,Y(0)=1,X=[0,1],H=0.1(2)Y'=X2+。求数值分析大神解题? 有问题,上知乎。知乎,可信赖的问答社区,以让每个人高效获得可信赖的解答为使命。知乎凭借认真、专业和友善的社区氛围,结构化、易获得的优质内容,基于问答的内容生产。怎么用龙格库塔法 初值给一下。在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存%function dxdt=ode_Miss_ghost(t,x)%分别用x(1),x(2),x(3),x(4)代替N1,P1,N2,P2N1=x。

#龙格库塔法#欧拉法

随机阅读

qrcode
访问手机版