* Unit conversions and symbolic mathematics with Babel
@ 2014-09-03 6:54 H. Dieter Wilhelm
2014-09-03 7:19 ` Alan Schmitt
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: H. Dieter Wilhelm @ 2014-09-03 6:54 UTC (permalink / raw)
To: emacs-orgmode; +Cc: Jay Belanger
Hello Org,
for some engineering most often I need estimations with unit
conversions, Emacs Calc is perfect for this.
When it comes to reporting and documentation I'd like to do it with
org-mode, of course. For numerical stuff and visualisation purposes I'm
using already R and TikZ. But for unit conversions and symbolic maths
I'm in a bind when trying to do this with free programs.
- R :: Do you have experience with a units packages under the R-project?
What I've seen so far is not so reassuring...
- Maxima :: I think there is a nice and intuitive units package for
maxima. But this would mean learning an additional tool and mentally
switching between both within one document.
- Calc :: I'd prefer to do it with Calc but the Babel interface is
(yet?) restricted
For example, I can define functions and do some unit conversions:
#+BEGIN_SRC emacs-lisp
(defmath cvun(a b)
(math-convert-units a b))
#+END_SRC
#+RESULTS:
: calcFunc-cvun
#+BEGIN_SRC calc :var L1 = "5 mm"
cvun( L1, m)
#+END_SRC
#+RESULTS:
: 5e-3 m
But what is missing is to assign variables within a source block
#+BEGIN_SRC calc :var L1 = "5 mm"
L2 := cvun( L1, m)
#+END_SRC
Unfortunately this is not working. Do you have an idea how to
implement this?
- Are you using (better) alternatives?
Thanks for your insights
Dieter
--
Best wishes
H. Dieter Wilhelm
Darmstadt, Germany
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Unit conversions and symbolic mathematics with Babel
2014-09-03 6:54 Unit conversions and symbolic mathematics with Babel H. Dieter Wilhelm
@ 2014-09-03 7:19 ` Alan Schmitt
2014-09-03 7:32 ` Eric Abrahamsen
2014-09-03 13:18 ` Brett Viren
2 siblings, 0 replies; 4+ messages in thread
From: Alan Schmitt @ 2014-09-03 7:19 UTC (permalink / raw)
To: H. Dieter Wilhelm; +Cc: Jay Belanger, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1434 bytes --]
On 2014-09-03 08:54, dieter@duenenhof-wilhelm.de (H. Dieter Wilhelm) writes:
> But what is missing is to assign variables within a source block
>
>
> #+BEGIN_SRC calc :var L1 = "5 mm"
> L2 := cvun( L1, m)
> #+END_SRC
>
>
> Unfortunately this is not working. Do you have an idea how to
> implement this?
It seems that you could use block chaining. Here is an extract of some
code I use to compute stats for my book keeping:
#+name: monthly_average
#+begin_src emacs-lisp :var starty=2014 :var startm=3 :var amount=100
(let* ((tm (decode-time))
(cmonth (nth 4 tm))
(cyear (nth 5 tm))
(nbmonths (+ (* 12 (- cyear starty)) (- cmonth startm))))
(calc-eval "round($ / $$, 2)" nil amount nbmonths))
#+end_src
#+name: ledger_average
#+begin_src emacs-lisp :var b="Quotidien" :var sy=2014 :var sm=3 :var sd="2014-03-01" :var p="Expenses:"
(let* ((per (format "from %d-%d-01 to this month" sy sm))
(a (org-sbe call_ledger (bucket (eval b)) (prefix (eval p)) (period (eval per)))))
(org-sbe monthly_average (amount (eval a)) (starty (eval sy)) (startm (eval sm))))
#+end_src
The last line of the second block calls the first block to do its
computation. The first block does not have to be in emacs-lisp, but
I don't know calc well enough to do it directly in calc.
Best,
Alan
--
OpenPGP Key ID : 040D0A3B4ED2E5C7
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 494 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Unit conversions and symbolic mathematics with Babel
2014-09-03 6:54 Unit conversions and symbolic mathematics with Babel H. Dieter Wilhelm
2014-09-03 7:19 ` Alan Schmitt
@ 2014-09-03 7:32 ` Eric Abrahamsen
2014-09-03 13:18 ` Brett Viren
2 siblings, 0 replies; 4+ messages in thread
From: Eric Abrahamsen @ 2014-09-03 7:32 UTC (permalink / raw)
To: emacs-orgmode
dieter@duenenhof-wilhelm.de (H. Dieter Wilhelm) writes:
> Hello Org,
>
> for some engineering most often I need estimations with unit
> conversions, Emacs Calc is perfect for this.
>
> When it comes to reporting and documentation I'd like to do it with
> org-mode, of course. For numerical stuff and visualisation purposes I'm
> using already R and TikZ. But for unit conversions and symbolic maths
> I'm in a bind when trying to do this with free programs.
If you're on a linux of some sort, you probably have the "units" command
line program installed. That's sort of the mother of all unit
converters, as far as I'm concerned -- you could call out to it and
return the results. What do you think?
> - R :: Do you have experience with a units packages under the R-project?
> What I've seen so far is not so reassuring...
>
> - Maxima :: I think there is a nice and intuitive units package for
> maxima. But this would mean learning an additional tool and mentally
> switching between both within one document.
>
> - Calc :: I'd prefer to do it with Calc but the Babel interface is
> (yet?) restricted
>
> For example, I can define functions and do some unit conversions:
>
> #+BEGIN_SRC emacs-lisp
> (defmath cvun(a b)
> (math-convert-units a b))
> #+END_SRC
>
>
> #+RESULTS:
> : calcFunc-cvun
>
> #+BEGIN_SRC calc :var L1 = "5 mm"
> cvun( L1, m)
> #+END_SRC
>
>
> #+RESULTS:
> : 5e-3 m
>
> But what is missing is to assign variables within a source block
>
>
> #+BEGIN_SRC calc :var L1 = "5 mm"
> L2 := cvun( L1, m)
> #+END_SRC
>
>
> Unfortunately this is not working. Do you have an idea how to
> implement this?
>
> - Are you using (better) alternatives?
>
> Thanks for your insights
>
> Dieter
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Unit conversions and symbolic mathematics with Babel
2014-09-03 6:54 Unit conversions and symbolic mathematics with Babel H. Dieter Wilhelm
2014-09-03 7:19 ` Alan Schmitt
2014-09-03 7:32 ` Eric Abrahamsen
@ 2014-09-03 13:18 ` Brett Viren
2 siblings, 0 replies; 4+ messages in thread
From: Brett Viren @ 2014-09-03 13:18 UTC (permalink / raw)
To: H. Dieter Wilhelm; +Cc: Jay Belanger, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1333 bytes --]
Hi,
dieter@duenenhof-wilhelm.de (H. Dieter Wilhelm) writes:
> But what is missing is to assign variables within a source block
>
> #+BEGIN_SRC calc :var L1 = "5 mm"
> L2 := cvun( L1, m)
> #+END_SRC
>
> Unfortunately this is not working. Do you have an idea how to
> implement this?
>
> - Are you using (better) alternatives?
I like Python and in Python I like Pint for units.
http://pint.readthedocs.org
Below is an example org document that should "run" and shows a couple
ways to use snippets of Pint code to do unit conversion. Not shown but
Pint Quantity objects support arithmetic so are useful for carrying
units through some calculation.
For assigning to variables - presumably for use in later blocks - maybe
you can investigate using the :session header argument to source blocks.
Have fun,
-Brett.
One way to install Pint is:
#+BEGIN_SRC sh :results silent
pip install --user pint
#+END_SRC
Here is an example:
#+name: uconv
#+header: :var val="10m" :var unit="inch"
#+BEGIN_SRC python
import pint
units = pint.UnitRegistry()
return units.Quantity(val).to(unit)
#+END_SRC
#+RESULTS: uconv
: 393.700787402 inch
Now call =uconv= do to some other conversion:
#+call: uconv("2.54cm","inch")
#+RESULTS:
: 1.0 inch
[-- Attachment #2: Type: application/pgp-signature, Size: 180 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-09-03 13:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-03 6:54 Unit conversions and symbolic mathematics with Babel H. Dieter Wilhelm
2014-09-03 7:19 ` Alan Schmitt
2014-09-03 7:32 ` Eric Abrahamsen
2014-09-03 13:18 ` Brett Viren
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).