设曲线F(x),寻找到其极值区间[x1,x2],使其满足f(x1)>f((x1+x2)/2) , f((x1+x2)/2)<f(x2),利用这三个点的值拟合一条抛物线方程 f(x)=ax^2+bx+c,a b c 为系数。 ax3^2+bx3+c=f(x3) 写成矩阵形式 x1^2 x1 1 a f(x1) x2^2 x2 1 * b = f(x2) x3^2 x3 1 c f(x3) 化简为vander(x1 x2 x3) *[a b c]’=[f(x1) f(x2) f(x3)]’ 利用matlab求出该表达式之后,求得f(x)的极小值点xp。 判断f(xp)与f((x1+x2)/2)的值 若f(xp)>f((x1+x2)/2) 1、xp<(x1+x2)/2<x2,则新的区间为[xp,x2]; 2、(x1+x2)/2<xp<x2,则新的区间[x1,xp] 若f(xp)<f((x1+x2)/2) 1、x1<xp<(x1+x2)/2,则新的区间为[x1,(x1+x2)/2]; 2、(x1+x2)/2<xp<x2,则新的区间[(x1+x2)/2,x2]; 原则就是保证函数值呈现高帝高的分布,不断迭代即可。 一、算法原理
ax1^2+bx1+c=f(x1)
ax2^2+bx2+c=f(x2)
二、matlab程序
clc clear f=@(x) x.^3-6*x+9; ezplot(f,[-100 100]) [x,fx]=Min_erci(f,[0 5],100) % a 函数值 b横坐标 function [x,result]=Min_erci(f,x0,k) %x0为初始区间端点,k为迭代次数 x1=x0(1); x3=x0(2); x2=(x1+x3)/2; n=1; while n < k % 确定抛物线的系数 f1=f(x1); f2=f(x2); f3=f(x3); A=[x1^2 x1 1; x2^2 x2 1; x3^2 x3 1;]; b=[f1;f2;f3]; XS=Ab; %求出抛物线系数a b c 存放在xs中 xp=-XS(2)/(2*XS(1)); %二次多项式的极值点在x=-b/2a fp=f(xp); %求出该点函数值 if abs(xp-x2) < 1e-8 %该点满足极值点条件 x=xp; %输出极值点 result=f(x); %输出函数值 return; end if fp > f2 %判断新的迭代区间 if xp < x2 x1=xp; else x3=xp; end else if xp < x2 x3=x2; x2=xp; else x1=x2; x2=xp; end end n=n+1; %迭代次数+1 end if n == k %如果超出迭代次数 x=[]; %输出空 result=[]; disp('超过迭代次数'); end end
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算