Multiplying two vectors to form a matrix

Hello, I have two vectors x and y, both 601x1. I want to multiply them to form a matrix of 601x601, but the values inside the matrix have to be sqrt(x^2+y^2). How do I do this? Thanks.

 Accepted Answer

Jan
Jan on 25 Feb 2022
Edited: Jan on 25 Feb 2022
z = sqrt(x .^ 2 + y.' .^ 2)
But, of course, this does not match "multiply them". If you want a multiplication:
x .* y.'
[EDITED] For Matlab versions < R2016b:
z = sqrt(bsxfun(@plus, x.'.^2, y.^2))

2 Comments

Multiplication is not the right word, I agree. I've tried this and all I got is "Error using plus, Matrix dimensions must agree.".
See my comment under Walter's answer.

Sign in to comment.

More Answers (2)

x = rand(601,1) ;
y = rand(601,1) ;
iwant = sqrt(x.^2+y'.^2) ;
size(iwant)
ans = 1×2
601 601
D = sqrt(x.'.^2 + y.^2)

4 Comments

The difference between my answer and the nearly-simultaneous answers by @KSSV and @Jan is that I arranged for the x coordinates to run horizontally but they have the x coordinates run vertically.
I've tried this and all I got is "Error using plus, Matrix dimensions must agree.".
@Nikola Segedin: Which Matlab versionare you using? Since R2016b an "implicit expanding" is applied. For former versions:
D = sqrt(bsxfun(@plus, x.'.^2, y.^2))
I'm using R2010b. Thank you, this works for me!

Sign in to comment.

Products

Release

R2010b

Asked:

on 25 Feb 2022

Edited:

Jan
on 25 Feb 2022

Community Treasure Hunt

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

Start Hunting!