微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Matlab上使用feval评估匿名函数时遇到问题

如何解决在Matlab上使用feval评估匿名函数时遇到问题

我正在为bisection方法开发自己的Matlab代码,并定义了一个匿名函数,我试图为其寻找根。它会生成一个简单的图,我知道如果它能正确运行,它很容易找到根。

当我的代码开始以给定的x值评估函数时,它将返回:

Error using feval
Function to evaluate must be represented as a string scalar,character vector,or
function_handle object.

Error in bisection (line 3)
fa = feval(f,a);

我的完整代码是:

function m=bisection(f,a,b,imax,tol)

    fa = feval(f,a);
    fb = feval(f,b);
    i=0;

    if fa*fb>0
        disp('No root here: pick a new interval')
        return
    end
    while abs(b-a) >= tol
        i = i + 1;
        m=(a+b)/2;
        fm = feval(f,m);
        if fa*fb<0
            b = m;
        else
            a = m;
        end
        abs(fm);
    end
    % Show the last approximation considering the tolerance
    w = feval(f,m);
    fprintf('\n x = %f produces f(x) = %f \n %i iterations\n',m,fm,i-1);
    fprintf(' Approximation with tolerance = %f \n',tol);
end

我的功能是:

function [T] = freezing(x)

alpha = 0.138*10^-6;
Ti = 20;
Ts = -15;
t = 60*60*24*60;
tol = 10^-13;

%x = linspace(0,3);

T = @(x) (Ti-Ts)*erf(x./(2*sqrt(alpha*t)))+Ts;
dT = @(x) (Ti-Ts)*(1/sqrt(pi*alpha*t))*exp(-x.^2./(4*alpha*t));
T = T(x);
end

我真的不确定这是什么问题-在命令窗口中,我可以轻松输入x值并获取输出。任何建议都非常感谢!

解决方法

feval需要f才能成为function handle。当您调用bisection时,我怀疑您是将freezing的结果传递给bisection而不是函数句柄传递给freezing

您需要执行bisection(@freezing,...)而不是bisection(freezing(...),...)

@freezing创建一个传递给二等分的函数句柄。后者将冻结结果传递给bisection

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。