Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Vectorization and a strange result

1 回表示 (過去 30 日間)
Maria
Maria 2020 年 10 月 14 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
Hi,
I am struggling since few hours with a vectorized operation.
I have some vector quantities, and I wanted to vectorize. I put in the attachment a .mat file.
For testing, I compute the fx1 and fx_1 in this way
fx1 = const_1 .* exp(-1j.*beta(1:2)'.*const_2)./const_2 .* t;
fx_1 = const_1 .* exp(-1j.*beta(1)*const_2)./const_2 .* t;
where beta is a vector. I would expect that the first row of fx1 and fx_1 coincide, but they don't. I am very confused what I am missing here. Ideally, I would like to do this
fx1 = const_1 .* exp(-1j.*beta'.*const_2)./const_2 .* t;
instead of multiplying in a for loop for each beta(i).

回答 (1 件)

Star Strider
Star Strider 2020 年 10 月 14 日
Your ‘mytest.mat’ file contains:
fx_1: [1×150 double]
beta: [1×25 double]
t: [1×150 double]
const_1: [1×150 double]
const_2: [1×150 double]
fx1: [2×150 double]
It would help to know what you want to do with those vectors and the ‘fx1’ matrix. That is not obvious from the code you posted.
  4 件のコメント
Maria
Maria 2020 年 10 月 14 日
編集済み: Maria 2020 年 10 月 14 日
I see that you are plotting fx1. But, if I am doing it right, the fx1 is still different than the fx computed in the for loop. In your result, do you see them equal? I double check with isequal
D = load('mytest.mat');
beta = D.beta;
t = D.t;
const_1 = D.const_1;
const_2 = D.const_2;
fx1 = const_1 .* exp(-1j.*beta'.*const_2)./const_2 .* t;
fx = zeros(length(beta),150);
for i = 1 : length(beta)
fx(i,:) = const_1 .* exp(-1j.*beta(i).*const_2)./const_2 .* t;
end
isequal(fx,fx1)
Star Strider
Star Strider 2020 年 10 月 15 日
You are computing ‘fx’ differently in the looop than in the vectorised calculation.
If you plot them:
for i = 1 : length(beta)
fx(i,:) = const_1 .* exp(-1j.*beta(i).*const_2)./const_2 .* t;
end
figure
mesh(abs(fx))
set(gca, 'ZScale','log')
xlabel('t')
ylabel('\beta (index)') % ‘beta’ Is Complex, So Plotting The Index Values
zlabel('|fx1|')
you will see that they are essentially just mirror-images of each other with respect to the z-axis. The magnitudes are of courrse different, the vectorised approach goes from to , and the loop goes from to . Chioose whatever version makes sense in the context of what you want to do. I have no idea what that is.
I would use the fully-vectorised approach (in my code), since to me that makes more sense.

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by