MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程

合集下载

MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程

MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程

姓名:樊元君学号:02 日期:一、实验目的掌握MATLAB语言、C/C++语言编写计算程序的方法、掌握改进欧拉法与四阶龙格-库塔求解一阶常微分方程的初值问题。

掌握使用MATLAB程序求解常微分方程问题的方法。

:二、实验内容1、分别写出改进欧拉法与四阶龙格-库塔求解的算法,编写程序上机调试出结果,要求所编程序适用于任何一阶常微分方程的数值解问题,即能解决这一类问题,而不是某一个问题。

实验中以下列数据验证程序的正确性。

求,步长h=。

*2、实验注意事项的精确解为,通过调整步长,观察结果的精度的变化^)三、程序流程图:●改进欧拉格式流程图:~|●四阶龙格库塔流程图:]四、源程序:●改进后欧拉格式程序源代码:function [] = GJOL(h,x0,y0,X,Y)format longh=input('h=');…x0=input('x0=');y0=input('y0=');disp('输入的范围是:');X=input('X=');Y=input('Y=');n=round((Y-X)/h);\i=1;x1=0;yp=0;yc=0;for i=1:1:nx1=x0+h;yp=y0+h*(-x0*(y0)^2);%yp=y0+h*(y0-2*x0/y0);%·yc=y0+h*(-x1*(yp)^2);%yc=y0+h*(yp-2*x1/yp);%y1=(yp+yc)/2;x0=x1;y0=y1;y=2/(1+x0^2);%y=sqrt(1+2*x0);%fprintf('结果=%.3f,%.8f,%.8f\n',x1,y1,y);:endend●四阶龙格库塔程序源代码:function [] = LGKT(h,x0,y0,X,Y)。

format longh=input('h=');x0=input('x0=');y0=input('y0=');disp('输入的范围是:');"X=input('X=');Y=input('Y=');n=round((Y-X)/h);i=1;x1=0;k1=0;k2=0;k3=0;k4=0;for i=1:1:n~x1=x0+h;k1=-x0*y0^2;%k1=y0-2*x0/y0;%k2=(-(x0+h/2)*(y0+h/2*k1)^2);%k2=(y0+h/2*k1)-2*(x0+h/2)/(y0+h/2*k1);% k3=(-(x0+h/2)*(y0+h/2*k2)^2);%k3=(y0+h/2*k2)-2*(x0+h/2)/(y0+h/2*k2);% k4=(-(x1)*(y0+h*k3)^2);%k4=(y0+h*k3)-2*(x1)/(y0+h*k3);%…y1=y0+h/6*(k1+2*k2+2*k3+k4);%y1=y0+h/6*(k1+2*k2+2*k3+k4);%x0=x1;y0=y1;y=2/(1+x0^2);%y=sqrt(1+2*x0);%fprintf('结果=%.3f,%.7f,%.7f\n',x1,y1,y);end·end*五、运行结果:改进欧拉格式结果:;}四阶龙格库塔结果:步长分别为:和时,不同结果显示验证了步长减少,对于精度的提高起到很大作用,有效数字位数明显增加。

常微分方程组的四阶RungeKutta龙格库塔法matlab实现

常微分方程组的四阶RungeKutta龙格库塔法matlab实现

