1

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
 -->    
Dux
  • 101
  • 4

1 Answers1

1

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.

Robert Dodier
  • 16,905
  • 2
  • 31
  • 48