Why is there an error when I called the function inputting the points

2 次查看(过去 30 天)
"Undefined function 'f' for input arguments of type 'double'.
Error in linearinterp>refine (line 11) if abs((f(x1)+f(x2))/2-f(xm))<tol
Error in linearinterp (line 3) points = refine(0, 7, 0.6);"
function linearinterp
f = @(x) (exp(-x/2).*sin(x.^2+8));
points = refine(0, 7, 0.6);
plot(points, f(points), 'r+');
hold on
plot(points, f(points));
hold off
end
function points = refine(x1, x2, tol)
xm = (x1+x2)/2;
if abs((f(x1)+f(x2))/2-f(xm))<tol
points=[x1,x2];
else
left=refine(x1, xm, tol);
right=refine(xm, x2, tol);
points=[left, right(2:length(right))];
end
end

采纳的回答

Mischa Kim
Mischa Kim 2014-2-12
编辑:Mischa Kim 2014-2-12
Ehi, you need to define function f again in refine() to make it work. In other words:
function points = refine(x1, x2, tol)
f = @(x) (exp(-x/2).*sin(x.^2+8));
...
Reason begin, f is only in scope of linearinterp(). It is not in scope for refine() and therefore unknown. Alternatively, you can pass f as an input argument to refine():
points = refine(0, 7, 0.6, f)
...
function points = refine(x1, x2, tol, f)
In that case you do not need to define f again.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by