1
$\begingroup$

I generate a hypothetical dataset using the following equation

$$z=x+iy=\omega(\zeta)=\frac{1}{ \zeta}+\sum_{k=1}^N \alpha_k \zeta^k$$

In matrix form, the equation can then be written as $z = A\alpha$, or,

$$ \begin{bmatrix} z_1 \\ z_2 \\ \vdots \\ z_m \end{bmatrix} = \begin{bmatrix} \frac{1}{\zeta_1} & \zeta_1 & \zeta_1^2 & \cdots & \zeta_1^N \\ \frac{1}{\zeta_2} & \zeta_2 & \zeta_2^2 & \cdots & \zeta_2^N \\ \vdots & \vdots & \vdots & \ddots & \vdots\\ \frac{1}{\zeta_m} & \zeta_m & \zeta_m^2 & \cdots & \zeta_m^N \end{bmatrix} \begin{bmatrix} 1 \\ \alpha_1 \\ \alpha_2 \\ \vdots \\ \alpha_m \end{bmatrix} $$

For the current case, we will assume that $N=3$ and $\alpha_k=[0,-0.2,-0.01]$. And, $\zeta^k = e^{ik\theta}$ where $\theta = 0,\dots,2\pi$. Then, I used the following code to calculate $z$,

dumZ = 0;
sumdumZ = 0;
theta = linspace(0,2*pi,37);
xi = exp(1i.*theta);
for ii=1:length(theta)
  for jj=1:lma
      dumZ = ma(jj).*xi(ii).^jj;
      sumdumZ = sumdumZ + dumZ;
  end
  zcon(ii) = 1./xi(ii)+sumdumZ;
  dumZ = 0;
  sumdumZ = 0;
end

which will give me a profile as shown in the following figure, enter image description here

  • Now, using the hypothetical data above, i.e. the zcon, I want to back-calculate the variable $\alpha_k$.

  • To do this, I first created a matrix $A$. I have expanded the terms of matrix $A$ up to $370$ terms. The following code is used to generate the matrix $A$,

    lx = length(zcon); N = 10*37; A = zeros(lx,N); for ii=1:lx for jj=1:N A(ii,jj) = xi(ii).^jj; end end A=[1./xi' A];

Then $\alpha_k$ can be easily obtained using the following operation in Matlab,

maiter = A\zcon;

which gives me a $370 \times 1$ matrix. To validate this, I calculate the "predicted" $z$ using the following code:

 zdirect = A*maiter;

Which results an exactly the same curve as shown below,

enter image description here

QUESTION

Now, coming to my question. Instead of using a direct calculation as shown above, i.e. the code zdirect = A*maiter, I want to use summation to calculate z for each $\theta$. Somehow, I could not get it right and cannot find the mistake. Below is the code that I used to calculate $z$

dumZ = 0;
sumdumZ = 0;
for ii=1:length(theta)
   for jj=2:length(maiter)
      dumZ = maiter(jj).*xi(ii)^(jj-1);
      sumdumZ = sumdumZ + dumZ;
   end
   ziter(ii) = maiter(1)./xi(ii)+sumdumZ;
   dumZ = 0;
   sumdumZ = 0;
end

Instead, this is what I got

enter image description here

Can anyone please help me find the mistake in my Matlab code?

Can anyone show me where the mistake is?

I suspected this is due to the complex number operation in the summation code. But I could not find a good evidence to explain that.

Because, if I compare the real part of zcon and ziter the are the same, but the imaginary part are different.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.