Help with Coding problem
Show older comments
I am trying to code the following in matlab.
<<

Following is my matlab code. But this doesn't give me the right result. Can somebody point out what am I doing wrong?
function [J] = funtc(x_t,c_mn,theta,M,N )
L = length(x_t );
l = 0:L-1;
m = 0:M-1;
n = 0:N-1;
J = 0 ;
for t = 1:L
xs = 0 ;
xp = 0 ;
for j = 1: length(n)
for k = 1: length(m)
xs = xs + c_mn(k,j)*exp(-pi*(l(t)-n(j))^2/theta^2)*exp(1i*2*pi*m(k)*(l(t)- n(j))/M);
xp = xp + c_mn(k,j)*exp(-pi*(l(t)-n(j))^2/theta^2)*exp(1i*2*pi*m(k)*(l(t)- n(j))/M)*(l(t)-n(j))^2/theta^3;
end
end
J = J + ((x_t (t) -xs) * conj (xp));
end
J = real(-4*J);
end
7 Comments
Geoff Hayes
on 5 Jul 2018
christina - in your code you consider
c_mn(m,n)
but aren't m and n arrays? Is this intentional? Or do you want to consider
c_mn(m(k),n(j))
instead?
Geoff Hayes
on 5 Jul 2018
Does that lead to a better (correct) solution?
christina
on 6 Jul 2018
Geoff Hayes
on 6 Jul 2018
I would try removing your arrays for n and m as I don't think they make the code easier to follow. Then your two inner loops would become simply
for n=0:N-1
for m=0:M-1
% etc.
end
end
Your first sum would (I think) be more like
for t = 0:L-1
xs = 0 ;
xp = 0 ;
for n = 0:N-1
for m = 0:M-1
xs = xs + c_mn(m+1,n+1) * exp(-(t - n)/theta) * exp(1i * 2 * pi * m * (t - n) / M);
xp = xp + c_mn(m+1,n+1) * exp(-(t - n)/theta) * exp(1i * 2 * pi * m * (t - n) / M) * (((t - n)^2) / theta^3);
end
end
% J = J + ...;
end
I'm assuming your theta input is the sigma in the equation. The above looks a little different than what you have so I'm not sure if it is better or worse.
I don't understand where the (1/sqrt(theta)) or a comes from (in your code). Or why a conjugate is used in the update to J...
christina
on 9 Jul 2018
Geoff Hayes
on 9 Jul 2018
But why just use conj on the one sum and not both?
Answers (1)
Abraham Boayue
on 10 Jul 2018
Edited: Abraham Boayue
on 10 Jul 2018
Try this
function [J] = funtc(x_t,c,theta,M,N,L)
J = zeros(1,L);
for t = 1:L
xs = 0 ;
xp = 0 ;
for n = 1: N
for m = 1: M
xs = xs + c(n,m)*exp(-pi*((t-n)./theta)).^2*exp(1i*2*pi*m*(t- n)/M);
xp = xp + c(n,m)*exp(-pi*((t-n)./theta).^2)*exp(1i*2*pi*m*(t- n)/M)*(t-n)^2./theta.^3;
end
end
J = J + ((x_t (t) -xs).*conj (xp));
end
J = -4*real(J);
end
I tested this function using the mfile below.
L = 20;
N = 10;
M = 5;
c =round(10*rand(N,M));
theta0 = 0.96;
x0 = 4;
theta = 0:theta0/(L-1):theta0;
x_t = 0:x0/(L-1):x0;
J = funtc(x_t,c,theta,M,N ,L);
plot(theta,J);
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!