Insert multidimensional array into function handle

8 vues (au cours des 30 derniers jours)
Sinipelto
Sinipelto le 23 Mar 2021
Commenté : Sinipelto le 23 Mar 2021
Hi,
I'm trying to solve a symbolic var from a function f(x,y), that should take pairs (x,y) as input.
However, MATLAB does not accept the array as input to a function handle to calculate them as a result array.
My code:
syms c
o = [ c 0 0; c 0 2; c 1 1; c 1 2; c 2 2; c 2 3; c 3 0; c 3 1; c 3 2; c 3 3 ]
f = @(c,x,y) c*(x+y)
eq = sum(arrayfun(f, o)) == 1 % ERROR FROM arrayfun() -> doesnt understand the multidim array input
solve(eq, c)
Gives this error:
"Not enough input arguments.
Error in @(c,x,y)c*(x+y)".
Thanks in advance!

Réponse acceptée

Steven Lord
Steven Lord le 23 Mar 2021
syms c
o = [ c 0 0; c 0 2; c 1 1; c 1 2; c 2 2; c 2 3; c 3 0; c 3 1; c 3 2; c 3 3 ];
f = @(c,x,y) c.*(x+y); % Use element-wise multiplication
V = f(o(:, 1), o(:, 2), o(:, 3))
V = 
solve(sum(V) == 1, c)
ans = 
  1 commentaire
Sinipelto
Sinipelto le 23 Mar 2021
Thank you, this is more elegant solution I was trying to achieve first.

Connectez-vous pour commenter.

Plus de réponses (1)

Sinipelto
Sinipelto le 23 Mar 2021
I solved this myself.
The arrayfun(..) can take multiple arrays as inputs. Thus, I had to split up the arrays to individual single dimensional arrays and then pass all of them into the function, like this:
syms c
oc = [ c c c c c c c c c c ]
ox = [ 0 0 1 1 2 2 3 3 3 3 ]
oy = [ 0 2 1 2 2 3 0 1 2 3 ]
f = @(c,x,y) c*(x+y)
eq = sum(arrayfun(f, oc, ox, oy)) == 1
solve(eq, c)
And we get: ans = 1/34.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by