How can I pass a function name into another function?

3 次查看(过去 30 天)
I try to make something flexible that gives a function name as a variable name.
Tried the following:
file named tt.m
function tt
x = 0:10;
y1 = testfun(@line,x);
y2 = testfun(@quad,x);
end
file named testfun.m:
function b = testfun(fun, x)
b = fun(x);
function y = line(x)
y = x;
end
function y = quad(x)
y = x.^2;
end
end
How to get it working?
Any help appreciated!

采纳的回答

Stephen23
Stephen23 2023-3-30
编辑:Stephen23 2023-3-30
The functions that you nested inside TESFUN are only visible within TESTFUN:
You could either write them as functions in their own files or write them as normal local functions:
x = 0:10;
y1 = testfun(@line,x)
y1 = 1×11
0 1 2 3 4 5 6 7 8 9 10
y2 = testfun(@quad,x)
y2 = 1×11
0 1 4 9 16 25 36 49 64 81 100
function b = testfun(fun, x)
b = fun(x);
end
function y = line(x)
y = x;
end
function y = quad(x)
y = x.^2;
end

更多回答(1 个)

Torsten
Torsten 2023-3-30
移动:Torsten 2023-3-30
"fun" is an external input argument to "testfun". Thus "fun" can not be used as a nested function in "testfun".
Using "line" and "quad" as independent external functions that are not nested within "testfun" will work.
Or use
tt
y1 = 1×11
0 1 2 3 4 5 6 7 8 9 10
y2 = 1×11
0 1 4 9 16 25 36 49 64 81 100
function tt
x = 0:10;
y1 = testfun(@line,x)
y2 = testfun(@quad,x)
function b = testfun(fun, x)
b = fun(x);
end
function y = line(x)
y = x;
end
function y = quad(x)
y = x.^2;
end
end

类别

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

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by