本文目錄一覽:
- 1、c語言編程:用黃金分割法求 minf(x)=x2+2x+1 急!!!!
- 2、《C語言編程魔法書》pdf下載在線閱讀全文,求百度網盤雲資源
- 3、用黃金分割法求f(x)=(x-3)²的最優解 附C語言程序
- 4、編程你們來看下啊2X^2-2X+1用C語言編出來,最好用MATLAB搞出來還有分加的
- 5、用c語言編寫黃金分割法
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
《C語言編程魔法書》pdf下載在線閱讀全文,求百度網盤雲資源
《C語言編程魔法書》百度網盤pdf最新全集下載:
鏈接:
?pwd=6jvc 提取碼: 6jvc
簡介:主要講解C11標準的語法內容,並且從整個編譯、連接到加載過程都會涉及。同時在後會分別介紹GCC編譯器與Clang編譯器的C語言語法擴展。通過閱讀本書,讀者能夠完全掌握新標準的C語言編程。並且對C語言設計思想、實現方式也能有個大概的了解。
用黃金分割法求f(x)=(x-3)²的最優解 附C語言程序
黃金分割法其實也是Fibonacci法吧!!!因為對於Fibonacci數列,有f(n)/f(n-1)-→0.618……
這題解法我是參考,
只是改了多項式和Fibonacci數列用黃金分割數來求而已(需要改的還有x的範圍(a,b))!
#includestdio.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(tn10)
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(kn)
{
if(frfu)
{
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();
}
編程你們來看下啊2X^2-2X+1用C語言編出來,最好用MATLAB搞出來還有分加的
把以下程序存為f618.m,再運行[x,min]=F618(0.2,0,1)
得到:x=1,min=0
function [x,min]=F618(precision,t0,h)
%初始區間為a,b,相對精度precision 即為原區間的多少分之,t0為初始值,h為步長
%用進退法得到高低高區間,在用0.618法求最值
%precision=0.2;
%t0=0;
%h=1;
[a,b]=Fpush(t0,h);
An=a;
Bn=b;
n=1;
while 0.618^(n-1)=precision
A=0.618.*(An-Bn)+Bn;
B=0.618.*(Bn-An)+An;
if AB
if F618Ret(A)F618Ret(B)
Bn=B;
else
An=A;
end
else
if F618Ret(A)F618Ret(B)
An=A;
else
Bn=B;
end
end
n=n+1;
end
x=An;
min=F618Ret(An);
%=======================================
function y=F618Ret(x)
%函數為f(x)=t^2-10*t+36 嚴格凸函數
y=x.^2-2*x+2;
%======================================
function [x1,x2]=Fpush(t0,h)
%進退法,調用函數為,F618Ret,t0為初始值,h為步長
a=t0;
b=t0+h;
while 1
if F618Ret(a)F618Ret(b)
h=0-h;
a=a+h;
b=a-h;
if F618Ret(b)F618Ret(b-h) F618(b)F618Ret(a)
break;
end
else
a=b;
b=a+h;
if F618Ret(a)F618Ret(b) F618Ret(a)F618Ret(a-h)
break;
end
end
end
x1=a;
x2=b;
用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上的一個黃金分割點.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192468.html