求助:三等分法程序
最近在写最优化论文遇到这样一个问题,本人想用三等分代替0.618法去解方程的最值点,然后作比较(虽然最终肯定还是0.618法要好点)但三等分法程序无法写出,那位大侠有想过这样的问题,有没有写过这方面 的程序,能否发给小弟,<a href="mailtx0416@163.com" target="_blank" >x0416@163.com</A>.[ 本帖最后由 xinyuxf 于 2006-12-26 11:50 编辑 ]
回复:(x0416)[原创]求救,谁能帮我。
三等分法程序吗? <P>是呀,我自已写了一个,但有一个错误不知道怎么改,各位大侠请赐教。<BR>#include<math.h><BR>#include<stdio.h><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",&a,&b);<BR> if(a>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",&L);<BR> if(L<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)>=L){<BR> if(function(R)>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]