在 Matlab 上使用 feval 评估匿名函数时遇到问题
Having trouble evaluating an anonymous function using feval on Matlab
我正在为二分法编写自己的 Matlab 代码,并定义了一个匿名函数,我试图为其找到根。它生成一个简单的图表,我知道如果它 运行 正确的话,它可以很容易地找到根。
当我的代码开始计算给定 x 值的函数时,它 returns:
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
我真的不确定这里的问题是什么 – 在我的命令 window 中,我可以轻松输入 x 值并获得输出。非常感谢任何建议!
feval
需要 f
才能成为 function handle。当您调用 bisection
时,我怀疑您将 freezing
的结果传递给 bisection
,而不是将函数句柄传递给 freezing
你需要做 bisection(@freezing, ...)
而不是 bisection(freezing(...), ...)
@freezing
创建一个传递给二分法的函数句柄。执行后者会将 冻结的结果 传递给 bisection
。
我正在为二分法编写自己的 Matlab 代码,并定义了一个匿名函数,我试图为其找到根。它生成一个简单的图表,我知道如果它 运行 正确的话,它可以很容易地找到根。
当我的代码开始计算给定 x 值的函数时,它 returns:
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
我真的不确定这里的问题是什么 – 在我的命令 window 中,我可以轻松输入 x 值并获得输出。非常感谢任何建议!
feval
需要 f
才能成为 function handle。当您调用 bisection
时,我怀疑您将 freezing
的结果传递给 bisection
,而不是将函数句柄传递给 freezing
你需要做 bisection(@freezing, ...)
而不是 bisection(freezing(...), ...)
@freezing
创建一个传递给二分法的函数句柄。执行后者会将 冻结的结果 传递给 bisection
。