#include<stdio.h>
float f(float x)
{
float y
y=x+10/x
return(y)
}
float abvalue(float a,float b)
{
if(a>b)
return (a-b)
else
return (b-a)
}
void main()
{
float a=2,b=10,c=0.3
float f1,f2,k,a1,b1
do
{
a1=a+0.382*(b-a)//第一步
b1=b+0.618*(b-a)
if(f(a1)>f(b1))//第二步
{
a=a1
b=b
}
else
{
b=b1
a=a
}
}
while(abvalue(a,b)>0.3)
printf("the result k is %f",(b-a)/2)
}
另外,虚机团上产品团购,超级便宜
#include<iostream.h>#include<math.h>
/*黄金分割法求最小值的C++程序,部分变量及函数书写并不规范*/
//δ为题给精度
int n = (lnδ/ln0.618 + 1) + 1
int i
float f(float ai, float bi)
{
a(i + 1) = ai + 0.618(bi - ai)
return ai + 1
}
float g(float ai, float bi)
{
b(i + 1) = ai + 0.382(bi - ai)
return b(i + 1)
}
float F(float ai, float bi)
{
//题给的f(x)函数式
return
}
float A(float ai, float bi)
{
int i = 1
float result
L: do
{
a(i + 1) = f(float ai, float bi)
b(i + 1) = g(float ai, float bi)
float F1 = F(float ai, float bi)
float F2 = F(float a(i + 1), float b(i + 1))
ai = ai, bi = b(i + 1)
i ++
}while(i <= n &&F1 >= F2)
if(i <n)
{
B(float ai, float bi)
}
else
result = F2
return result
}
float B(float ai, float bi)
{
do
{
a(i + 1) = f(float ai, float bi)
b(i + 1) = g(float ai, float bi)
float F1 = F(float ai, float bi)
float F2 = F(float a(i + 1), float b(i + 1))
ai = a(i + 1), bi = bi
i ++
}while(i <= n &&F1 <= F2)
if(i <n)
{
goto L
}
else
result = F1
return result
}
void main()
{
int i = 1
float A(float ai, float bi)
cout<<"最小值为:"<<result<<endl
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)