⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmintx.m

📁 FFTGUI Demonstration of Finite Fourier Transform. FFTGUI(y) plots real(y), imag(y), real(fft(y)
💻 M
字号:
function u = fmintx(F,a,b,tol,varargin)%FMINTX  Textbook version of FMINBND%   x = FMINTX(F,a,b) finds a local minimizer x of the function F%   in the interval a <= x <= b. F accepts scalar input x and returns %   a scalar function value, F(x).%%   x = FMINTX(F,a,b,tol) uses stopping tolerance tol instead of 1.e-6.%%   x = FMINTX(F,a,b,tol,p1,p2,...) provides for additional%   arguments, which are passed to the objective function, F(x,p1,p2,...).%   (Use [] as a place holder for tol to get the default tolerance.)%%   Examples%     F can be specified using @:%        x = fmintx(@cos,3,4)%      computes pi to six decimal places.%%     F can also be an inline object:%        f = inline('sin(x)+3');%        x = fmintx(f,2,5);%%   See also FMINBND, FMINSEARCH, FZERO, @, INLINE.%   Reference: "Computer Methods for Mathematical Computations",%   Forsythe, Malcolm, and Moler, Prentice-Hall, 1976.% Initializationif nargin < 4 | isempty(tol)   tol = 1.e-6; endif ischar(F) & exist(F)~=2   F = inline(F);elseif isa(F,'sym')   F = inline(char(F));end phi = (1 + sqrt(5))/2;rho = 2 - phi;u = a + rho*(b-a);v = u; w = u; x = u;fu = feval(F,u,varargin{:}); fv = fu; fw = fu; fx = fu;xm = 0.5*(a+b);d = 0.0;e = 0.0;% Main loopwhile abs(x-xm) > tol   % Is a parabolic fit possible?   para = abs(e) > tol;   if para      % Try parabolic fit.      r = (x-w)*(fx-fv);      q = (x-v)*(fx-fw);      p = (x-v)*q-(x-w)*r;      q = 2.0*(q-r);      if q > 0.0,  p = -p; end      q = abs(q);      r = e;      e = d;      % Is the parabola acceptable?      para = ( (abs(p)<abs(0.5*q*r)) & (p>q*(a-x)) & (p<q*(b-x)) );      if para         % Parabolic interpolation step         d = p/q;      end   end   if ~para      % Golden-section step      if x >= xm         e = a-x;      else         e = b-x;      end      d = rho*e;   end      u = x + d;   fu = feval(F,u,varargin{:});        % Update a, b, x, v, w, xm   if fu <= fx      if u >= x, a = x; else, b = x; end      v = w; fv = fw;      w = x; fw = fx;      x = u; fx = fu;   else      if u < x, a = u; else, b = u; end      if ( (fu <= fw) | (w == x) )         v = w; fv = fw;         w = u; fw = fu;      elseif ( (fu <= fv) | (v == x) | (v == w) )         v = u; fv = fu;      end   end   xm = 0.5*(a+b);end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -