黄金分割法、斐波那契法求极值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function y=fx(x)
if nargin==1
y=x+20/x;
end
end
%a为区间下限,b为区间上限,e为精度;
%fx(x)为原方程函数;
function [xj,yj]=huangjin(a,b,e)
a=input('Please enter the value of a:');
b=input('Please enter the value of b:');
e=input('Please enter the value of e:');
while b-a>e
x1=a+*(b-a);
x2=a+*(b-a);
if fx(x1) b=x2; else a=x1; end end xj=(a+b)/2; yj=fx(xj); end 此题中,a=,b=1,e=,程序运行结果为xj=,yj=。改变方程,将原函数方程改变。 6、用斐波那契法求极值: ()432 31630248 f x x x x x =-+-+; %建立原方程函数; function y=fx(x) if nargin==1 y=3*x^4-16*x^3+30*x^2-24*x+8; end end %建立斐波那契数列函数; function fn=F(n) if nargin==1 y=[0]; y(1)=[1]; y(2)=[1]; for k=3:1:n y(k)=[y(k-1)+y(k-2)]; end fn=y(n); end end %求解应计算次数的函数; %s为(b-a)/e的值,其中(a,b)为单峰区间,e为精度; function n=cishu(s) if nargin==1 n=1; while F(n) n=n+1; end end end %求极值函数; %a为区间下限,b为区间上限,e为精度; function [xj,yj]=fib(a,b,e) a=input('Please enter the value of a:'); b=input('Please enter the value of b:'); e=input('Please enter the valud of e:'); s=(b-a)/e; n=cishu(s); x2=a+F(n-1)/F(n)*(b-a); x1=b-F(n-1)/F(n)*(b-a); while (b-a)>e if fx(x2)>=fx(x1) b=x2; x2=x1; x1=a+b-x2; else a=x1; x1=x2; x2=a+b-x1; end end xj=(a+b)/2; yj=fx(xj); end 此题中,a=-10,b=10,e=,程序运行结果为:xj =, yj =,若原方程改变,只需改变原方程函数即可。