变换方程 WxMaxima Ezunits
Transforming Equations WxMaxima Ezunits
我在转换方程式时又遇到了问题...
设置函数 b(a) 和 c(b) 有效。将它们相互插入也可以从温度变为电流 c(b(a))。但现在我想把它翻转过来 a(c)。结果应该是这样的 a(c):= (c-(4`mA))*(25`degC)/(4`mA);
但即使使用 ''
技巧也不起作用。
(%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
-->
看起来您从 solve(c(b(T)), T)
中省略了 c
的特定值——我的意思是您需要像 solve(c(b(T)) = c1, T)
这样的东西,其中 c1
是输入12 ` mA
.
等值
这个定义似乎有效 --
a(c1):= dimensionally(solve(c(b(T)) = c1, T));
然后我得到
(%i22) a(12`mA);
(%o22) [T = 50 ` degC]
当您省略 ... = c1
时,您实际上是在求解 ... = 0
,这就是您得到 T = (- 25) ` degC
.
的原因
另一个变体 a(c1) := ''(...)
应该也可以,虽然我没有尝试。
可以写成a(c) := dimensionally(solve(c(b(T)) = c, T))
,即变量c
和函数c
重名,但是容易混淆,我也希望在不久的将来(随着符号的词法范围的实施)行为的改变将使它不再起作用。
我在转换方程式时又遇到了问题...
设置函数 b(a) 和 c(b) 有效。将它们相互插入也可以从温度变为电流 c(b(a))。但现在我想把它翻转过来 a(c)。结果应该是这样的 a(c):= (c-(4`mA))*(25`degC)/(4`mA);
但即使使用 ''
技巧也不起作用。
(%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
-->
看起来您从 solve(c(b(T)), T)
中省略了 c
的特定值——我的意思是您需要像 solve(c(b(T)) = c1, T)
这样的东西,其中 c1
是输入12 ` mA
.
这个定义似乎有效 --
a(c1):= dimensionally(solve(c(b(T)) = c1, T));
然后我得到
(%i22) a(12`mA);
(%o22) [T = 50 ` degC]
当您省略 ... = c1
时,您实际上是在求解 ... = 0
,这就是您得到 T = (- 25) ` degC
.
另一个变体 a(c1) := ''(...)
应该也可以,虽然我没有尝试。
可以写成a(c) := dimensionally(solve(c(b(T)) = c, T))
,即变量c
和函数c
重名,但是容易混淆,我也希望在不久的将来(随着符号的词法范围的实施)行为的改变将使它不再起作用。