Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Vectorization and a strange result

조회 수: 2 (최근 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