當前位置:首頁 » 編程語言 » 黃金分割法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-03 05:42:28 瀏覽:901
肥胖的演算法 發布:2024-05-03 05:38:09 瀏覽:783
兩個資料庫事務 發布:2024-05-03 05:33:41 瀏覽:855
phpjson轉 發布:2024-05-03 05:33:40 瀏覽:659
設計一個虛擬存儲區 發布:2024-05-03 05:24:18 瀏覽:927
壓縮機如何配置電容 發布:2024-05-03 05:20:55 瀏覽:109
pythonconvert函數 發布:2024-05-03 05:19:54 瀏覽:526
androidspinner下拉 發布:2024-05-03 05:14:05 瀏覽:589
go源碼編譯2021 發布:2024-05-03 05:02:27 瀏覽:285
兩驅車買哪個配置最好 發布:2024-05-03 04:41:42 瀏覽:803