用黄金分割法求f(x)=(x-3)²的最优解 附C语言程序

用黄金分割法求f(x)=(x-3)²的最优解 附C语言程序,第1张

黄金分割法其实也是Fibonacci法吧!!!因为对于Fibonacci数列,有f(n)/f(n-1)-→0.618......

这题解法我是参考http://hi.baidu.com/shyyooeren/blog/item/d74f42104e8ef9f9c2ce7902.html,

只是改了多项式和Fibonacci数列用黄金分割数来求而已(需要改的还有x的范围(a,b))!

#include<stdio.h>

#include

<math.h>

const

int

fi[10]={1,1,2,3,5,8,13,21,34,55}

double

f(double

x)

//多项式

{

return

(x-3)*(x-3)

}

double

F(int

tn)//计算Fibonacci数

{

if(tn<10)

return

fi[tn]

return

pow(1.618,tn-9)*fi[9]

}

void

main(void)

{

double

r,u,a,b,fr,fu,q

int

k,n

//步骤1,初始化

a=0.0

b=3.0

k=0

q=0.00001

n=0

while(F(n)<((b-a)/q))n++

//计算次数n

r=a+(F(n-k-1)/F(n-k+1))*(b-a)

u=a+(F(n-k)/F(n-k+1))*(b-a)

fr=f(r)

fu=f(u)

while(k<n)

{

if(fr>fu)

{

if(b-r<=q)

{

printf("%d:%f",k,u)

break

}

else

{

a=r

b=b

r=u

fr=fu

u=a+(F(n-k)/F(n-k+1))*(b-a)

fu=f(u)

k++

}

}

else

{

if(u-a<=q)

{

printf("%d:%f",k,r)

break

}

else

{

a=a

b=u

u=r

fu=fr

r=a+(F(n-k-1)/F(n-k+1))*(b-a)

fr=f(r)

k++

}

}

}

getchar()

}

20尺集装箱内径:5.89x2.34x2.38(长宽高)

40尺集装箱内径:12,03x2.34x2.38

用你的包装箱尺寸,去吻合集装箱的长宽高,一定要小于集装箱的长宽高。即可。

例:

高:1.140x2层=2.28m,小于集装箱的高。

宽:1.080x2排=2.160m,小于集装箱的宽。

长:0.5x11排=5.5m

,

小于集装箱的长。

长宽高都可以保证装进去。

数量:2x2x11=44箱。

提示:40尺集装箱长12.03m,理论装24排,但是实际上在长度方向,一定会涨箱,保证装不进去。(这是实际经验),只能按照23排计算。

40尺可装数量:2x2x23=92箱。

祝你好运!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8039719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存