RE: Units

• To: mathgroup at smc.vnet.net
• Subject: [mg23802] RE: [mg23718] Units
• From: "David Park" <djmp at earthlink.net>
• Date: Sat, 10 Jun 2000 03:00:01 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```
> -----Original Message-----
> From: Enrique Cao [mailto:cao at mundo-r.com]
To: mathgroup at smc.vnet.net
>
> Hi:
>
> I need help in order  to solve this problem.
>
> I have the vector aceleration {3 t Meter/Second^2,t^2 Meter/Second^2}.
> This is a vector dependent of time (t).
>
> I want to get the  position vector with initial conditions {x[0]==2
> Meter,y[0]==5 Meter,x'[1]==2 Meter/Second,y'[1]==3
> Meter/Second}.
>
> I do this with the follow  expression:
>
> << Miscellaneous`Units`
>
> << Miscellaneous`SIUnits`
>
> DSolve[{x''[t]==3 t Meter/Second^2,y''[t]==t^2 Meter/Second^2,
> x[0]==2 Meter,y[0]==5 Meter,x'[1]==2 =
> Meter/Second,y'[1]==3 Meter/Second },{x[t],y[t]},t]
>
> The solution is
>
> {x[t]->(Meter(4 Second^2+ 8 Second t +t^3 ))/(2 Second^2),
>
> y[t]->Mter(3+(6 t)/Second+t^4/(12 Second^2))}
>
> The unit of position is Meter but the  solution is not correct.
>
> How can I get the correct solution ??
>
> Thank you very much
>
>     Henrique
>
> cao at mundo-r.com
>

Enrique,

The two differential equations are independent, so to keep things shorter
let's just deal with the first equation. You take t to be unitless, but you
want x to have units. Working backwards let's see what happens with that
kind of construction.

x[t_] := t^2*Meter

{x'[t], x''[t]}
{2 Meter t, 2 Meter}

The units are not correct because we have thrown away the units of t. We
really want something like x[t Second], so lets put s == t Second and, of
course, t == s/Second. Then...

x[s_] := (s/Second)^2*Meter

{x'[t Second], x''[t Second]}
{(2*Meter*t)/Second, (2*Meter)/Second^2}

The units are now correct, so let's do the differential equation the same
way, in terms of s instead of t.

Clear[x];
dsol = DSolve[{x''[s] == 3*s/Second*Meter/Second^2,
x'[0] == Meter/Second, x[0] == 2*Meter}, x[s], s][[1,1]]

x[s] -> 2*Meter + (Meter*s^3)/(2*Second^3) + (Meter*s)/Second

We can now define x[s] by:

x[s_] = x[s] /. dsol
2*Meter + (Meter*s^3)/(2*Second^3) + (Meter*s)/Second

Then...

{x[t Second], x'[t Second], x''[t Second]}
% /. t -> 3

{2*Meter + Meter*t + (Meter*t^3)/2, Meter/Second + (3*Meter*t^2)/(2*Second),
(3*Meter*t)/Second^2}

{(37*Meter)/2, (29*Meter)/(2*Second), (9*Meter)/Second^2}

and everything has the correct units.

However, I believe that a far better and more easily understood approach for
unit problems is to put all the units in the data, and not put any explicit
units in the equations. So, doing the same problem by this method, I would
define the data as:

data = {k -> 3*Meter/Second^3, v0 -> Meter/Second, x0 -> 2*Meter};

Clear[x];
dsol = DSolve[{x''[t] == k*t, x'[0] == v0,
x[0] == x0}, x[t], t][[1,1]]

x[t] -> (k*t^3)/6 + t*v0 + x0

Define the function.

x[t_] = x[t] /. dsol
(k*t^3)/6 + t*v0 + x0

Then, just substitute the data into any expression that you want.

{x[3 Second], x'[3 Second], x''[3 Second]} /. data
{(37*Meter)/2, (29*Meter)/(2*Second), (9*Meter)/Second^2}

There is an ExtendUnits package at my web site below, which contains many
routines which facilitate the use of units.

David Park