matlab编的4阶龙格库塔法解微分方程的程序

合集下载

四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序

四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序

参考教材《数值分析》李乃成.梅立泉clearclcformat longm=input('请输入常微分方程的阶数m=');a=input('请输入x下限a=');b=input('请输入x上限b=');h=input('请输入步长h=');ym=input('令y(1,1)=y,y(2,1)=y’,y(3,1)=y’’...请输入ym=','s'); %输入的时候必须按照这个形式输入y1=y(1,1);if m==1 %一阶初值问题单独求解mm=(b-a)/h;y(1,1)=input('请输入在初值点的函数值f(a)=');x=a;y11(1)=y(1,1);for k1=2:(mm+1)y1=y(1,1);K(1,1)=h*(eval(ym)); %计算K1x=x+h/2;y(1,1)=y1+K(1,1)/2;y1=y(1,1);K(1,2)=h*(eval(ym)); %计算K2x=x;y(1,1)=y1+K(1,2)/2-K(1,1)/2;y1=y(1,1);K(1,3)=h*(eval(ym)); %计算K3x=x+h/2;y(1,1)=y1+K(1,3)-K(1,2)/2;y1=y(1,1);K(1,4)=h*(eval(ym)); %计算K4y11(k1)=y11(k1-1)+(K(1,1)+2*K(1,2)+2*K(1,3)+K(1,4))/6; y(1,1)=y11(k1);x=a+(k1-1)*h;endy11else %高阶初值问题mm=(b-a)/h; %一共要求解mm个数据点for k2=1:m %读取初值条件fprintf('请输入%d阶导数的初值f(%d)(a)=\n',(k2-1),(k2-1));y(k2,1)=input('=');endfor k2=1:my22(1,k2)=y(k2,1); %先把初值保存在矩阵y22(m,n)中,m表示第几个所求点,n表示第n阶初值endx=a;for k4=2:(mm+1) %求解mm个数据点的循环for k=1:(m-1) %计算K1,包括每一阶的K1 K(k,1)=h*y(k+1,1); %y(k+1,1)中k+1表示第k+1阶,1表示第一个点;K(k,1)中k表示阶数,1表示K1endK(m,1)=h*(eval(ym));x=x+h/2; %求解K1之前,先重新对x和y赋值for k3=1:my(k3,1)=y(k3,1)+K(k3,1)/2;endfor k=1:(m-1) %计算K2K(k,2)=h*y(k+1,1);endK(m,2)=h*(eval(ym));x=x;for k3=1:my(k3,1)=y(k3,1)-K(k3,1)/2+K(k3,2)/2;endfor k=1:(m-1) %计算K3K(k,3)=h*y(k+1,1);endK(m,3)=h*(eval(ym));x=x+h/2;for k3=1:my(k3,1)=y(k3,1)+K(k3,3)-K(k3,2)/2; %这里容易出错endfor k=1:(m-1) %计算K4K(k,4)=h*y(k+1,1);endK(m,4)=h*(eval(ym));for k5=1:my22(k4,k5)=y22(k4-1,k5)+(K(k5,1)+2*K(k5,2)+2*K(k5,3)+K(k5,4))/6; %这里,除了要求出下一个点的数值,还要求出相应的导数值endfor k6=1:m %除了对y(1,1)重新赋值外,还要对y(2,1)等重新赋值y(k6,1)=y22(k4,k6);endx=a+(k4-1)*h;endy22(:,1) end。

四阶龙格-库塔(R-K)方法求常微分方程

四阶龙格-库塔(R-K)方法求常微分方程

中南大学MATLAB程序设计实践材料科学与工程学院2013年3月26日一、编程实现“四阶龙格-库塔(R-K)方法求常微分方程”,并举一例应用之。

