2 qq 23935107 qq_23935107 于 2016.02.26 12:02 提问

C++龙格库塔法步长问题

关于用龙哥库塔法求微分方程的问题:
在程序里每次改变步长h,求得结果都会不一样比如取步长为0.2和0.5,计算结果就不一样,不知道是什么原因,请大神帮帮我,谢谢,我把那个微分方程以及代码附上:

微分方程:dy/dx=y*y;0<=x<=1; y(0)=1;
代码:
double f(double x, double y)定义函数f,用来求微分方程
{
return y*y;
}
///////////////////////////
void CQweDlg::OnButton1()
{
// TODO: Add your control notification handler code here
double xx[100][100],yy[100][100],k[100][100];
double h;步长
int i;
char ch1[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
h=atof(ch1);

   long double T;
   T=1/h;循环次数
   xx[1][0]=0;
   yy[1][0]=1;
 for(i=0; i<=T;i++)
  {
    k[1][1]=f(xx[1][i],yy[1][i]);
        k[1][2]=f(xx[1][i]+h/2,yy[1][i]+h*k[1][1]/2);
        k[1][3]=f(xx[1][i]+h/2,yy[1][i]+h*k[1][2]/2);
        k[1][4]=f(xx[1][i]+h,yy[1][i]+h*k[1][3]);
        yy[1][i+1]=yy[1][i]+h*(k[1][1]+2*k[1][2]+2*k[1][3]+k[1][4])/6;
        xx[1][i+1]=xx[1][i]+h;
        CString str1,str2;
        str1.Format("%.20f",yy[1][1000]); 
        str2.Format("%.2f",h);
        GetDlgItem(IDC_EDIT2)->SetWindowText(str1);
}

}

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.07 05:48
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
变步长的四阶龙格库塔法
用变步长四阶龙格库塔法<br>主程序以及计算微分方程组中各右端函数值的程序
变步长龙格库塔法
变步长龙格库塔法解一阶微分方程
四阶龙格库塔法
四阶龙格库塔法公式   对微分方程dy/dx=f(x, y) 有初值条件y(x(i))=φ(x(i))   龙格库塔法公式: y(i+1)=y(i)+h*( K1+ 2*K2 +2*K3+ K4)/6 K1=f(x(i),y(i)) K2=f(x(i)+h/2,y(i)+h*K1/2) K3=f(x(i)+h/2,y(i)+h*K2/2) K4=f(x(i)+h,y(i)+h*
龙格库塔算法c++
四节龙格库塔、改进欧拉
龙格库塔C 语言编程实现
最新一直在学一门很苦逼的课程《数值分析》,哎,高等数学没学好现在后悔了呀,哎回来再恶补,现在说正事。 龙格库塔很牛掰的名字,是两个国外数学家的名字的合并,应该又是两个大牛。 这个方法主要是用来解决微分方程的解,大体思路就是用差分代替微分。细节我就不说了,大家可以去百度,我这里直接给出龙格库塔家族的通式: 这个是龙格库塔家族的通式,如果我们取累加和中的r为4则可以得到如下公式:
龙格-库塔(Runge-Kutta)方法数学原理及实现
龙格-库塔(Runge-Kutta)方法龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。对于一阶精度的欧拉公式有: yi+1=yi+hkiy_{i+1} = y_i + hk_i 其中hh为步长,则yi+1y_{i+1}的表达式与y(xi+1)y(x_{i+1})
四阶龙格-库塔法求解常微分方程的初值问题
算法原理和程序框图 龙格—库塔法是一种求其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解。经典的四阶龙格库塔法方程如下: y'=f(t,y),y(t0)=y0输出按如下求解yn+1=yn+h(k1+2k2+3k3+4k4)/6其中                       k1=f(tn,yn) k2=f(tn+h/2,yn+hk1/2) k3=f(tn+h/
四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序
参考教材《数值分析》李乃成.梅立泉 clear clc format long m=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');     %输入
Ode45以及龙格-库塔算法
Ode45及龙格-库塔算法ODE45ODE45函数描述: 求解非刚性微分方程 - 中阶方    ODE是Matlab专门用于解微分方程的功能函数。该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。不同类型有着不同的求解器,其中ode45求解器属于变步长的一种,采用Runge-Kutta算法;其他采用相同算法的变步长求解器还有ode23。    ode45表示采...
[vb] 定步长-四阶龙格-库塔法
VB求解一阶微分方程的常用数值解法定步长四阶龙格-库塔(Runge-Kutta)法