Taking in a function as an argument
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Jakob Grunditz
am 8 Nov. 2019
Kommentiert: Jakob Grunditz
am 8 Nov. 2019
I'm trying to make a function which takes in a function and then uses it. Right now my code looks like this:
function out = func(inputfunc, constant1, constant2)
inputfuncval1 = inputfunc(constant1);
...code...
end
When I then try to call it with a function like this:
out = func(@(x) testfunc(x),x1 ,x2);
It interpretets my input as an array instead of a function.
Anyone got any ideas on how to solve this issue?
2 Kommentare
Guillaume
am 8 Nov. 2019
Can you give us the full text of the error you see. The code you show should work although
out = func(@testfunc, x1, x2);
would be simpler.
Akzeptierte Antwort
Guillaume
am 8 Nov. 2019
Seems clear enough:
Error in bisekt (line 14)
bisekt(m, x2)
Within bisekt, you call the function again, this time with input m which is a scalar value, not a function, and only one argument. So, the input f is then your m scalar, and of course, m(x2) is going to fail if x2 is anything but 1.
Perhaps, the call should be:
bisekt(f, m, x2);
same for the other recursions...
Weitere Antworten (1)
M
am 8 Nov. 2019
How is testfunc defined ?
Here is a simple working example:
function out = func(inputfunc, constant1, constant2)
out = inputfunc(constant1, constant2);
end
out = func(@(x,y) x+y,1,2)
out =
3
2 Kommentare
Guillaume
am 8 Nov. 2019
As I commented in your question, if the above doesn't work, give us the full text of the error message.
With the following function:
function out = func(inputfunc, constant1, constant2)
out(1) = inputfunc(constant1);
out(2) = inputfunc(constant2);
end
I get:
>> out = func(@(x) exp(x)+x^2-1, 1, 2)
out =
2.71828182845905 10.3890560989307
No problem there.
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!