| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 207 人关注过本帖
标题:[求助]请指点修改程序!
只看楼主 加入收藏
淡雅的粉色
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-8-24
收藏
 问题点数:0 回复次数:0 
[求助]请指点修改程序!

各位学长,以下是龙格库塔法求解微分方程的程序。请教各位学长的问题是:若现在我想把函数z=-0.08*u-sin(q)+2.2*sin(s);中加一个变量w,它的范围是[0,10],即函数变为z=-0.08*u-sin(q)+2.2*sin(w*s);要求函数每被调用10000次,w的值增加0.01,也就是说主程序中执行完10000次的for循环后w增加0.01,然后再执行for循环,这样运算直到w达到10为止,这个程序应该怎样改呢?请各位学长指点!

/*龙格库塔法求解微分方程*/
#include "stdio.h"
#include "math.h"
double f(double,double,double);
main()
{
double t=0.0,y1,y2,h=0.02,w10=1.0,w20=1.0,k11,k12,k21,k22,k31,k32,k41,k42;
int n;

for (n=0;n<=10000;n=n+1) /*套用公式解微分方程*/
{
t=t+h;
k11=h*w20;
k12=h*f(t,w10,w20);
k21=h*(w20+0.5*k12);
k22=h*f(t+0.5*h,w10+0.5*k11,w20+0.5*k12);
k31=h*(w20+0.5*k22);
k32=h*f(t+0.5*h,w10+0.5*k21,w20+0.5*k22);
k41=h*(w20+k32);
k42=h*f(t+h,w10+k31,w20+k32);
w10=w10+1.0/6.0*(k11+2.0*k21+2.0*k31+k41);
w20=w20+1.0/6.0*(k12+2.0*k22+2.0*k32+k42);
if(n>5000)
{
printf("%lf\t%lf\t%lf\t\n",t,w10,w20);
}
}
}
double f(double s,double q,double u) /*函数的定义*/
{
double z;
z=-0.08*u-sin(q)+2.2*sin(s);
return z;
}

2007-10-28 14:16
快速回复:[求助]请指点修改程序!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011028 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved