       Re: Re: Re: Re: bode diagram

• To: mathgroup at smc.vnet.net
• Subject: [mg57087] Re: [mg57075] Re: [mg57040] Re: [mg57016] Re: [mg56979] bode diagram
• From: "David Park" <djmp at earthlink.net>
• Date: Sun, 15 May 2005 03:03:40 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```There is a problem with the LogLinearPlot routine in that it does not
properly sample the points of the curve. It uses linear sampling instead of
logarthmic sampling. Thus with the following example...

Needs["Graphics`Graphics`"]
Needs["Graphics`Colors`"]

SetOptions[LogLinearPlot, PlotStyle ->
{Red, Blue}, PlotRange -> All,
ImageSize -> 500];
db = 20*Log[10, Abs[#1]] & ;

h[s_] = (100*s + 100)/(s^2 + 110*s + 1000);
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-2), 10^4}];

The algorithm used only two points between 0.01 and 10. Thus the first parts
of the curves are straight lines and are incorrect. Increasing the plot
points may help some, but it is working against the grain.

The following is a solution. Don't use LogLinearPlot at all.

logstep[f_][z_] := f[10^z]

Clear[db, phase]
db[h_][s_] := 20*Log[10, Abs[h[s]]]
phase[h_][s_] := Arg[h[I*s]]*(180/Pi)

h[s_] = (100*s + 100)/(s^2 + 110*s + 1000);
Plot[{logstep[db[h]][s], logstep[phase[h]][s]},
{s, -2, 3},
PlotStyle -> {Red, Blue},
FrameTicks -> {LogScale, Automatic, None, None},
Frame -> True,
Axes -> None,
ImageSize -> 450];

Now the curves are depicted correctly between 0.01 and 10.

The Log Plots example in the Help for the DrawGraphics package (from my web
site) illustrates this in more detail and actually displays the points that
Mathematica used in its rendering of a curve.

David Park

From: DrBob [mailto:drbob at bigfoot.com]
To: mathgroup at smc.vnet.net

I used the code below for each example at the link:

http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeRules.html#Examples

In several cases I got what appears to be the same result as pictured at the
link, but in other cases I got very different plots. The fourth example is
particularly strange. Am I doing this wrong?

I'm plotting magnitude and phase on a single plot in each case, and I'm ONLY
plotting the exact curves -- assuming I have the right formulae for them. I
see no point in approximate plotting techniques, with exact plots readily
available.

Needs["Graphics`Graphics`"]
SetOptions[LogLinearPlot, PlotStyle ->
{Red, Blue}, PlotRange -> All,
ImageSize -> 500];
db = 20*Log[10, Abs[#1]] & ;

Clear[h]
h[s_] = 100/(s + 20);
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 1, 10^3}];

h[s_] = (100*s + 100)/(s^2 + 110*s + 1000);
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-2), 10^4}];

h[s_] = 10*((s + 10)/(s^2 + 3*s));
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-1), 10^3}];

h[s_] = (-100*s)/(s^3 + 12*s^2 + 21*s + 10);
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-2), 10^3}];

h[s_] = 30*((s + 10)/(s^2 + 3*s + 50));
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-1), 10^3}];

h[s_] = 4*((s^2 + s + 25)/(s^3 + 100*s^2));
LogLinearPlot[{db[h[s]], Arg[h[I*s]]*(180/Pi)},
{s, 10^(-1), 10^3}];

Bobby

From: Pratik Desai <pdesai1 at umbc.edu>
To: mathgroup at smc.vnet.net
References: <200505120633.CAA08967 at smc.vnet.net>

David Park wrote:

> I'm fairly certain it could be done with Mathematica if you would only
tell
> us what a bode diagram is and give us some sample data of function that
you
> want to plot in the diagram.
>
> David Park
>
> From: GaLoIs [mailto:lanellomancante at inwind.it]
To: mathgroup at smc.vnet.net
>
>
> hi, like plotting simple bode diagrams of systems. could you give me some
> information about it? i can do it with another program, but i'd like to
see
> how mathematica works
> thank you
>
>
>
>
>
>
>
Here is a nice example from a website I found.

*http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/Bode.html*

--
DrBob at bigfoot.com

```

• Prev by Date: Re: Re: Re: Re: bode diagram
• Next by Date: Re: Re: DSolve and K\$31, i am puzzled
• Previous by thread: Re: bode diagram
• Next by thread: Re: bode diagram