plot complex data

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

plot complex data

Ted.Harding

> Date: Sat, 21 May 1994 17:13:50 -0700 (PDT)
> From: John Utz <[hidden email]>
> Subject: plot blues
>
> Can anybody tell me what I am doing wrong here?:
> octave:5> plot (fft(real(cos(0:1:16))))
>
> gnuplot> plot "/var/tmp/tmp.d19569" title "line 1"
>                                     ^
>          line 0: bad data on line 4
----------------------------------------------------------------------------
> Date: Sat, 21 May 1994 21:33:08 -0400
> From: [hidden email] (L Jonas Olsson)
>
> You can try:
>
> plot([imag(fft(real(cos(0:1:16)))); real(fft(real(cos(0:1:16))))]')
>
> Not very elegant, but works.
----------------------------------------------------------------------------
Actually, the real problem is a bug in plot_int.m
Try (A):
  X=(cos(0:16) + i*sin(0:16))'; plot(X)  --> "bad data in line 4"
But (B):
  X=(cos(1:16) + i*sin(1:16))'; plot(X)  --> Nice Plot! (x=Re, y=Im)
The reason is that in plot_int(x1,x2) the args are tested for real/complex
by "if imag(x1)" and the like. If ANY component of imag(x1)=0, test fails.
Hence (A) fails because sin(0)=0, but (B) works because no sin(1:16)=0.
PATCH: change the following in plot_int.m:
  if (x1_i)       --->       if any(x1_i)
  if (imag (x1))  --->       if any(imag (x1))
  if (imag (x2))  --->       if any(imag (x2))
and it works. Actually
  plot(fft(cos(0:1:16)))
now looks rather pretty!.

Though this fixes this particular problem, the whole matter of octave "plot"
and its interface with gnuplot needs sorting out. There are other problems.
One is to do with the fact that, though gnuplot can calculate complex
expressions, it doesn't seem able to handle them for plotting.
E.g (in gnuplot)
    j={0,1}      (gnuplot's version of 0+1i)
    plot [0:16] cos(x) + j*sin(x)               [try it]
doesn't work, while
    plot [0:16] real(cos(x)+j*sin(x)), imag(cos(x)+j*sin(x))
does.
Nor does gnuplot seem able to _read_ complex data: if "datafile" contains
{x1,y1}
{x2,y2}
...
you don't seem to be able to do anything sensible with it. Not that it
would matter, in octave, if you could, because when _octave_ sends
complex data to gnuplot the tmp/ datafile is in the format
(x1,y1)
(x2,y2)
...
which is NOT gnuplot complex number format (and is the immediate source
of the "bad data on line 4" messages). There are other problems too.
I'm looking into these, and will post any useful findings.
Ted Harding                                   [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: plot complex data

John Eaton-4
Ted Harding <[hidden email]> wrote:

: Actually, the real problem is a bug in plot_int.m

Thanks.  I've fixed this in my sources.

: Though this fixes this particular problem, the whole matter of
: octave "plot" and its interface with gnuplot needs sorting
: out. There are other problems.

Please send bug reports for any other problems you find.

Thanks,

jwe