How to determine the size of an array of functions??
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Timothy Corley
am 27 Nov. 2017
Kommentiert: Timothy Corley
am 27 Nov. 2017
F = @(x1,x2) [(4*x1^2-20*x1+x2^2/4+8) ; (x1*x2/2+2*x1-5*x2+8)]
J = @(x1,x2) [(8*x1-20) (x2/2) ; (x2/2+2) (x1/5-5)]
x0 = [ 1 2 3 4 ];
tol = 10^-5;
A = nargin(F);
B = nargin(J);
I would like to find the size of F & J because i will use those as inputs to my function and they will not be known. Something like:
[C D]=size(F)
[G H]=size(J)
would be excellent if it worked. At first I thought matlab didn't like doing the anonymous matrix thing I'm trying, but it evaluates the functions just fine if given an input like:
F(0,0)
will output:
[8 ; 8]
as it should.
So i tried evaluating the functions with 'A' and 'B' number of zeros, but didn't have much luck in figuring that out as an array is not what the functions input.
Any help would be greatly appreciated!
3 Kommentare
Akzeptierte Antwort
Stephen23
am 27 Nov. 2017
Bearbeitet: Stephen23
am 27 Nov. 2017
There is no general solution because the size of the output can depend on the inputs. Consider:
>> fun = @(x)x+2;
>> fun(1)
ans = 3
>> fun(1:5)
ans =
3 4 5 6 7
>> foo = @(x)zeros(1,x);
>> foo(2)
ans =
0 0
>> foo(7)
ans =
0 0 0 0 0 0 0
Even then it will only return the size for those given inputs. Consider:
>> baz = @(x,y)[x;y];
>> baz(3,2)
ans =
3
2
>> baz(3:6,2:5)
ans =
3 4 5 6
2 3 4 5
>> baz([1;2;3],4)
ans =
1
2
3
4
What size would you describe baz as returning?
The only robust solution is to call the functions with the inputs of the required size and measure the output size:
>> J = @(x1,x2) [(8*x1-20) (x2/2) ; (x2/2+2) (x1/5-5)];
>> size(J(0,0))
ans =
2 2
>> size(J(1:3,1:3))
ans =
2 6
Note how the size of the output from your function depends on the inputs!
3 Kommentare
Stephen23
am 27 Nov. 2017
Bearbeitet: Stephen23
am 27 Nov. 2017
>> F = @(x1,x2) [(4*x1^2-20*x1+x2^2/4+8) ; (x1*x2/2+2*x1-5*x2+8)];
>> C = repmat({0},1,nargin(F));
>> size(F(C{:}))
ans =
2 1
and
>> J = @(x1,x2) [(8*x1-20) (x2/2) ; (x2/2+2) (x1/5-5)];
>> C = repmat({0},1,nargin(J));
>> size(J(C{:}))
ans =
2 2
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical 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!