📄 1.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
double fx(double x,double y)//已知一阶方程
{
return (y-2*x/y);
}
void main()
{
double h,*y,*x,*f,K[4],yp,fp;
int n,i;
printf("输入步长h 步数n:");
scanf("%lf%d",&h,&n);
x=(double *)malloc((n+1)*sizeof(double));
y=(double *)malloc((n+1)*sizeof(double));
f=(double *)malloc((n+1)*sizeof(double));
printf("输入初值x y:");
scanf("%lf%lf",x,y);
for(i=0;i<n;i++)
x[i+1]=x[i]+h;
for(i=0;i<3;i++)
{
K[0]=fx(x[i],y[i]);
K[1]=fx(x[i]+h/2.0,y[i]+h*K[0]/2.0);
K[2]=fx(x[i]+h/2.0,y[i]+h*K[1]/2.0);
K[3]=fx(x[i]+h,y[i]+h*K[2]);
y[i+1]=y[i]+h*(K[0]+2*K[1]+2*K[2]+K[3])/6.0;
}//用龙格-库塔计算启动值
for(i=0;i<4;i++)
f[i]=fx(x[i],y[i]);
i=0;
while(i+4<=n)
{
yp=y[i+3]+h*(55*f[i+3]-59*f[i+2]+37*f[i+1]-9*f[i])/24;
fp=fx(x[i+4],yp);
y[i+4]=y[i+3]+h*(9*fp+19*f[i+3]-5*f[i+2]+f[i+1])/24;
f[i+4]=fx(x[i+4],y[i+4]);
i++;
}//预测校正方法
printf("x y\n");
for(i=0;i<=n;i++)
printf("%0.2lf\t%lf\n",x[i],y[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -