Re: plotting equations with units
- To: mathgroup at smc.vnet.net
- Subject: [mg80796] Re: plotting equations with units
- From: "David Park" <djmpark at comcast.net>
- Date: Sun, 2 Sep 2007 02:51:21 -0400 (EDT)
- References: <fbaqpi$qbs$1@smc.twtelecom.net>
You don't show your particular case, but the simplist method for you might be to write a set of rules that set the particular units you have to 1. For a more general method for handling this I would like to refer you to the ExtendUnits package from my web site. (I'm selling the package for $30.) Here is the approach I take. First, I never put units into an equation or symboic definition. Units are part of the data. Here is an example. First the symbolic definition and then the data. Needs["Units6`ExtendUnits6`"] x[x0_, v0_, a_][t_] := x0 + v0 t + 1/2 a t^2 data = {x0 -> 3 Feet, v0 -> 2 Yard/Second, a -> 5 Meter/Second^2}; Then we can define a plotting function using the Deunitize command in ExtendUnits6. The implied units will be in SI, so t will be in Seconds and the output will be in Meters. It is also possible to specify implied MKS or GCS units. xplot[t_] = Deunitize[x[x0, v0, a][t] /. data, {t}] giving: 1143/1250 + (1143 t)/625 + (5 t^2)/2 Plot[xplot[t], {t, 0, 5}, Frame -> True, FrameLabel -> {"t Seconds", "x Meters"}] There is also a more general routine, DeunitizeWithReference. It allows us to give specific implied input and output units. Here is a variation of the same case. Clear[x]; x[t_, x0_, v0_, a_] := x0 + v0 t + 1/2 a t^2 Here we specify a deunitized expression where t is given in Minutes, v0 is given in Yards/Second and the output will be in Furlongs. x0 and a are given explicit values. The routine checks that the specified implied units are consistent and it prints a reference expression with the units in it. Clear[xplot]; xplot[v0_][t_]=DeunitizeWithReference[x[t Minute, 3 Meter, v0 Yard/Second, 5Meter/Second^2],{t,v0},Furlong] (I omit the reference equation because it doesn't copy and paste neatly.) giving: (125 (3 + 9000 t^2 + (6858 t v0)/125))/25146 Here is a plot for v0 = 0 and 100 Yards/Second. Plot[{xplot[0][t], xplot[100][t]}, {t, 0, 5}, Frame -> True, FrameLabel -> {"t Minutes", "x Furlongs"}] The package also has the capability of setting up reduced units where certain physical constants are set equal to 1 (such as geometric units or atomic units) and that is another method for obtaining expressions without explicit units. -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ "phillman5" <PHILLMAN5 at gmail.com> wrote in message news:fbaqpi$qbs$1 at smc.twtelecom.net... > If you have loaded the units package and have used units in your > equations, is there an easy way to plot the equations? For the y data > you can easily divide by the 'units' to get a unitless number > > Plot[eq/units,{x, start,end}] > > but what about the x values? If they have units, the plot functions > croaks. I suppose you can always make a table and use listplot, but > there should be an easier way. I have seen some people here with > packages to download, is there a consensus on the best third part > solution. I'd like a universal solution that would work with other > plotting functions too. > > I am using version 6. > >