How can I get multiple values from arrayfun?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Chang seok Ma
il 8 Nov 2021
Risposto: Walter Roberson
il 8 Nov 2021
I have the following sample code.
clear
clc
a = 1:1000;
b = linspace(100,200,1000);
x1 = arrayfun( @(v,w) fminsearch(@(x) (x(1)-v).^2 + (x(2)-w).^2, [1;1]), a, b, 'UniformOutput', false);
So basically, I would like to get x(1) x(2) that minimizes the objective function given a and b.
and x1 returns 1*1000 cells and each of the cells gives me the minimizer.
However, I want to get 21000 double instead of 11000 cells.
Is there any way I can get x1 as 2*1000?
Thanks in advance.
0 Commenti
Risposta accettata
Stephen23
il 8 Nov 2021
Modificato: Stephen23
il 8 Nov 2021
"However, I want to get 21000 double instead of 11000 cells. Is there any way I can get x1 as 2*1000?"
Of course, just use a comma-separated list to concatenate the cell array contents together:
a = 1:1000;
b = linspace(100,200,1000);
fnh = @(v,w) fminsearch(@(x) (x(1)-v).^2 + (x(2)-w).^2, [1;1]);
x1 = arrayfun(fnh, a, b, 'UniformOutput', false);
x1 = [x1{:}] % comma-separated list
0 Commenti
Più risposte (2)
Yusuf Suer Erdem
il 8 Nov 2021
clear
clc
a = 1:1000;
b = linspace(100,200,1000);
x1 = arrayfun( @(v,w) fminsearch(@(x) (x(1)-v).^2 + (x(2)-w).^2, [1;1]), a, b, 'UniformOutput', false);
x2 = reshape(x1,2,500);
Try this way, as you see matrix x2 is the same matrix as x1 but in different dimensions. I hope it helps!
0 Commenti
Walter Roberson
il 8 Nov 2021
a = 1:1000;
b = linspace(100,200,1000);
x1 = cell2mat(arrayfun( @(v,w) fminsearch(@(x) (x(1)-v).^2 + (x(2)-w).^2, [1;1]), a, b, 'UniformOutput', false));
size(x1)
0 Commenti
Vedere anche
Categorie
Scopri di più su Structures in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!