【实例】采用龙格-库塔法求微分方程:⎩⎨⎧==+-=0, 0)(1'00x x y y y 1、算法说明:在龙格-库塔法中,四阶龙格-库塔法的局部截断误差约为o(h5),被广泛应用于解微分方程的初值问题。

其算法公式为:)22(63211k k k hy y n n +++=+其中:⎪⎪⎪⎩⎪⎪⎪⎨⎧++=++=++==) ,()21,21()21 ,21(),(3423121hk y h x f k hk y h x f k hk y h x f k y x f k n n n n n n n n 2、流程图:2.1、四阶龙格-库塔(R-K )方法流程图:2.2、实例求解流程图:3、源程序代码3.1、四阶龙格-库塔(R-K)方法源程序:function [x,y] = MyRunge_Kutta(fun,x0,xt,y0,PointNum,varargin)%Runge-Kutta 方法解微分方程形为 y'(t)=f(x,y(x))%此程序可解高阶的微分方程。

只要将其形式写为上述微分方程的向量形式%函数 f(x,y): fun%自变量的初值和终值:x0, xt%y0表示函数在x0处的值,输入初值为列向量形式%自变量在[x0,xt]上取的点数:PointNum%varargin为可输入项,可传适当参数给函数f(x,y)%x:所取的点的x值%y:对应点上的函数值if nargin<4 | PointNum<=0PointNum=100;endif nargin<3y0=0;endy(1,:)=y0(:)'; %初值存为行向量形式h=(xt-x0)/(PointNum-1); %计算步长x=x0+[0:(PointNum-1)]'*h; %得x向量值for k=1:(PointNum) %迭代计算f1=h*feval(fun,x(k),y(k,:),varargin{:});f1=f1(:)'; %得公式k1 f2=h*feval(fun,x(k)+h/2,y(k,:)+f1/2,varargin{:});f2=f2(:)'; %得公式k2 f3=h*feval(fun,x(k)+h/2,y(k,:)+f2/2,varargin{:});f3=f3(:)'; %得公式k3 f4=h*feval(fun,x(k)+h,y(k,:)+f3,varargin{:});f4=f4(:)'; %得公式k4 y(k+1,:)=y(k,:)+(f1+2*(f2+f3)+f4)/6; %得y(n+1) end3.2、实例求解源程序:%运行四阶R-K法clear, clc %清除内存中的变量x0=0;xt=2;Num=100;h=(xt-x0)/(Num-1);x=x0+[0:Num]*h;a=1;yt=1-exp(-a*x); %真值解fun=inline('-y+1','x','y'); %用inline构造函数f(x,y)y0=0; %设定函数初值PointNum=5; %设定取点数[x1,y1]=ode23(fun,[0,2],0);[xr,yr]=MyRunge_Kutta(fun,x0,xt,y0,PointNum);MyRunge_Kutta_x=xr'MyRunge_Kutta_y=yr'plot(x,yt,'k',x1,y1,'b--',xr,yr,'r-')legend('真值','ode23','Rung-Kutta法解',2)hold onplot(x1,y1,'bo',xr,yr,'r*')4、程序运行结果:MyRunge_Kutta_x =0 0.5000 1.0000 1.5000 2.0000MyRunge_Kutta_y =0 0.3932 0.6318 0.7766 0.8645二、变成解决以下科学计算问题:(一)[例7-2-4] 材料力学复杂应力状态的分析——Moore 圆。

matlab经典的4级4阶runge kutta法 -回复

matlab经典的4级4阶runge kutta法 -回复

matlab经典的4级4阶runge kutta法-回复使用MATLAB 实现经典的4 阶4 级Runge-Kutta 法引言:数值计算是现代科学和工程中的一个重要领域,它涉及到通过计算机模拟来解决数学问题。

在数值计算中,求解微分方程是一个常见的任务。

Runge-Kutta 法是求解微分方程的一种常见方法,它可以用于数值求解常微分方程和偏微分方程。

本文将介绍经典的4 级4 阶Runge-Kutta 法的原理,并使用MATLAB 来实现该方法。

一、原理介绍:Runge-Kutta 法是数值计算领域中最常用的方法之一。

它通过将微分方程的解逐步逼近来求解微分方程。

经典的4 级4 阶Runge-Kutta 法基于以下公式:\begin{align*}k_1 &= h f(t_n, y_n) \\k_2 &= h f(t_n + \frac{h}{2}, y_n + \frac{k_1}{2}) \\k_3 &= h f(t_n + \frac{h}{2}, y_n + \frac{k_2}{2}) \\k_4 &= h f(t_n + h, y_n + k_3) \\y_{n+1} &= y_n + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4)\end{align*}其中,h 是步长,t_n 是当前时间点,y_n 是当前的解,f(t, y) 是微分方程的右手函数。

