Hello! In qalc I can do calculations using measuring units like this:

> 5 W * 3 s

  (5 watts) × (3 seconds) = 15 J

I’d like to be able to do something similar also in GNU Octave. I think the symbolic library could be a place to look at, but I found nothing “already done”. Do any of you know of a way to achieve this functionality?

6 points
*

The Octave miscellaneous package has embedded GNU units as a function which should be helpful.

permalink
report
reply
3 points

It looks interesting, but more focused on conversions than actual operations it seems:

octave:37> a.value = 100
a =

  scalar structure containing the fields:

    value = 100
    unit = W

octave:38> a.unit = 'W'
a =

  scalar structure containing the fields:

    value = 100
    unit = W

octave:39> b.value = 3
b =

  scalar structure containing the fields:

    value = 3
    unit = s

octave:40> b.unit = 's'
b =

  scalar structure containing the fields:

    value = 3
    unit = s

octave:41> a*b
error: binary operator '*' not implemented for 'scalar struct' by 'scalar struct' operations
permalink
report
parent
reply
4 points

I think I’ve found a solution. Matlab has implemented symunits in the symbolic toolbox and I’ve found the original? on Github. Hopefully it is compatible to GNU Octave.

permalink
report
parent
reply
4 points

This looks very VERY promising! I’ll try to install it tomorrow and Post here the results! Thanks?

permalink
report
parent
reply
2 points

I downloaded it and tried to run it, but it gets stuck in a loop and I don’t know how it could be fixed:

error: max_recursion_depth exceeded
error: called from
    baseUnitSystem
    <unknown>

it seems the problem is in the line

coreUnits = buildCoreUnits(u.baseUnitSystem);

in the file u.m, I think because u.baseUnitSystem tries to “call itself”. I don’t know what this should be supposed to do, and have no idea on how to possibly fix it :(

permalink
report
parent
reply
1 point

I don’t think symbolic will solve your problem at all

permalink
report
reply
1 point

With symbolic variables J, s and W, the Ws won’t be converted to J automatically.

permalink
report
parent
reply
2 points

automatically no, but perhaps there’s a way to replace it. If there’s a way to check if a variable is “divisible by another symbolic one” then it would be not so hard to implement this behavior

permalink
report
parent
reply

Open Source

!opensource@lemmy.ml

Create post

All about open source! Feel free to ask questions, and share news, and interesting stuff!

Useful Links

Rules

  • Posts must be relevant to the open source ideology
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

Community icon from opensource.org, but we are not affiliated with them.

Community stats

  • 4.4K

    Monthly active users

  • 1.5K

    Posts

  • 25K

    Comments