这个程序怎么运行了没有结果啊,高手们帮忙看一下,谢谢

pitter2006 2007-07-02 10:44:52
#include <iostream.h>
#include <math.h>

double func(double b[])//找到数组中最小的数
{
double temp;
for(int i=0;i<8;i++)
for(int j=0;j<=i;j++)
{
if(b[i]<b[j])
{
temp = b[i];
b[i] = b[j];
b[j] =temp;
}
}
return b[0];
}
double yy(double ti[],double arf,double sita)//为了计算sita的先求yy的值
{
double y;
double sum1=0;
double sum2=0;
double sum3=0;
for(int i=0;i<8;i++)
sum1+=pow((ti[i]-sita),(arf-1));
for(int j=0;j<8;j++)
sum2+=pow((ti[j]-sita),arf);
for(int k=0;k<8;k++)
sum3+=1/(ti[k]-sita);
y = sum1-(arf -1)/(8*arf)*sum2*sum3;
return y;
}
void main ()
{
double a[8]={181,200,196,205,186,211,194,210};
double sita,y1,y2,y3;
double a1=0;
double a2=func(a);
y2 = yy(a,10,a2);
y1 = yy(a,10,a1);
sita = 0;
y3 = yy(a,10,(a1+a2)/2);
while(fabs(y1)>1e-6)
{
if(y1*y3>0)
a1=(a1+a2)/2;
else
a2=(a1+a2)/2;
y1 = yy(a,10,a1);
y2 = yy(a,10,a2);
y3 = yy(a,10,(a1+a2)/2);
sita = (a1+a2)/2;
}
cout<<sita;
}
sita是yy函数的零点,通过二分法求sita,谢谢了!
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pitter2006 2007-07-02
  • 打赏
  • 举报
回复
谢谢你啊!!
mwlabxj 2007-07-02
  • 打赏
  • 举报
回复
首先,找数组中最小的数,你用的方法太复杂,好像并不是出于什么特殊目的,简单的功能就该用简单方法,
temp=a[0];
for(i=1;i<8;i++){
if(temp>a[i])
temp=a[i];
}
这样更简洁。
其次, for(int k=0;k<8;k++)
sum3+=1/(ti[k]-sita);
这一段你有没有考虑,sita是ti[k]中最小的一个数,也就是说有可能ti[k]-sita=0,那么这个公式就有问题,除0溢出。
其他没看出来有什么问题。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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