经典格式式求解一阶微分的初值问题

来源:互联网 发布:电路模拟软件下载 编辑:程序博客网 时间:2024/05/17 09:12

#include <iostream>
using namespace std;
void main()
{
float x0,y0,h,**result;
int N;
float f(float x,float y);
void runge_kutta(float (*f)(float,float),float,float,int,float,float **result);
cout<<"输入初始点:";
cin>>x0>>y0;
cout<<"输入解的个数和步长:";
cin>>N>>h;
result=new float *[N];
for(int i=0;i<N;i++)
  result=new float[2];
runge_kutta(f,x0,y0,N,h,result);
cout<<"运算结果是:"<<endl;
for(i=0;i<N;i++)
  cout<<result[0]<<"     "<<result[1]<<endl;
}
void runge_kutta(float (*f)(float,float),float x0,float y0,int N,float h,float **result)
{
float k1,k2,k3,k4;
result[0][0]=x0;result[0][1]=y0;
for(int n=1;n<N;x0+=h,y0=result[n++][1])
{
  result[n][0]=x0+h;
  k1=f(x0,y0);
  k2=f(x0+h/2,y0+h*k1/2);
  k3=f(x0+h/2,y0+h*k2/2);
  k4=f(x0+h,y0+h*k3);
  result[n][1]=y0+h*(k1+2*k2+2*k3+k4)/6;
}
}
float f(float x,float y)   [url=file://当/]file://当[/url]初始值满足y=x*x时,微分方程解为y=x*x;
{
return 2*x+y-x*x;
}