Search code examples
maximawxmaxima

Transforming Equations WxMaxima Ezunits


I'm having problems transforming equations, again... Setting up the functions b(a) and c(b) works. Inserting them into each other also works to get from a temperature to a current c(b(a)). But now I want to flip it around a(c). The result should be like this a(c):= (c-(4`mA))*(25`degC)/(4`mA); But it's not working even with the ''-trick.

(%i1)   load(ezunits);
(%o1)   "C:/maxima-5.44.0/share/maxima/5.44.0/share/ezunits/ezunits.mac"
(%i7)   a0: 0`degC;
    am: 100`degC;
    b0: 0`mV;
    bm: 4`mV;
    c0: 4`mA;
    cm: 20`mA;
(a0)    0 ` degC

(am)    100 ` degC

(b0)    0 ` mV

(bm)    4 ` mV

(c0)    4 ` mA

(cm)    20 ` mA
(%i8)   b(a):= (bm-b0)/(am-a0)*(a-a0)+b0;
(%o8)   b(a):=(bm-b0)/(am-a0)*(a-a0)+b0
(%i9)   c(b):= (cm-c0)/(bm-b0)*(b-b0)+c0;
(%o9)   c(b):=(cm-c0)/(bm-b0)*(b-b0)+c0
(%i10)  c(b(50`degC));
(%o10)  12 ` mA
(%i11)  a(c):= dimensionally(solve(c(b(T)), T));
(%o11)  a(c):=dimensionally(solve(c(b(T)),T))
(%i12)  a(12`mA);
(%o12)  [T=(-25) ` degC]
(%i13)  a(c):= ''(dimensionally(solve(c(b(T)), T)));
(%o13)  a(c):=[T=(-25) ` degC]
(%i14)  a(12`mA);
(%o14)  [T=(-25) ` degC]
(%i15)  oi: T, dimensionally(solve(c(b(T)), T));;
(oi)    (-25) ` degC
(%i16)  a(c):= (c-(4`mA))*(25`degC)/(4`mA);
(%o16)  a(c):=((c-4 ` mA)*(25 ` degC))/4 ` mA
(%i17)  a(12`mA);
(%o17)  50 ` degC
 -->    

Solution

  • It looks like you have omitted the specific value of c from solve(c(b(T)), T) -- what I mean is you need something like solve(c(b(T)) = c1, T) where c1 is the input value such as 12 ` mA.

    This definition seems to work --

    a(c1):= dimensionally(solve(c(b(T)) = c1, T));
    

    Then I get

    (%i22) a(12`mA);
    (%o22)                  [T = 50 ` degC]
    

    When you omit the ... = c1, you are effectively solving for ... = 0, that's why you get T = (- 25) ` degC.

    The other variation a(c1) := ''(...) should also work, although I didn't try it.

    You can write a(c) := dimensionally(solve(c(b(T)) = c, T)), i.e., using the same name for the variable c and the function c, but it's easy to get mixed up, and also I am hoping the change that behavior in the near future (with the implementation of lexical scope of symbols) which will make that not work anymore.