Group Abstract Group Abstract

Message Boards Message Boards

0
|
16.8K Views
|
15 Replies
|
2 Total Likes
View groups...
Share
Share this post:

Define functions for variables with units?

Units are important in engineering and science, so I need to get my students to be religious about using them. I provide answers to homework and exams using Mathematica. Incorporating units in simple computations is relatively easy, but I have difficulty in using units with functions. For example how do I define a function

d[t_]:=10*t^2 + 5*t+25

where the units of t are seconds? In subsequent calls of the function, do I need to use the Quantity notation for every specific numeric value of t?

Attachments:
POSTED BY: Orest Gogosha
15 Replies

Might the problem be that the head of the variable x in your expression sol:=.... is "Symbol"? Do you need to give it a numeric value? As suggested previously, you might get better insight as to what's going wrong if you develop and evaluate the code line-by-line with each line in a separate cell.

POSTED BY: Ian Williams

The recursive call was a typo. Things continue to evolve. If you have time, take a look. I may have hit a limitation on what some of the Solve functions can do. This NSolve works fine without units.

Attachments:
POSTED BY: Orest Gogosha
POSTED BY: Ian Williams

Thanks. It can get pretty confusing.

GOGO

POSTED BY: Orest Gogosha

Here we go again! For some reason in the definition of velocity time is getting the units of s^2.

I figured it out.

Attachments:
POSTED BY: Orest Gogosha
POSTED BY: Ian Williams

That works! Thank you! Is there anywhere in the documentation I can find all this?

GOGO

POSTED BY: Orest Gogosha

Try adjusting the arguments passed to your Plot function to this...

Plot[z[Quantity[t,”Seconds”]],{t,0,10}]

All the best,

Ian

POSTED BY: Ian Williams

Try this...

enter image description here

A notebook is also attached.

Here I've evaluated the Quantity[...] functions in place as I think it makes documents more readable. On a Mac, this is done by selecting the part of the expression you want to evaluate in place and pressing CMD-SHIFT-ENTER. Once evaluated, you can click into the Quantity panel and edit the numeric value. Alternatively, you can get a plain unit (without a value) by using the expression Quantity[None,"Unitname"]. Using this approach you can keep the quantity value outside the quantity panel. An example is given at the end of the attached notebook.

Hope this helps,

Ian

Attachments:
POSTED BY: Ian Williams
Attachments:
POSTED BY: Orest Gogosha

Try this...

enter image description here

A notebook is also attached.

Here I've evaluated the Quantity[...] functions in place as I think it makes documents more readable. On a Mac, this is done by selecting the part of the expression you want to evaluate in place and pressing CMD-SHIFT-ENTER. Once evaluated, you can click into the Quantity panel and edit the numeric value. Alternatively, you can get a plain unit (without a value) by using the expression Quantity[None,"Unitname"]. Using this approach you can keep the quantity value outside the quantity panel. An example is given at the end of the attached notebook.

Hope this helps,

Ian

Attachments:
POSTED BY: Ian Williams

Thank you!

GOGO

POSTED BY: Orest Gogosha

Belated "Thank You." This has been very useful in evaluating functions but I don't have enough knowledge of Mathematica to extend it to other uses. For example when I try:

Plot[d[t], {t, Quantity[0, "Seconds"], Quantity[10, "Seconds"]}]

I get axes but no plot. Is there a part of the documentation I should read?

GOGO

POSTED BY: Orest Gogosha

You could limit your function to only accept units of time:

ClearAll[d]
d[t : Quantity[_, unit_]?(CompatibleUnitQ[#, "Seconds"] &)] := 10*t^2
d[Quantity[5, "Seconds"]]

or, similarly, one could use UnitDimensions to check if the input has time-dimensions... Of course the 'variables' 10, 5, and 25 in your equation should have commensurate dimensions...

POSTED BY: Sander Huisman

You mean something like this?

d[t_]:=
    Quantity[20,"Meters"/"Seconds"^2]t^2/2+
    Quantity[5,"Meters"/"Seconds"]t+
    Quantity[25,"Meters"]

In[1]:= d[Quantity[13, "Seconds"]]
Out[1]= Quantity[1780, "Meters"]

In notebook it will look like:

enter image description here

POSTED BY: Sam Carrettie
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard