当前位置:首页 » 编程语言 » 黄金分割法c语言

黄金分割法c语言

发布时间: 2022-07-09 20:35:44

‘壹’ 用c++怎么编黄金分割法的程序

用pow函数
pow(x,y)表示x的y次方

‘贰’ c语言编程,用黄金分割法求f(a)=a*a-7*a+10的最优解。设初始值a0=0,初始步长h=1,取迭代精度=0.35。急…

#include <stdio.h>
#include <math.h>
float GetEquation(float x)
{
return x*x-7*x+10;
}
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语言编写黄金分割法

黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,用分数表示为(√5-1)/2。黄金分割点(p)的求法,如图:①过点B作BD⊥AB,使BD=1/2AB;②连结AD,以D为圆心,CB为半径作弧,交AD于E, 则有DE=DB;③以A为圆心,AE为半径作弧,交AB于P,则有AP=AE;则点P是线段AB上的一个黄金分割点.为什么点P是线段AB上的一个黄金分割点?事实上,若设AB=2,则BD=BE=1,由作图过程可知AD=√5.则AE=AP=(√5)-1,PB/AP=AP/AB=[(√5)-1]/2。 因此点P是线段AB上的一个黄金分割点.

‘肆’ 用C语言编写黄金分割法f(x)=x2+2x程序

#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 ");
printf("a=%f ",result);
}

(4)黄金分割法c语言扩展阅读

C语言编写程序求最大值

#include<stdio.h>
doubleMax(double*p,intn)
{
doublemax=*p;

for(inti=0;i<n;i++)

if(*(p+i)>max)

max=*(p+i);

returnmax;
}
doubleMin(double*p,intn)
{
doublemin=*p;
for(inti=0;i<n;i++)
if(*(p+i)<min)

min=*(p+i);

returnmin;
}
doubleAverage(double*p,intn)
{
doublesum=0;

for(inti=0;i<n;i++)

sum+=*(p+i);
returnsum/n;
}
intmain()
{
doublea[10];

printf("请输入10个实数: ");
for(inti=0;i<10;i++)
scanf("%f",&a[i]);
printf("这10个数中最大值为:%f ",Max(a,10));

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

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

‘伍’ 急求C语言用1进退法2二分法3黄金分割法4牛顿切线法5综合法这五种方法的NS图和程序,简单就好,急!

#include<stdio.h>
#include<math.h>

void main()
{
void function1();//搜索法
void function2();//二分法
void function4();//牛顿法
int choice;
printf("请选择求解的方法:\n\t1.搜索法\n\t2.二分法\n\t3.牛顿法\n:");

switch(1)
{
case 1: function1();
case 2: function2();
case 4: function4();
}

}

void function1()//搜索法计算非线性方程的解
{
double expression1(double);
double lpoint=1.0,rpoint=2.0,step=0.0001;
while(expression1(lpoint)<-0.00001)
{
lpoint=lpoint+step;
}
printf("运用搜索法所求结果:%f\n",lpoint);

}

void function2()//二分法计算非线性方程的解
{
double expression1(double);
double lpoint=1,rpoint=2,mpoint;
mpoint=(lpoint+rpoint)/2;
while(fabs(expression1(mpoint))>0.00001)
{

mpoint=(lpoint+rpoint)/2;
if(expression1(lpoint)*expression1(mpoint)<0)
rpoint=mpoint;
else
lpoint=mpoint;
}
printf("运用二分法所求结果:%f\n",mpoint);
}

void function4()//牛顿法计算非线性方程的解
{
double expression1(double);
double expression2(double);
double x=1.5;
while(expression1(x)>0.00001)
{
x=x-expression1(x)/expression2(x);
}
printf("运用牛顿法所求结果:%f\n",x);

}

double expression1(double x)
{
double result;
result=x*x*x-x*x-1;
return result;
}

double expression2(double x)
{
double result;
result=3*x*x-2*x;
return result;

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

黄金分割法其实也是Fibonacci法吧!!!因为对于Fibonacci数列,有f(n)/f(n-1)-→0.618......
这题解法我是参考http://hi..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();
}

‘柒’ fib在c语言中是什么意思

fib在c语言中为斐波那契数列,又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

从第二项开始,每个偶数项的平方都比前后两项之积多1,每个奇数项的平方都比前后两项之积少1。

如:第二项 1 的平方比它的前一项 1 和它的后一项 2 的积 2 少 1,第三项 2 的平方比它的前一项 1 和它的后一项 3 的积 3 多 1。

(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如从数列第二项 1 开始数,第 4 项 5 是奇数,但它是偶数项,如果认为 5 是奇数项,那就误解题意,怎么都说不通)

证明经计算可得:

(7)黄金分割法c语言扩展阅读:

斐波那契数列的整除性与质数生成性

每3个连续的数中有且只有一个被 2 整除,

每4个连续的数中有且只有一个被 3 整除,

每5个连续的数中有且只有一个被 5 整除,

每6个连续的数中有且只有一个被 8 整除,

每7个连续的数中有且只有一个被 13 整除,

每8个连续的数中有且只有一个被 21 整除,

‘捌’ c语言编程:用黄金分割法求 minf(x)=x2+2x+1 急!!!!

给,已经编译运行确认:
#include "math.h"
#include "stdio.h"
#define f(x) x*x+2*x+1 //一元函数,这里按照你的要求写的是:x2+2x+1
//函数功能是用黄金分割法实现求一元函数 的最优解
double hj(double *a,double *b,double e,int *n)
{ double x1,x2,s;
if(fabs(*b-*a)<=e)
s=f((*b+*a)/2);
else
{ x1=*a+0.382*(*b-*a);
x2=*a+0.618*(*b-*a);
if(f(x1)>f(x2))
*a=x1;
else
*b=x2;
*n=*n+1;
s=hj(a,b,e,n);
}
return s;
}
main()
{ double s,a,b,e;
int n=0;
scanf("%lf %lf %lf",&a,&b,&e); // 输入区间[a,b]和精度e的值
s=hj(&a,&b,e,&n); //调用hj函数,其中n代表迭代次数
printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);
}

运行时:
输入:0.6 0.5 0.1
输出结果为:
0.6 0.5 0.1
a=0.600000,b=0.500000,s=2.402500,n=0

热点内容
搜解压缩 发布:2024-05-17 15:38:32 浏览:764
水泵扬程算法 发布:2024-05-17 15:37:29 浏览:977
英雄联盟技能脚本 发布:2024-05-17 14:59:41 浏览:444
全名k歌安卓手机里面怎么录屏 发布:2024-05-17 14:40:07 浏览:180
常用数据库介绍 发布:2024-05-17 14:31:38 浏览:504
中孚存储介质信息消除工具 发布:2024-05-17 14:31:33 浏览:589
服务器访问ip如何调转主页 发布:2024-05-17 14:30:33 浏览:789
好玩的解压化妆小游戏 发布:2024-05-17 14:10:57 浏览:127
交通银行怎么登陆不了密码 发布:2024-05-17 13:54:48 浏览:543
安卓如何自动连接无线 发布:2024-05-17 13:53:51 浏览:262