【问题标题】:MATLAB ERROR Feval requires a function handle as the first argumentMATLAB ERROR Feval 需要函数句柄作为第一个参数
【发布时间】:2016-03-28 23:58:40
【问题描述】:

我有这个代码 (*),当我这样做时:

»syms x
»newton_raphson({((5400.*(1 + x)*0^360) - (1450000.*x.*(1 + x).^360))}, diff(((5400.*(1 + x)*0^360) - (1450000.*x.*(1 + x).^360)),1), 0.001, eps, 5, 0.1)

出现这个错误:

使用 feval 时出错 参数必须包含字符串或函数句柄。

newton_raphson 中的错误(第 10 行) fz = feval(f,z(1));

我该如何解决这个错误?

(*)

 function [raiz, zn, fz, i] = newton_raphson(f, flinha, x0, eps, iter_max, debug)
   if nargin < 4
      eps = 1e-6;
   end
   if nargin < 5
      iter_max = 1e3;
   end

   z(1) = x0;
   fz = feval(f,z(1));
   fzlinha = feval(flinha,z(1));
   if (nargin > 5 && debug > 0)
      fprintf(2,'i=%d z=%23.18G fz=%G fzlinha=%G\n',0,x0,fz,fzlinha);
   end
   for i = 1:iter_max
      if abs(fzlinha) == 0 % f'(x0) equal zero 
         disp('O valor da derivada em Xi não pode ser zero');
         z(i+1) = x0;
         return
      end
      z(i+1) = x0 - fz / fzlinha;
      fz = feval(f,z(i+1));
      fzlinha = feval(flinha,z(i+1));
      dif = abs(z(i+1) - x0);
      if (nargin > 5 && debug > 0)
         fprintf(2,'i=%d z=%23.18G fz=%G fzlinha=%G dif=%E\n',i,z(i+1),fz,fzlinha,dif);
      end
      if dif < eps
         break;
      elseif i == iter_max
         disp('Foi excedido o número máximo de iterações (iter_max)'); 
         break
      end 
      x0=z(i+1);
   end
   zn = z';
   raiz = z(i+1);
end`

【问题讨论】:

    标签: matlab compiler-errors arguments newtons-method function-handle


    【解决方案1】:

    您将 symbolic expression 传递给旨在评估 anonymous functionfunction handle 或 Matlab 路径上的函数的函数,它的 name indicated by a string 通过 feval。如果您希望Matlab为您做微分,您可以先使用符号表达式,然后通过matlabFunction将它们转换为匿名函数,就像这样

    syms x f Df
    %
    % Symbolic expressions
    f  = (5400.*(1 + x)*0^360) - (1450000.*x.*(1 + x).^360); 
    Df = diff(f,x); 
    %
    %  Convert to anonymous functions
    f  = matlabFunction(f ,'Vars',x); 
    Df = matlabFunction(Df,'Vars',x); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多