| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 389 人关注过本帖
标题:C语言高手请进 编程问题
只看楼主 加入收藏
wuerst
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-7-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C语言高手请进 编程问题
以下是一段用黄金分割法求最优解的程序,请高手进来看看,错误在哪里。
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
#define E(b) fabs(A*(1/(PI*PI))*((PI-b)*(b/sin(b)+cos(b))+2*sin(b))-
                  (1/(2*PI))*((b/sin(b)+b/tan(b)+cos(b))+cos(b)*cos(b)-(PI*PI)/4-
                  (3*sin(b)*sin(b)/4)+(b*b)/4)))+2*fabs(A*((sin(b)/(16*PI)- b/(2*(pow(PI,2)))*(b/sin(b)
                  +cos(b))+sin(b)/pow(PI,2)+1/8-pow(b,2)*cos(b)/(8*PI*sin(b))))
#define z 1e-5

void sb(double*a,double*b)
{
double b0,b1,b,h,alpha,E0,E1;
int k=0;
printf("请输入初始点b0=");
scanf("%lf",&b0);
printf("\n请输入初始步长h=");
scanf("&lf",&h);
printf("\n请输入加步系数alpha(需大于1)=");
scanf("%lf",&alpha);
E0=E(b0);
b1=b0+h;
E1=E(b1);
while(1)
{
  printf("\nE1=%lf,E0=%lf,b0=%lf,b1=%lf,h=%lf,k=%d",E1,E0,b0,b1,h,k);
  if(E1<E0)
  {
   h=alpha*h;
   b=b0;
   b0=b1;
   E0=E1;
   k++;
  }
  else
  {
   if(k==0)
   {h=-h,b=b1;}
   else
   {
    *a=b<b1?b:b1;
    *b=b>b1?b:b1;
    break;
   }
  }
  b1=b0+h;
  E1=E(b1);
 }

 double hjfg()
 {
 double beta,b1,b2,b;
 double E1,E2;
 double e=PI/6,f=PI/3;
 double *c,*d;
 sb(c,d);
 printf("\n[e,f]=[%lf,%lf]",e,f);
 beta=((srqt(5)-1)/2);
 b2=e+beta*(f-e);
 E2=E(b2);
 b1=e+f-b2;
 E1=E(b1);
   while(1)
   {
     printf("\n第%d次的迭代过程如下:",k+1);
     printf("\n[b1,b2]=[%lf,%lf],b1,b2");
     if(fabs(b1-b2)<z)
     break;
     else
     {
       if(E1<E2)
       {
         b=(b1+b2)/2;
         f=b2;
         b2=b1;
         E2=E1;
         b1=e+f-b2;
         E1=E(b1);
       }
       else
       {
         e=b1;
         b1=b2;
         E1=E2;
         b2=e+beta*(f-e);
         E2=E(b2);
       }
     }
     k++;
   }
   b=(b1+b2)/2;
   printf("\nb=%f",b);
   getch();
   return(b);
 }

 main()
 {
 double b;
 b=hjfg();
 getch();
 printf("\n函数的最优值为E(%lf)=%lf",E(b),b);
 }
其中显示红色的一行老是错误,也不知道是什么原因。#define E(b)后是一个表达式,具体为(δAB的绝对值+2*δC的绝对值),其中δAB、
δC的具体表达式见公式图。
公式图.rar (10.38 KB)
密码:123.
搜索更多相关主题的帖子: C语言 
2011-07-04 20:28
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:10 
楼主最好把e(b)这个宏写为一个函数
2011-07-04 20:49
wuerst
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-7-4
收藏
得分:0 
回复 2楼 hjywyj
怎么写成一个函数啊???
2011-07-05 21:30
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
同意二楼

                                         
===========深入<----------------->浅出============
2011-07-05 21:44
快速回复:C语言高手请进 编程问题
数据加载中...
 
   



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

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