Given 2 vectors X,Y both of length N, How do I act on every single term in X with every single term in Y into a N by N matrix?

1 view (last 30 days)
Just to make myself clear, assuming X = [1 2 3], Y = [1 2 3] and that I want to act with 'exp'
I want to create a matrix Z = [exp(1+1) exp(1+2) exp(1+3) ; exp(2+10 exp(2+2) exp(2+3) ; exp(3+1) exp(3+2) exp(3+3)]
I know I can run a simple for loop, but How do I make it simple using matlab matrix/vectors notation? Thanks

Accepted Answer

Stephen23
Stephen23 on 30 May 2016
Edited: Stephen23 on 30 May 2016
>> X = [1,2,3]; Y = [1,2,3];
>> exp(bsxfun(@plus,X.',Y))
ans =
7.3891 20.0855 54.5982
20.0855 54.5982 148.4132
54.5982 148.4132 403.4288
Or
>> [Xm,Ym] = ndgrid(X,Y);
>> exp(Xm+Ym)
ans =
7.3891 20.0855 54.5982
20.0855 54.5982 148.4132
54.5982 148.4132 403.4288

More Answers (1)

Torsten
Torsten on 30 May 2016
Z=exp(X).'*exp(Y)
Best wishes
Torsten.

Community Treasure Hunt

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

Start Hunting!