二、算法实现:现在我们将使用MATLAB 实现经典的4 级4 阶Runge-Kutta 法,并解决一个简单的一阶常微分方程。

首先,我们定义一个MATLAB 函数,用于实现4 级4 阶Runge-Kutta 法。

函数接受输入参数为微分方程的右手函数f(t, y),初始时间t_0,初始解y_0,以及步长h。

函数输出为一个数组,包含了每个时间点的解。

以下是MATLAB 代码实现:matlabfunction y = runge_kutta(f, t0, y0, h, num_steps)初始化解数组y = zeros(num_steps+1, 1);y(1) = y0;循环计算每个时间点的解for i = 1:num_stepst = t0 + (i-1)*h;计算k1, k2, k3, 和k4k1 = h * f(t, y(i));k2 = h * f(t + h/2, y(i) + k1/2);k3 = h * f(t + h/2, y(i) + k2/2);k4 = h * f(t + h, y(i) + k3);计算下一个时间点的解y(i+1) = y(i) + (k1 + 2*k2 + 2*k3 + k4)/6;endend接下来,我们使用这个函数来解决一个简单的一阶常微分方程。

微分方程的数值解法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经典的4级4阶runge kutta法

matlab经典的4级4阶runge kutta法

MATLAB是一种用于算法开发、数据分析、可视化和数值计算的高级技术计算语言和交互式环境。

作为一个强大的工具,MATLAB提供了许多数值计算方法,其中4级4阶Runge-Kutta方法就是其中之一。

1. Runge-Kutta方法简介Runge-Kutta方法是求解常微分方程(ODE)的数值方法之一。

在MATLAB中,用户可以使用内置的ode45函数来调用4级4阶Runge-Kutta方法。

具体来说,4级4阶Runge-Kutta方法是一种单步迭代方法,通过在每个步骤中计算斜率来逐步逼近解析解。

它的优点是数值稳定性好,适用于多种类型的微分方程。

2. Runge-Kutta方法的公式4级4阶Runge-Kutta方法的一般形式如下:$$k_1 = hf(t_n, y_n)$$$$k_2 = hf(t_n + \frac{1}{2}h, y_n + \frac{1}{2}k_1)$$$$k_3 = hf(t_n + \frac{1}{2}h, y_n + \frac{1}{2}k_2)$$$$k_4 = hf(t_n + h, y_n + k_3)$$$$y_{n+1} = y_n + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4)$$其中,$t_n$是当前的独立变量值,$y_n$是当前的解向量,h是步长,$f(t_n, y_n)$是给定点$(t_n, y_n)$处的斜率。

通过不断迭代上述公式,可以逐步求解微分方程的数值解。

3. MATLAB中的4级4阶Runge-Kutta方法的应用在MATLAB中,用户可以使用ode45函数调用4级4阶Runge-Kutta方法来求解常微分方程。

使用ode45函数的基本语法如下:```matlab[t, y] = ode45(odefun, tspan, y0)```其中,odefun是用户定义的ODE函数句柄,tspan指定了求解的时间范围,y0是初始条件。

4阶经典龙格库塔公式求解微分方程

4阶经典龙格库塔公式求解微分方程

4阶经典龙格库塔公式求解微分方程4阶龙格库塔法(也称为四阶Runge-Kutta方法)是一种常用于求解常微分方程的数值方法。

它是由德国数学家卡尔·龙格以及他的学生马丁·威尔海姆·库塔于1901年独立提出的。

以下是详细的介绍。

1.问题描述我们考虑一个典型的常微分方程初值问题:dy/dx = f(x, y),y(x0) = y0其中,x0是给定的初始点,y(x)是我们要求解的函数,f(x,y)是已知的函数。

2.方法原理四阶龙格库塔方法的基本思想是通过使用全区间的函数信息来估计下一步的函数值。

在每个步骤中,我们计算四个不同的估计量,然后将它们组合起来以获取最终的解。

