⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rkf.cpp

📁 ronge-kutta 数值分析问题
💻 CPP
字号:
/*input a,b,t,x,delta,M
while k<M do
    compute F1,F2,F3,F4,F5,F6
    compute x,y
    compute err
     t=t+h
    output k,t,x,y,err
    h=0.9h[delta/|e|]1/(1+p)
end do
*/

#include <math.h>
#include <stdio.h>
#include <iostream.h>

double sol(double t){
	return(t/(0.5+log(t)));
}


double f( double t, double x){
	double m;
	m=(t*x-pow(x,2))/pow(t,2);
	return(m);
}

double f1( double t, double x ,double h){
	double m;
	m=h*(f(t,x));
	return(m);
}

double f2(double t, double x ,double h){
	double m;
	m=h* f( t+0.25*h, x+0.25*f1(t,x,h) ) ;
	return(m);
}

double f3(double t, double x  ,double h){
	double m;
	m=h* f( t+0.375*h, x+0.09375*f1(t,x,h)+0.28125*f2(t,x,h) ) ;
	return(m);
}

double f4(double t, double x  ,double h){
	double m;
	m=h* f( t+0.923077*h, x+0.879381*f1(t, x, h)-3.2772*f2(t, x, h) +3.32089*f3(t, x, h) );
	return(m);
}

double f5(double t, double x  ,double h){
	double m;
	m=h* f( t+h, x+2.03241*f1(t, x, h)-8.0*f2(t, x, h) +7.17349*f3(t, x, h) -0.205897*f4(t, x, h)) ;
	return(m);
}

double f6(double t, double x  ,double h){
	double m;
	m=h* f( t+0.5*h, x-0.296296*f1(t, x, h)+2.0 *f2(t, x, h) -1.38168*f3(t, x, h)+0.452973*f4(t, x, h)) -0.275*f5(t, x, h);
	return(m);
}


void main(){
    
	double a,b,x,t,h,delta,y,err;
	int M,k;

L:	cout<<"a=";
	cin>>a;
    cout<<"b=";
	cin>>b;
	cout<<"x=";
	cin>>x;

	if((x>b)||(x<a)) {cout<<"a<x<b!"<<endl; goto L;}

	cout<<"t=";
	cin>>t;
	cout<<"M=";
	cin>>M;

	cout<<"h=";
	cin>>h;
	cout<<"delta=";
	cin>>delta;

    printf("k=  0, t=%f, x=%f\n",t,x);
    
	y=x;
    
	
	for(k=1;k<=M;k++){
		err=0.00277778*f1(t,x,h)-0.0299415*f3(t,x,h)-0.0291999*f4(t,x,h)+0.02*f5(t,x,h)+0.0363636*f6(t,x,h);

		x=x+0.115741*f1(t,x,h)+0.548928*f3(t,x,h)+0.535331*f4(t,x,h)-0.2*f5(t,x,h);
	
        y=y+0.118519*f1(t,y,h)+0.518986*f3(t,y,h)+0.506131*f4(t,y,h)-0.18*f5(t,y,h)+0.0363636*f6(t,y,h);
		
		t=t+h;

		//output
		if((fabs(err)<delta)) break;

		printf("k=%3d, t=%f, x=%f, y=%f, sol=%f, err=%e\n", k,t,x,y,sol(t),err);

		h=0.9*h*pow((delta/fabs(err)),0.2);        

	}//for
    
 
}//main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -