急需帮助! 哪位高手能帮忙在VC下编一个用四阶龙格库塔法解二阶微分方程的程序,并在MFC下画出关系曲线。由于急用,而我自己又初学VC,现在对我来说实在是太困难,希望哪位高手能帮一下忙!先谢谢了。我积分不多请见谅! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 四阶龙格库塔法解一阶二元微分方程//dxi/dt=c*(xi-xi^3/3+yi)+K*(X-xi)+c*zi//dyi/dt=(xi-b*yi+a)/c//i=1,2,3//X=sum(xi)/N#include <stdio.h>#include <conio.h>#include <math.h>#include <stdlib.h>#define N 1000 //定义运算步数;#define h 0.01 //定义步长;float a,b,c;//定义全局变量常数a,b,c//定义微分方程:double fx(double x[],double dx,double y[],double dy,double z[],int i,double k,double xavg){int j;double xi,yi;xi=x[i]+dx;yi=y[i]+dy;return c*(xi-pow(xi,3)/3+yi)+k*(xavg-xi)+c*z[i];}double fy(double x[],double dx,double y[],double dy,int i){double xi,yi;xi=x[i]+dx;yi=y[i]+dy;return (xi-b*yi+a)/c;}void main(){double Kx[3][4],Ky[3][4],x[3]={1,2,3},y[3]={2,3,4},xavg,k=0;//定义x,y的初值;double z[3]={0};int i,j,m,n,S;FILE *fp1,*fp;fp=fopen("sjy.txt","w");fp1=fopen("sjykxy.txt","w");fprintf(fp1,"k\tx1\tx2\tx3\ty1\ty2\ty3\n");if(fp==NULL||fp1==NULL){ printf("Failed to open file.\n"); getch(); return;} printf("Input the value of const a,b,c(seperated by ,eg 0.1,0.2,0.3):"); scanf("%f,%f,%f",&a,&b,&c); printf("Input the three values of z(seperated by spacekey,eg 0.1 0.2 0.3):"); for (m=0;m<3;++m) { scanf("%lf",&z[m]); } printf("Input the value of Steps to get different values of xt,yt(S):"); scanf("%d",&S);while(k<=1){ fprintf(fp,"k=%.3f\n",k); fprintf(fp,"t\tx1\tx2\tx3\ty1\ty2\ty3\n");fprintf(fp1,"\n%.3f",k); for(j=1;j<N;++j) { printf("%.3lf",j*h); fprintf(fp,"%.3lf",j*h); xavg=0; for(i=0;i<3;++i) { xavg+=x[i]; } xavg=xavg/3.0; //四阶龙格库塔法: for(i=0;i<3;++i) { Kx[i][0]=fx(x,0,y,0,z,i,k,xavg); Ky[i][0]=fy(x,0,y,0,i); Kx[i][1]=fx(x,h/2*Kx[i][0],y,h/2*Ky[i][0],z,i,k,xavg); Ky[i][1]=fy(x,h/2*Kx[i][0],y,h/2*Ky[i][0],i); Kx[i][2]=fx(x,h/2*Kx[i][1],y,h/2*Ky[i][1],z,i,k,xavg); Ky[i][2]=fy(x,h/2*Kx[i][1],y,h/2*Ky[i][1],i); Kx[i][3]=fx(x,h*Kx[i][2],y,h*Ky[i][2],z,i,k,xavg); Ky[i][3]=fy(x,h*Kx[i][2],y,h*Ky[i][2],i); x[i]=x[i]+(Kx[i][0]+2*Kx[i][1]+2*Kx[i][2]+Kx[i][3])/6*h; y[i]=y[i]+(Ky[i][0]+2*Ky[i][1]+2*Ky[i][2]+Ky[i][3])/6*h; } for(i=0;i<3;++i){ printf("\t%.3lf",x[i]); fprintf(fp,"\t%.3lf",x[i]); } for(i=0;i<3;++i){ printf("\t%.3lf",y[i]); fprintf(fp,"\t%.3lf",y[i]); } printf("\n"); fprintf(fp,"\n"); //取第S步,即时间为S*h的x1,x2,x3,y1,y2,y3随k值的变化; while(j==S) { for(n=0;n<3;++n) { fprintf(fp1,"\t%.3lf",x[n]); } for(n=0;n<3;++n) { fprintf(fp1,"\t%.3lf",y[n]); } break; } continue;}k+=0.1;}fclose(fp1);fclose(fp);printf("\nFinished.\nDatas have been saved to \"sjy.txt,sjykxy.txt\".\n");getch();} 先谢谢你,不过有没有解二阶微分方程的程序啊,并且如何在MFC下显示方程的关系曲线,还请多多指教 再问一个问题,在MFC工程中调用了Vega,调试运行后如何成功脱离Vega的adf文件使用?请高手指点一下。 混CSDN的日子 对内存消耗熟悉的进来,高手速进!!!! 写个发帖机器人的网络提交问题(拿PHPWIND论坛举例) !!!VC++6.0怎么调试程序啊!!! 很急!做过监控的朋友帮帮忙! 水深火热中------ListControler中的Column如何清除->$ vc可以做屏幕监视吗?(我用vb做不出) vc程序如何动态向网页元素中添加属性值? 使用C++能不能写出智程序 跪~~急~vc6.0 调用webservice 讨论一个程序中生成动画的问题 PDA有关GPS问题
//dxi/dt=c*(xi-xi^3/3+yi)+K*(X-xi)+c*zi
//dyi/dt=(xi-b*yi+a)/c
//i=1,2,3
//X=sum(xi)/N#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>#define N 1000 //定义运算步数;
#define h 0.01 //定义步长;float a,b,c;//定义全局变量常数a,b,c//定义微分方程:
double fx(double x[],double dx,double y[],double dy,double z[],int i,double k,double xavg){
int j;
double xi,yi;
xi=x[i]+dx;
yi=y[i]+dy;
return c*(xi-pow(xi,3)/3+yi)+k*(xavg-xi)+c*z[i];
}double fy(double x[],double dx,double y[],double dy,int i){
double xi,yi;
xi=x[i]+dx;
yi=y[i]+dy;
return (xi-b*yi+a)/c;
}void main(){
double Kx[3][4],Ky[3][4],x[3]={1,2,3},y[3]={2,3,4},xavg,k=0;//定义x,y的初值;
double z[3]={0};
int i,j,m,n,S;
FILE *fp1,*fp;
fp=fopen("sjy.txt","w");
fp1=fopen("sjykxy.txt","w");
fprintf(fp1,"k\tx1\tx2\tx3\ty1\ty2\ty3\n");
if(fp==NULL||fp1==NULL){
printf("Failed to open file.\n");
getch();
return;
}
printf("Input the value of const a,b,c(seperated by ,eg 0.1,0.2,0.3):");
scanf("%f,%f,%f",&a,&b,&c);
printf("Input the three values of z(seperated by spacekey,eg 0.1 0.2 0.3):");
for (m=0;m<3;++m)
{
scanf("%lf",&z[m]);
}
printf("Input the value of Steps to get different values of xt,yt(S):");
scanf("%d",&S);
while(k<=1)
{
fprintf(fp,"k=%.3f\n",k);
fprintf(fp,"t\tx1\tx2\tx3\ty1\ty2\ty3\n");
fprintf(fp1,"\n%.3f",k);
for(j=1;j<N;++j)
{
printf("%.3lf",j*h);
fprintf(fp,"%.3lf",j*h);
xavg=0;
for(i=0;i<3;++i)
{
xavg+=x[i];
}
xavg=xavg/3.0;
//四阶龙格库塔法:
for(i=0;i<3;++i)
{
Kx[i][0]=fx(x,0,y,0,z,i,k,xavg);
Ky[i][0]=fy(x,0,y,0,i);
Kx[i][1]=fx(x,h/2*Kx[i][0],y,h/2*Ky[i][0],z,i,k,xavg);
Ky[i][1]=fy(x,h/2*Kx[i][0],y,h/2*Ky[i][0],i);
Kx[i][2]=fx(x,h/2*Kx[i][1],y,h/2*Ky[i][1],z,i,k,xavg);
Ky[i][2]=fy(x,h/2*Kx[i][1],y,h/2*Ky[i][1],i);
Kx[i][3]=fx(x,h*Kx[i][2],y,h*Ky[i][2],z,i,k,xavg);
Ky[i][3]=fy(x,h*Kx[i][2],y,h*Ky[i][2],i);
x[i]=x[i]+(Kx[i][0]+2*Kx[i][1]+2*Kx[i][2]+Kx[i][3])/6*h;
y[i]=y[i]+(Ky[i][0]+2*Ky[i][1]+2*Ky[i][2]+Ky[i][3])/6*h;
}
for(i=0;i<3;++i){
printf("\t%.3lf",x[i]);
fprintf(fp,"\t%.3lf",x[i]);
}
for(i=0;i<3;++i){
printf("\t%.3lf",y[i]);
fprintf(fp,"\t%.3lf",y[i]);
}
printf("\n");
fprintf(fp,"\n");
//取第S步,即时间为S*h的x1,x2,x3,y1,y2,y3随k值的变化;
while(j==S)
{
for(n=0;n<3;++n)
{
fprintf(fp1,"\t%.3lf",x[n]);
}
for(n=0;n<3;++n)
{
fprintf(fp1,"\t%.3lf",y[n]);
}
break;
}
continue;
}k+=0.1;
}
fclose(fp1);
fclose(fp);
printf("\nFinished.\nDatas have been saved to \"sjy.txt,sjykxy.txt\".\n");
getch();
}