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 djmp at earthlink.net http://home.earthlink.net/~djmp/ 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 > djmp at earthlink.net > http://home.earthlink.net/~djmp/ > > 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