返回首页
当前位置: 主页 > 编程语言 > Matlab教程 >

二阶R-K公式计算

时间:2014-09-26 22:56来源:电脑教程学习网 www.etwiki.cn 编辑:admin

#include<iostream.h>
#include<iomanip.h>
double fun(double x,double y)
{
double r;
r=y-2*x/y;
return r;
}
void A_Euler(double xn,double yn,double h,int N)//改进的Euler公式
{
//p=1,m1=m2=1.0/2;//na m da
double K1,K2;
int i;
cout<<"改进的Euler公式计算得:"<<endl;
for(i=1;i<=N;i++)
{
K1=fun(xn,yn);
K2=fun(xn+h,yn+h*K1);
xn+=h;
yn+=h/2*(K1+K2);
cout<<"x"<<i<<"="<<xn<<setw(10)<<"y"<<i<<"="<<yn<<endl;
}
cout<<endl;
}
void bx_Euler(double xn,double yn,double h,int N)//变形的Euler公式
{
// p=1.0/2,m1=0,m2=0;
double K1,K2;
int i;
cout<<"变形的Euler公式计算得:"<<endl;
for(i=1;i<=N;i++)
{
K1=fun(xn,yn);
K2=fun(xn+h/2,yn+h/2*K1);
xn+=h;
yn+=h*K2;
cout<<"x"<<i<<"="<<xn<<setw(10)<<"y"<<i<<"="<<yn<<endl;
}
cout<<endl;
}
void Heun(double xn,double yn,double h,int N)//Heun(海伦)公式
{
//p=2.0/3,m1=1.0/4,m2=3.0/4;
double K1,K2;
int i;
cout<<"Heun公式计算得:"<<endl;
for(i=1;i<=N;i++)
{
K1=fun(xn,yn);
K2=fun(xn+2.0/3*h,yn+2.0/3*h*K1);
xn+=h;
yn+=h/4*(K1+3*K2);
cout<<"x"<<i<<"="<<xn<<setw(10)<<"y"<<i<<"="<<yn<<endl;
}
cout<<endl;
}
void main()
{
double a=0,b=1;//定义域;
double x0=0;
double y0=1;
double h=0.1;
int N=int((b-a)/h);
cout<<"二阶R-K公式计算:"<<endl;
cout<<"y'=y-2x/y, x<-["<<a<<","<<b<<"],"<<endl;
cout<<"y(0)=1."<<endl<<endl;
A_Euler(x0,y0,h,N);
bx_Euler(x0,y0,h,N);
Heun(x0,y0,h,N);
}
 

------分隔线----------------------------
标签(Tag):Matlab matlab技巧 matlab实例教程 matlab源代码 matlab基础教程
------分隔线----------------------------
推荐内容
猜你感兴趣