具体来说,我们首先计算在初始点x0上的斜率k1=f(x0,y0)。

然后我们计算在x0+h/2处的斜率k2=f(x0+h/2,y0+h/2*k1),其中h是步长。

以此类推,我们计算k3和k4分别在x0+h/2和x0+h处的斜率。

然后,我们通过加权组合这些斜率来计算下一个点的函数值y1:y1=y0+(h/6)*(k1+2*k2+2*k3+k4)。

3.算法步骤以下是使用四阶龙格库塔法求解常微分方程的详细步骤:步骤1:给定初始条件 y(x0) = y0,选择步长 h 和积分终点 x_end。

步骤2:计算积分步数n:n = (x_end - x0)/h。

步骤3:设置变量x=x0和y=y0,并将步长设置为h。

步骤4:对每个步数i=1,2,...,n,执行以下计算:4.1:计算斜率k1=f(x,y)。

4.2:计算斜率k2=f(x+h/2,y+h/2*k1)。

4.3:计算斜率k3=f(x+h/2,y+h/2*k2)。

4.4:计算斜率k4=f(x+h,y+h*k3)。

4.5:计算下一个点的函数值y1=y+(h/6)*(k1+2*k2+2*k3+k4)。

4.6:将x更新为x+h,y更新为y1步骤5:重复步骤4,直到达到积分终点 x_end。

4阶经典Runger-kutta格式解常微分方程

4阶经典Runger-kutta格式解常微分方程

4阶经典Runger-kutta格式解常微分方程用Matlab软件:4阶经典Runger-kutta格式解常微分方程,y,f(x,y)考虑一阶常微分方程初值问题由Lagrange微分中值定理知道,存在y(x),y00,,(x,x)使得: nn,1yxyx,()(),n,1n,,y, ,,,()y(x),y(x),h*y(,),y(x),h*Kn1nn,h*,K,y(,),f(,,y(,))[x,x]其中称为在上的平均斜率 y(x)nn,1*[x,x]现在问题转化为如何对进行数值计算,可取在若干个点的斜率,或预Ky(x)nn,1rr,aKa,1报斜率值K,K,,,K的加权平均 ()作为的近似值。

设计K,,iii12ri,1,1i[x,x]K,K,,,K上若干个点斜率值或预报斜率值及加权系数使得差分格式 nn,112rry(x),y(x),h*aK达到r阶,称为r阶Runge-kutta格式。

,,1nnii,1i 由此导出四阶经典Runge-kutta格式:y,y,h/6*(K,2K,2K,K)n,1n1234K,f(x,y)1nnK,f(x,y,h/2*K) 2n,1/2n1K,f(x,y,h/2*K)3n,1/2n2K,f(x,y,h/2*K)4n,1/2n3程序:(1)调用函数程序:function [x,y]=nark4(dyfun,xspan,y0,h) %用途:四阶经典Runge-Kutta格式解常微分方程y'=f(x,y),y(x0)=y0; %格式:[x,y]=nark4(dyfun,xspan,y0,h) %dyfun为函数f(x,y),xspan为求解区间[x0,xN],y0为初始值y(x0),h为步长,x 返回节点,y返回函数值解x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1k1=feval(dyfun,x(n),y(n));k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2);k4=feval(dyfun,x(n+1),y(n)+h*k3);y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6;endx=x';y=y';编写程序:>> dyfun=inline('y-2*x/y');>> [x,y]=nark4(dyfun,[0,1],1,0.1);plot(x,y,'-r') >> hold on>> grid on>> [x,y]=nark4(dyfun,[0,1],1,0.05); >> plot(x,y,'-g')>> hold on>> [x,y]=nark4(dyfun,[0,1],1,0.2);plot(x,y,'-b')。

微分方程组的龙格库塔公式求解matlab版

微分方程组的龙格库塔公式求解matlab版

