How can I pass a function name into another function?

9 Ansichten (letzte 30 Tage)
Peter Fokker
Peter Fokker am 30 Mär. 2023
Verschoben: Torsten am 30 Mär. 2023
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!

Akzeptierte Antwort

Stephen23
Stephen23 am 30 Mär. 2023
Bearbeitet: Stephen23 am 30 Mär. 2023
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

Weitere Antworten (1)

Torsten
Torsten am 30 Mär. 2023
Verschoben: Torsten am 30 Mär. 2023
"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

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by