黄金分割法的具体做法是怎样的?

黄金分割法的具体做法是怎样的?,第1张

2000多年前,古希腊的柏拉图派学者欧多克斯,首先使用规尺分已知线段为“黄金分割”,他的作法如下:

1?过B点,作BC⊥AB,而且使BC=12AB;

2?连AC;

3?以C为圆心,CB为半径作圆弧,交AC于D;

4?以A为圆心,AD为半径作圆弧交线段AB于P,则P点分AB成黄金分割。

这个作法十分简便,证明也很容易。

设AB=a,则BC=a2,由勾股定理可知:

AC=AB2+BC2=a2+(a2)=52a;

AD=AC-DC=52a-a2=5-12a;

AP=AD=5-12a。

这就证明了,P点分AB成黄金分割。

这个作图方法,叫做“黄金分割法”,P点为“黄金分割点”。

#include#includefloat getequation(float x)

{

return x*x-2*x+2

}

void main()

{

float a=0

float b=6

float result = 0

do {

float c=a+0.618*(b-a)

float d=a+b-c

if(fabs(getequation(c)) <fabs(getequation(d)))

{

a=d

result = c

}

else

{

b=c

result = d

}

} while(fabs(getequation(result)) >0.01)

printf("f(a)=a*a-7*a+10\n")

printf("a=%f\n",result)

}

扩展资料

C语言编写程序求最大值

#include<stdio.h>

double Max(double*p,int n)

{

double max=*p

for(int i=0i<ni++)

if(*(p+i)>max)

max=*(p+i)

return max

}

double Min(double *p,int n)

{

double min=*p

for(int i=0i<ni++)

if(*(p+i)<min)

min=*(p+i)

return min

}

double Average(double *p,int n)

{

double sum=0

for(int i=0i<ni++)

sum+=*(p+i)

return sum/n

}

int main()

{

double a[10]

printf("请输入10个实数:\n")

for(int i=0i<10i++)

scanf("%f",&a[i])

printf("这10个数中最大值为:%f\n",Max(a,10))

printf("这10个数中最小值为:%f\n",Min(a,10))

printf("这10个数的平均值为:%f\n",Average(a,10))

return 0;


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存