微分方程组的龙格-库塔公式求解matlab 版南京大学王寻1.一阶常微分方程组考虑方程组()()()()⎩⎨⎧====0000z x z ,z ,y ,x g 'z y x y ,z ,y ,x f 'y 其经典四阶龙格-库塔格式如下:对于n =0,1,2,...,计算()()⎪⎩⎪⎨⎧++++=++++=++4321143211226226L L L L h z z K K K K h y y n n n n 其中()()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧+++=+++=⎪⎭⎫ ⎝⎛+++=⎪⎭⎫ ⎝⎛+++=⎪⎭⎫ ⎝⎛+++=⎪⎭⎫ ⎝⎛+++===33433422322311211211222222222222hL z ,hK y ,h x g L ,hL z ,hK y ,h x f K hL z ,hK y ,h x g L ,hL z ,hK y ,h x f K hL z ,hK y ,h x g L ,hL z ,hK y ,h x f K z ,y ,x g L ,z ,y ,x f K n n n n n n n n n n n n n n n n n n n n n n n n 下面给出经典四阶龙格-库塔格式解常微分方程组的matlab 通用程序:%marunge4s.m%用途:4阶经典龙格库塔格式解常微分方程组y'=f(x,y),y(x0)=y0%格式:[x,y]=marunge4s(dyfun,xspan,y0,h)%dyfun 为向量函数f(x,y),xspan 为求解区间[x0,xn],%y0为初值向量,h 为步长,x 返回节点,y 返回数值解向量function [x,y]=marunge4s(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y=zeros(length(y0),length(x));y(:,1)=y0(:);for n=1:(length(x)-1)k1=feval(dyfun,x(n),y(:,n));k2=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k2);k4=feval(dyfun,x(n+1),y(:,n)+h*k3);y(:,n+1)=y(:,n)+(h/6).*(k1+2*k2+3*k3+k4);end如下为例题:例1:取h =0.02,利用程序marunge4s.m 求刚性微分方程组()()⎩⎨⎧=-==--=10100209999010z ,z 'z ,y ,z .y .'y 的数值解,其解析解为:xx x .e z ,e e y 100100010---=+=解:首先编写M 函数dyfun.m%dyfun.m function f=dyfun(t,y)f(1)=-0.01*y(1)-99.99*y(2);f(2)=-100*y(2);f=f(:);然后编写一个执行函数:close all ;clear all ;clc;[x,y]=marunge4s(@dyfun,[0500],[21],0.002);plot(x,y);axis([-50500-0.52]);text(120,0.4,'y(x)');text(70,0.1,'z(x)');title('数值解');figure;y1=exp(-0.01*x)+exp(-100*x);%解析解,用来做对比的。

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

matlab编的4阶龙格库塔法解微分方程的程序
2010-03-10 20:16
function varargout=saxplaxliu(varargin)
clc,clear
x0=0;xn=1.2;y0=1;h=0.1;
[y,x]=lgkt4j(x0,xn,y0,h);
n=length(x);
fprintf(' i x(i) y(i)\n');
for i=1:n
fprintf('%2d %4.4f %4.4f\n',i,x(i),y(i)); end
function z=f(x,y)
z=-2*x*y^2;
function [y,x]=lgkt4j(x0,xn,y0,h)
x=x0:h:xn;
n=length(x);
y1=x;
y1(1)=y0;
for i=1:n-1
K1=f(x(i),y1(i));
K2=f(x(i)+h/2,y1(i)+h/2*K1);
K3=f(x(i)+h/2,y1(i)+h/2*K2);
K4=f(x(i)+h,y1(i)+h*K3);
y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4);
end
y=y1;
结果:
i x(i) y(i)
1 0.0000 1.0000
2 0.1000 0.9901
3 0.2000 0.9615
4 0.3000 0.9174
5 0.4000 0.8621
6 0.5000 0.8000
7 0.6000 0.7353
8 0.7000 0.6711
9 0.8000 0.6098
10 0.9000 0.5525
11 1.0000 0.5000
12 1.1000 0.4525
13 1.2000 0.4098
龙格库塔法
一、基本原理:
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。

由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。

该算法是构建在数学支持的基础之上的。

对于一阶精度的欧拉公式有:
yi+1=yi+h*K1
K1=f(xi,yi)
当用点xi处的斜率近似值K1与右端点xi+1处的斜率K2的算术平均值作为平均斜率K*的近似值,那么就会得到二阶精度的改进欧拉公式:
yi+1=yi+h*( K1+ K2)/2
K1=f(xi,yi)
K2=f(xi+h,yi+h*K1)
依次类推,如果在区间[xi,xi+1]内多预估几个点上的斜率值K1、K2、……Km,并用他们的加权平均数作为平均斜率K*的近似值,显然能构造出具有很高精度的高阶计算公式。

