求助:在for循环到第三个的时候数据输出异常

爪蛙爱踢程序猿 2015-05-27 03:21:25

//龙格-库塔法
#include<stdio.h>
#include<math.h>

#define PI 3.1415
#define h 0.1
#define l -5
#define m 8
#define o -3

//指代f(t,u,v)函数
double funcf(double t,double u,double v){
return v;
}
//指代g(t,u,v)函数
double funcg(double t,double u,double v){
return -(l*u+m*u*u*u+o*u*u*u*u*u);
}

void Runge(){
int n=0;
double k1,k2,k3,k4,l1,l2,l3,l4;
double u[11],v[11],t[10],y[10];
u[0]=sqrt(1+1/sin(1)),v[0]=(-cos(1)/sin(1))*sqrt(1+1/sin(1));
printf("%10s %10s %10s %10s\n","t的值","近似解","精确解","误差");

for(n=0;n<3;n++){
//定义步长
t[n]=h*n;

//精确解
//y[n]=sin(PI*t[n]);
y[n]=sqrt(1+1/sin(2*t[n]+1));
/* printf("%10f\n",y[n]);

printf("%10f %10f %10f %10f\n",t[n],u[n],y[n],fabs(u[n]-y[n]));*/

k1=funcf(t[n],u[n],v[n]);
l1=funcg(t[n],u[n],v[n]);
k2=funcf(t[n]+h/2,u[n]+h*k1/2,v[n]+h*k1/2);
l2=funcg(t[n]+h/2,u[n]+h*l1/2,v[n]+h*l1/2);
k3=funcf(t[n]+h/2,u[n]+h*k2/2,v[n]+h*k2/2);
l3=funcg(t[n]+h/2,u[n]+h*l2/2,v[n]+h*l2/2);
k4=funcf(t[n]+h,u[n]+h*k3,v[n]+h*k3);
l4=funcg(t[n]+h,u[n]+h*l3,v[n]+h*l3);
printf("%10f %10f %10f %10f\n",l1,l2,l3,l4);

u[n+1]=u[n]+(h/6)*(k1+2*k2+2*k3+k4);
v[n+1]=v[n]+(h/6)*(l1+2*l2+2*l3+l4);


}
}

void main(){
Runge();
}

...全文
132 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightForProgrammer 2015-05-27
  • 打赏
  • 举报
回复
调试就知道了。
赵4老师 2015-05-27
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