x0416 发表于 2006-6-10 00:53

求助:三等分法程序

最近在写最优化论文遇到这样一个问题,本人想用三等分代替0.618法去解方程的最值点,然后作比较(虽然最终肯定还是0.618法要好点)但三等分法程序无法写出,那位大侠有想过这样的问题,有没有写过这方面 的程序,能否发给小弟,<a href="mailtx0416@163.com" target="_blank" >x0416@163.com</A>.

[ 本帖最后由 xinyuxf 于 2006-12-26 11:50 编辑 ]

tammy 发表于 2006-6-11 07:06

回复:(x0416)[原创]求救,谁能帮我。

三等分法程序吗?

x0416 发表于 2006-6-13 15:19

<P>是呀,我自已写了一个,但有一个错误不知道怎么改,各位大侠请赐教。<BR>#include&lt;math.h&gt;<BR>#include&lt;stdio.h&gt;<BR>//全局变量<BR>double a,b;<BR>double L,X;<BR>double R,U;<BR>int k=1;<BR>//要计算的函数<BR>double function(double x){<BR>       double y=(x+1)*(x-2)*(x-2);<BR>       return y;<BR>}<BR>//初始化区间<BR>void Initalize(){<BR>   printf("Input the a and b:\n");<BR>   scanf("%lf %lf",&amp;a,&amp;b);<BR>   if(a&gt;b){<BR>            printf("error,the a must be small than the b,please input again.\n");<BR>   exit(0);<BR>}<BR>   printf("Input the L\n");<BR>   scanf("%lf",&amp;L);<BR>   if(L&lt;0){<BR>             printf("error,the L must be biger than zero.\n");<BR>   exit(0);<BR>   }<BR>}<BR>//step 3<BR>void Step3(){<BR>      a=R;<BR>      b=b;<BR>      R=U;<BR>      U=a+2/3*(b-a);<BR>}<BR>//step4<BR>void Step4(){<BR>      a=a;<BR>      b=U;<BR>      U=R;<BR>      R=a+1/3*(b-a);<BR>}<BR>//处理过程<BR>void process(){<BR>      R=a+1/3*(b-a);<BR>      U=a+2/3*(b-a);<BR>      while((b-a)&gt;=L){<BR>                if(function(R)&gt;function(U)){<BR>                            Step3();<BR>                }<BR>                else {<BR>                            Step4();<BR>                }<BR>                k=k+1;<BR>      }<BR>      printf("the min area is :[%lf %lf]\n",a,b);<BR>      double X=(a+b)/2;<BR>      printf("the min point is:%lf\n",X);<BR>}<BR>//主函数<BR>void main(){<BR>         Initalize();<BR>         process();<BR>}<BR>getch();</P>
页: [1]
查看完整版本: 求助:三等分法程序