Filter löschen
Filter löschen

How to vectorize the following piece of code by removing the two for loops?

2 Ansichten (letzte 30 Tage)
clear all;clc
u=[3 4 30 50];% Desired Vector
b=u;
[R,C]=size(b);
P=C/2;
M=2*C;
xo=zeros(1,M);
for k=1:M
for i=1:P
xo(1,k)=xo(1,k)+1*exp(1i*((k-1)*(-pi/2)*sind(u(P+i))+((k-1)^2*pi/(16*u(i)))*cosd(u(P+i))^2));
end
end
xe=zeros(1,M);
for k=1:M
for i=1:P
xe(1,k)=xe(1,k)+1*exp(1i*((k-1)*(-pi/2)*sind(b(P+i))+((k-1)^2*pi/(16*b(i)))*cosd(b(P+i))^2));
end
end
%%%%%%%%%%%%%%%%%%
% MSE
%%%%%%%%%%%%%%%%%%
e=norm(xo-xe).^2/(M);

Akzeptierte Antwort

Torsten
Torsten am 17 Dez. 2023
Bearbeitet: Torsten am 17 Dez. 2023
clear all;clc
u=[3 4 30 50];% Desired Vector
b=u;
[R,C]=size(b);
P=C/2;
M=2*C;
k = (1:M).';
i = (1:P);
xo = sum(1*exp(1i*((k-1).*(-pi/2).*sind(b(P+i))+((k-1).^2.*pi./(16*b(i))).*cosd(b(P+i)).^2)),2)
xo =
2.0000 + 0.0000i 1.1191 - 1.5973i -0.4900 - 1.7093i -1.2963 - 0.6596i -0.9289 + 0.2680i -0.1887 + 0.2713i -0.0020 - 0.4001i -0.5868 - 0.9602i
xe = sum(1*exp(1i*((k-1).*(-pi/2).*sind(b(P+i))+((k-1).^2.*pi./(16*b(i))).*cosd(b(P+i)).^2)),2)
xe =
2.0000 + 0.0000i 1.1191 - 1.5973i -0.4900 - 1.7093i -1.2963 - 0.6596i -0.9289 + 0.2680i -0.1887 + 0.2713i -0.0020 - 0.4001i -0.5868 - 0.9602i
%%%%%%%%%%%%%%%%%%
% MSE
%%%%%%%%%%%%%%%%%%
e=norm(xo-xe).^2/(M)
e = 0

Weitere Antworten (0)

Kategorien

Mehr zu Data Exploration finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by