常微分方程组的四阶Runge-Kutta方法1.问题:1.1若用普通方法-----仅适用于两个方程组成的方程组编程实现:创建M 文件:function R = rk4(f,g,a,b,xa,ya,N)%UNTITLED2 Summary of this function goes here% Detailed explanation goes here%x'=f(t,x,y) y'=g(t,x,y)%N为迭代次数%h为步长%ya,xa为初值f=@(t,x,y)(2*x-0.02*x*y);g=@(t,x,y)(0.0002*x*y-0.8*y);h=(b-a)/N;T=zeros(1,N+1);X=zeros(1,N+1);Y=zeros(1,N+1);T=a:h:b;X(1)=xa;Y(1)=ya;for j=1:Nf1=feval(f,T(j),X(j),Y(j));g1=feval(g,T(j),X(j),Y(j));f2=feval(f,T(j)+h/2,X(j)+h/2*f1,Y(j)+g1/2);g2=feval(g,T(j)+h/2,X(j)+h/2*f1,Y(j)+h/2*g1); f3=feval(f,T(j)+h/2,X(j)+h/2*f2,Y(j)+h*g2/2); g3=feval(g,T(j)+h/2,X(j)+h/2*f2,Y(j)+h/2*g2); f4=feval(f,T(j)+h,X(j)+h*f3,Y(j)+h*g3);g4=feval(g,T(j)+h,X(j)+h*f3,Y(j)+h*g3);X(j+1)=X(j)+h*(f1+2*f2+2*f3+f4)/6;Y(j+1)=Y(j)+h*(g1+2*g2+2*g3+g4)/6;R=[T' X' Y'];end情况一:对于x0=3000,y0=120控制台中输入:>> rk4('f','g',0,10,3000,120,10)运行结果:ans =1.0e+003 *0 3.0000 0.12000.0010 2.6637 0.09260.0020 3.7120 0.07740.0030 5.5033 0.08860.0040 4.9866 0.11930.0050 3.1930 0.11950.0060 2.7665 0.09510.0070 3.6543 0.07990.0080 5.2582 0.08840.0090 4.9942 0.11570.0100 3.3541 0.1185数据:情况二:对于x0=5000,y0=100命令行中输入:>> rk4('f','g',0,10,5000,100,10)运行结果:ans =1.0e+003 *0 5.0000 0.10000.0010 4.1883 0.11440.0020 3.2978 0.10720.0030 3.3468 0.09220.0040 4.2020 0.08760.0050 4.8807 0.09950.0060 4.2090 0.11260.0070 3.3874 0.10690.0080 3.4011 0.09340.0090 4.1568 0.08890.0100 4.7753 0.0991数据:结论:无论取得初值是哪一组,捕食者与被捕食者的数量总是一个增长另一个减少,并且是以T=5 为周期交替增长或减少的。

微分方程的数值解法matlab(四阶龙格—库塔法)

微分方程的数值解法matlab(四阶龙格—库塔法)

解析解: x x x1 3 2(((ttt))) 0 .0 8 1 1 2 P k 8 0siw n t) (2 .6 3 0 3 3 P k 0siw n t) (0 .2 12 2 2 P k 0siw n t)(
第一个质量的位移响应时程
Y (t)A(Y t)P(t)
(2)
Y (t)A(Y t)P(t)
3. Matlab 程序(主程序:ZCX)
t0;Y0;h;N;P0,w; %输入初始值、步长、迭代次数、初始激励力;
for i = 1 : N
t1 = t0 + h
P=[P0*sin(w*t0);0.0;0.0]
%输入t0时刻的外部激励力
Van der Pol方程
% 子程序 (程序名: dYdt.m ) function Ydot = dYdt (t, Y) Ydot=[Y(2);-Y(2)*(Y(1)^2-1)-Y(1)];
或写为
function Ydot = dYdt (t, Y) Ydot=zeros(size(Y)); Ydot(1)=Y(2); Ydot(2)=-Y(2)*(Y(1).^2-1)-Y(1)];
Solver解算指令的使用格式
说明:
t0:初始时刻;tN:终点时刻 Y0:初值; tol:计算精度
[t, Y]=solver (‘ODE函数文件名’, t0, tN, Y0, tol);
ode45
输出宗量形式
y1 (t0 )
Y
y1
(t1
)
y
1
(t
2
)
y2 (t0 )
y
2
(
t1
)
y
2
(
t

欧拉法求解一阶微分方程matlab

欧拉法求解一阶微分方程matlab

为了更好地理解欧拉法求解一阶微分方程在Matlab中的应用,我们首先来了解一些背景知识。

一阶微分方程是指只含有一阶导数的方程,通常表示为dy/dx=f(x,y),其中f(x,y)是关于x和y的函数。

欧拉法是一种常见的数值解法,用于求解微分方程的近似数值解。

它是一种基本的显式数值积分方法,通过将微分方程转化为差分方程来进行逼近。

在Matlab中,我们可以利用欧拉法求解一阶微分方程。

我们需要定义微分方程的函数表达式,然后选择合适的步长和初始条件,最后使用循环计算逼近解。

下面我们来具体讨论如何在Matlab中使用欧拉法来求解一阶微分方程。

我们假设要求解的微分方程为dy/dx=-2x+y,初始条件为y(0)=1。

我们可以通过以下步骤来实现:1. 我们需要在Matlab中定义微分方程的函数表达式。

在Matlab中,我们可以使用function关键字来定义函数。

在这个例子中,我们可以定义一个名为diff_eqn的函数,表示微分方程的右侧表达式。

在Matlab中,这个函数可以定义为:```matlabfunction dydx = diff_eqn(x, y)dydx = -2*x + y;end```2. 我们需要选择合适的步长和初始条件。

在欧拉法中,步长的选择对于数值解的精度非常重要。

通常情况下,可以先尝试较小的步长,然后根据需要进行调整。

在这个例子中,我们可以选择步长h=0.1,并设置初始条件x0=0,y0=1。

3. 接下来,我们可以使用循环来逼近微分方程的数值解。

在每一步,根据欧拉法的迭代公式y(i+1) = y(i) + h * f(x(i), y(i)),我们可以按照下面的Matlab代码计算逼近解:```matlabh = 0.1; % 步长x = 0:h:2; % 定义计算区间y = zeros(1, length(x)); % 初始化y的值y(1) = 1; % 设置初始条件for i = 1:(length(x)-1) % 欧拉法迭代y(i+1) = y(i) + h * diff_eqn(x(i), y(i));end```通过上述步骤,在Matlab中就可以用欧拉法求解一阶微分方程。

MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

MATLAB常微分⽅程数值解——欧拉法、改进的欧拉法与四阶龙格库塔⽅法MATLAB常微分⽅程数值解作者:凯鲁嘎吉 - 博客园1.⼀阶常微分⽅程初值问题2.欧拉法3.改进的欧拉法4.四阶龙格库塔⽅法5.例题⽤欧拉法,改进的欧拉法及4阶经典Runge-Kutta⽅法在不同步长下计算初值问题。

步长分别为0.2,0.4,1.0.matlab程序:function z=f(x,y)z=-y*(1+x*y);function R_K(h)%欧拉法y=1;fprintf('欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K=f(x,y);y=y+h*K;fprintf('欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%改进的欧拉法y=1;fprintf('改进的欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h,y+h*K1);y=y+(h/2)*(K1+K2);fprintf('改进的欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%龙格库塔⽅法y=1;fprintf('龙格库塔法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h/2,y+(h/2)*K1);K3=f(x+h/2,y+(h/2)*K2);K4=f(x+h,y+h*K3);y=y+(h/6)*(K1+2*K2+2*K3+K4);fprintf('龙格库塔法:x=%f, y=%f\n',x+h,y);end结果:>> R_K(0.2)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.200000, y=0.800000欧拉法:x=0.400000, y=0.614400欧拉法:x=0.600000, y=0.461321欧拉法:x=0.800000, y=0.343519欧拉法:x=1.000000, y=0.255934改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.200000, y=0.807200改进的欧拉法:x=0.400000, y=0.636118改进的欧拉法:x=0.600000, y=0.495044改进的欧拉法:x=0.800000, y=0.383419改进的欧拉法:x=1.000000, y=0.296974龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.200000, y=0.804636龙格库塔法:x=0.400000, y=0.631465龙格库塔法:x=0.600000, y=0.489198龙格库塔法:x=0.800000, y=0.377225龙格库塔法:x=1.000000, y=0.291009>> R_K(0.4)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.400000, y=0.600000欧拉法:x=0.800000, y=0.302400改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.400000, y=0.651200改进的欧拉法:x=0.800000, y=0.405782龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.400000, y=0.631625龙格库塔法:x=0.800000, y=0.377556>> R_K(1)欧拉法:x=0.000000, y=1.000000欧拉法:x=1.000000, y=0.000000改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=1.000000, y=0.500000龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=1.000000, y=0.303395注意:在步长h为0.4时,要将for i=1:1/h改为for i=1:0.8/h。

Matlab中龙格-库塔(Runge-Kutta)方法原理及实现

Matlab中龙格-库塔(Runge-Kutta)方法原理及实现

函数功能编辑本段回目录ode是专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法。

ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)³。

解决的是Nonstiff(非刚性)的常微分方程.是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,换用ode23来解.使用方法编辑本段回目录[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 事件消失时间sol =ode45(odefun,[t0 tf],y0...)sol 结构体输出结果应用举例编辑本段回目录1 求解一阶常微分方程程序:一阶常微分方程odefun=@(t,y) (y+3*t)/t^2; %定义函数tspan=[1 4]; %求解区间y0=-2; %初值[t,y]=ode45(odefun,tspan,y0);plot(t,y) %作图title('t^2y''=y+3t,y(1)=-2,1<t<4')legend('t^2y''=y+3t')xlabel('t')ylabel('y')% 精确解% dsolve('t^2*Dy=y+3*t','y(1)=-2')% ans =一阶求解结果图% (3*Ei(1) - 2*exp(1))/exp(1/t) - (3*Ei(1/t))/exp(1/t)2 求解高阶常微分方程关键是将高阶转为一阶,odefun的书写.F(y,y',y''...y(n-1),t)=0用变量替换,y1=y,y2=y'...注意odefun方程定义为列向量dxdy=[y(1),y(2)....]程序:function Testode45tspan=[3.9 4.0]; %求解区间y0=[2 8]; %初值[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高阶求解结果图相关函数编辑本段回目录ode23, ode45, ode113, ode15s, ode23s, ode23t, ode23tbMatlab中龙格-库塔(Runge-Kutta)方法原理及实现(自己写的,非直接调用)龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。

matlab四阶龙格库塔法解方程组

matlab四阶龙格库塔法解方程组

matlab四阶龙格库塔法解方程组摘要:一、引言二、龙格库塔法介绍1.龙格库塔法的基本原理2.龙格库塔法的发展历程三、MATLAB 实现四阶龙格库塔法1.MATLAB 中龙格库塔法的函数2.四阶龙格库塔法的MATLAB 实现四、龙格库塔法解方程组的应用1.线性方程组的求解2.非线性方程组的求解五、结论正文:一、引言在数学领域,求解方程组是一项基本任务。

龙格库塔法作为高效数值求解线性方程组的方法,被广泛应用于各个领域。

MATLAB 作为一款强大的数学软件,可以方便地实现龙格库塔法求解方程组。

本文将介绍MATLAB 中四阶龙格库塔法解方程组的原理、实现与应用。

二、龙格库塔法介绍1.龙格库塔法的基本原理龙格库塔法(Runge-Kutta method)是一种求解常微分方程初值问题的数值方法。

它通过求解一组线性方程来逼近微分方程的解,具有较高的数值稳定性和精度。

龙格库塔法可以分为四阶、五阶等多种形式,其中四阶龙格库塔法是较为常用的一种。

2.龙格库塔法的发展历程龙格库塔法由德国数学家卡尔·龙格(Carl Runge)和英国数学家詹姆斯·库塔(James Kutta)分别在1900 年和1901 年独立发现。

自那时以来,龙格库塔法在数学、物理、工程等领域得到了广泛应用,并发展出了多种改进和扩展。

三、MATLAB 实现四阶龙格库塔法1.MATLAB 中龙格库塔法的函数在MATLAB 中,可以使用内置函数ode45、ode23、ode113 等实现龙格库塔法求解常微分方程。

这些函数分别对应四阶、五阶和三阶龙格库塔法。

2.四阶龙格库塔法的MATLAB 实现以下是一个使用MATLAB 实现四阶龙格库塔法求解方程组的示例:```matlabfunction [x, status] = solve_system_with_ode45(A, B, x0)% 定义方程组func = @(t, x) A * x + B;% 初始条件x0 = [1; 2];% 时间区间tspan = [0, 10];% 求解[x, status] = ode45(func, tspan, x0);end```四、龙格库塔法解方程组的应用1.线性方程组的求解线性方程组在数学、物理、工程等领域具有广泛应用。

matlab四阶龙格库塔法解方程组

matlab四阶龙格库塔法解方程组

matlab四阶龙格库塔法解方程组【原创实用版】目录1.MATLAB 简介2.四阶龙格 - 库塔法简介3.用 MATLAB 实现四阶龙格 - 库塔法解方程组的步骤4.结论正文1.MATLAB 简介MATLAB 是一种广泛使用的数学软件,它提供了强大的数值计算和数据分析功能。

MATLAB 中有许多现成的函数和工具箱,可以方便地解决各种数学问题。

在工程、科学和金融领域等领域,MATLAB 都有着广泛的应用。

2.四阶龙格 - 库塔法简介四阶龙格 - 库塔法(RK4)是一种常用的数值积分方法,可以用于求解常微分方程组。

该方法具有较高的精度和稳定性,通常比其他低阶方法需要更少的计算步骤。

四阶龙格 - 库塔法的基本思想是将求解过程分为几个步骤,通过对各阶导数进行适当的组合和积分,最终得到方程组的解。

3.用 MATLAB 实现四阶龙格 - 库塔法解方程组的步骤下面是一个简单的示例,展示如何使用 MATLAB 实现四阶龙格 - 库塔法解方程组。

假设我们要求解如下常微分方程组:y" = x^2 + yz" = x + y我们可以按照以下步骤进行:(1) 创建一个 MATLAB 脚本,定义方程组和初始条件。

例如:```matlabfunction dXdt = rk4(t, X, params)% 设置参数h = 0.01; % 时间步长n = 100; % 时间步数X0 = [1; 0; 0]; % 初始条件% 计算 k1, k2, k3, k4k1 = h*(params(1) + params(3));k2 = h*(params(2) + params(4));k3 = h*(params(2) + params(4));k4 = h*(params(1) + params(3));% 循环求解for i = 1:ndXdt = [k1*X(i, 1); k1*X(i, 2); k1*X(i, 3)];X(i+1, :) = X(i, :) + dXdt;dXdt = [k2*X(i+1, 1); k2*X(i+1, 2); k2*X(i+1, 3)]; X(i+1, :) = X(i+1, :) + dXdt;dXdt = [k3*X(i+1, 1); k3*X(i+1, 2); k3*X(i+1, 3)];X(i+1, :) = X(i+1, :) + dXdt;dXdt = [k4*X(i+1, 1); k4*X(i+1, 2); k4*X(i+1, 3)];X(i+1, :) = X(i+1, :) + dXdt;endend```(2) 定义求解函数,并设置时间范围、时间步长等参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

姓名:樊元君学号:2012200902 日期:2012.11.06 一、实验目的
掌握MATLAB语言、C/C++语言编写计算程序的方法、掌握改进欧拉法与四阶龙格-库塔求解一阶常微分方程的初值问题。

掌握使用MATLAB程序求解常微分方程问题的方法。

二、实验内容
1、分别写出改进欧拉法与四阶龙格-库塔求解的算法,编写程序上机调试出结果,要求所编程序适用于任何一阶常微分方程的数值解问题,即能解决这一类问题,而不是某一个问题。

实验中以下列数据验证程序的正确性。

求,步长h=0.25。

2、实验注意事项
的精确解为,通过调整步长,观察结果的精度的变化
三、程序流程图:
●改进欧拉格式流程图:
●四阶龙格库塔流程图:
四、源程序:
●改进后欧拉格式程序源代码:function [] = GJOL(h,x0,y0,X,Y) format long
h=input('h=');
x0=input('x0=');
y0=input('y0=');
disp('输入的范围是:');
X=input('X=');Y=input('Y=');
n=round((Y-X)/h);
i=1;x1=0;yp=0;yc=0;
for i=1:1:n
x1=x0+h;
yp=y0+h*(-x0*(y0)^2);%yp=y0+h*(y0-2*x0/y0);%
yc=y0+h*(-x1*(yp)^2);%yc=y0+h*(yp-2*x1/yp);%
y1=(yp+yc)/2;
x0=x1;y0=y1;
y=2/(1+x0^2);%y=sqrt(1+2*x0);%
fprintf('结果=%.3f,%.8f,%.8f\n',x1,y1,y);
end
end
●四阶龙格库塔程序源代码:
function [] = LGKT(h,x0,y0,X,Y)
format long
h=input('h=');
x0=input('x0=');
y0=input('y0=');
disp('输入的范围是:');
X=input('X=');Y=input('Y=');
n=round((Y-X)/h);
i=1;x1=0;k1=0;k2=0;k3=0;k4=0;
for i=1:1:n
x1=x0+h;
k1=-x0*y0^2;%k1=y0-2*x0/y0;%
k2=(-(x0+h/2)*(y0+h/2*k1)^2);%k2=(y0+h/2*k1)-2*(x0+h/2)/(y0+h/2*k1);% k3=(-(x0+h/2)*(y0+h/2*k2)^2);%k3=(y0+h/2*k2)-2*(x0+h/2)/(y0+h/2*k2);% k4=(-(x1)*(y0+h*k3)^2);%k4=(y0+h*k3)-2*(x1)/(y0+h*k3);%
y1=y0+h/6*(k1+2*k2+2*k3+k4);%y1=y0+h/6*(k1+2*k2+2*k3+k4);%
x0=x1;y0=y1;
y=2/(1+x0^2);%y=sqrt(1+2*x0);%
fprintf('结果=%.3f,%.7f,%.7f\n',x1,y1,y);
end
end
五、运行结果:
改进欧拉格式结果:
四阶龙格库塔结果:
步长分别为:0.25和0.1时,不同结果显示验证了步长减少,对于精度的提高起到很大作用,有效数字位数明显增加。

六、实验小结:
通过这次实验学习,首先第一点对改进欧拉格式和四阶龙格库塔的原理推导有了深入的理解,改进欧拉格式采用(预报+校正)模式得到较精确的原函数数值解;而四阶龙格库塔则采用多预报几个点的斜率值,采用加权平均作为平均斜率的近似值的思想达到更高精度的数值解,二阶龙格库塔的特例就是改进后的欧拉格式。

七、思考题:
如何对四阶龙格-库塔法进行改进,以保证结果的精度。

答:可以通过计算结果的精度处理步长来保证结果的精度。

(1)步长折半。

对于给定精度ε,如果某次计算结果精度(/2)11||h h i i y y ++∆=-,ε∆>,反复将步长减半,直到ε∆<,这时的(/2)1h i y +可作为结果。

(2)步长加倍。

对于给定精度ε,如果某次计算结果精度(/2)11||h h i i y y ++∆=-,ε∆<,反复将步长加倍,直到ε∆>,这时的()1h i y +可作为结果。

相关文档
最新文档