经数学推导、求解,可以得出四阶龙格-库塔公式,也就是在工程中应用广泛的经典龙格-库塔算法:
yi+1=yi+h*( K1+ 2*K2 +2*K3+ K4)/6
K1=f(xi,yi)
K2=f(xi+h/2,yi+h*K1/2)
K3=f(xi+h/2,yi+h*K2/2)
K4=f(xi+h,yi+h*K3)
通常所说的龙格-库塔法是指四阶而言的,我们可以仿二阶、三阶的情形推导出常用的标准四阶龙格-库塔法公式
(1)
计算公式(1)的局部截断误差是。

龙格-库塔法具有精度高,收敛,稳定(在一定条件下),计算过程中可以改变步长,不需要计算高阶导数等优点,但仍需计算在一些点上的值,如四阶龙格-库塔法每计算一步需要计算四次的值,这给实际计算带来一定的复杂性,因此,多用来计算“表头”。

二、小程序
#include<stdio.h>
#include<math.h>
#define f(x,y) (-1*(x)*(y)*(y))
void main(void)
{
double a,b,x0,y0,k1,k2,k3,k4,h;
int n,i;
printf("input a,b,x0,y0,n:");
scanf("%lf%lf%lf%lf%d",&a,&b,&x0,&y0,&n);
printf("x0\ty0\tk1\tk2\tk3\tk4\n");
for(h=(b-a)/n,i=0;i!=n;i++)
{
k1=f(x0,y0);
k2=f(x0+h/2,y0+k1*h/2);
k3=f(x0+h/2,y0+k2*h/2);
k4=f(x0+h,y0+h*k3);
printf("%lf\t%lf\t",x0,y0);
printf("%lf\t%lf\t",k1,k2);
printf("%lf\t%lf\n",k3,k4);
y0+=h*(k1+2*k2+2*k3+k4)/6;
x0+=h;
}
printf("xn=%lf\tyn=%lf\n",x0,y0);
}
运行结果:
input a,b,x0,y0,n:0 5 0 2 20
x0 y0 k1 k2 k3 k4
0.000000 2.000000 -0.000000 -0.500000 -0.469238 -0.886131
0.250000 1.882308 -0.885771 -1.176945 -1.129082 -1.280060
0.500000 1.599896 -1.279834 -1.295851 -1.292250 -1.222728
0.750000 1.279948 -1.228700 -1.110102 -1.139515 -0.990162
1.000000 1.000027 -1.000054 -0.861368 -0.895837 -0.752852
1.250000 0.780556 -0.761584 -0.645858 -0.673410 -0.562189
1.500000 0.615459 -0.568185 -0.481668 -0.500993 -0.420537
1.750000 0.492374 -0.424257 -0.361915 -0.374868 -0.317855
2.000000 0.400054 -0.320087 -0.275466 -0.284067 -0.243598
2.250000 0.329940 -0.244935 -0.212786 -0.218538 -0.189482
2.500000 0.275895 -0.190295 -0.166841 -0.170744 -0.149563
2.750000 0.233602 -0.150068 -0.132704 -0.135399 -0.119703
3.000000 0.200020 -0.120024 -0.106973 -0.108868 -0.097048
3.250000 0.172989 -0.097256 -0.087300 -0.088657 -0.079618
3.500000 0.150956 -0.079757 -0.072054 -0.073042 -0.066030
3.750000 0.132790 -0.066124 -0.060087 -0.060818 -0.055305
4.000000 0.117655 -0.055371 -0.050580 -0.051129 -0.046743
4.250000 0.104924 -0.046789 -0.042945 -0.043363 -0.039833
4.500000 0.094123 -0.039866 -0.036750 -0.037072 -0.034202
4.750000 0.084885 -0.034226 -0.031675 -0.031926 -0.029571
xn=5.000000 yn=0.076927。

相关文档
最新文档