variables - (wx)Maxima:如何评估符号变量列表?
问题描述
我正在编写一个需要可变数量的符号变量的脚本,并且正在努力理解如何评估结果表达式
MWE:
(%i1) foo:makelist(f[i],i,3);
(foo) [f[1],f[2],f[3]]
(%i2) bar:lreduce("*",foo);
(bar) f[1]*f[2]*f[3]
(%i3) vals:[1,2,3];
(vals) [1,2,3]
(%i4)
ev(bar,foo:vals);
(%o4) f[1]*f[2]*f[3]
在这里,我想针对f[1]:1
和评估f[2]:2
产品f[3]:3
。
以下作品:
ev(bar,lambda([L], for i thru length(L) do f[i]:L[i])(vals));
但是,我认为可能有更直接/实用的方法;也许是一种完全不同的声明符号变量的方式?
解决方案
在这种情况下,由于自由变量只是 subscripted f[1], f[2], f[3]
,您可以f
临时分配一个列表,然后它将找出适当的值:
(%i6) e: f[1]*f[2]*f[3];
(%o6) f f f
1 2 3
(%i7) ev(e, f = [1, 2, 3]);
(%o7) 6
(%i8) ev(e, f = [a, b, 7]);
(%o8) 7 a b
更一般地说,处理此类问题的最直接方法是形成一个方程列表,然后代入表达式。例如:
(%i12) e: x*y*z;
(%o12) x y z
(%i13) l: map ("=", [x, y, z], [11, 22, 33]);
(%o13) [x = 11, y = 22, z = 33]
(%i14) subst (l, e);
(%o14) 7986
推荐阅读
- swift - 类型数组中的元素类型更改 Any
- typescript - ES5 声明文件
- python - 如何在没有numpy的情况下将列表转换为矩阵?
- tkinter - 如果 cn 是条目,为什么我不能使用 while cn
- ajax - 我必须使用 ajax 完成实时表,但我坚持一个错误,即 CSRF 令牌不匹配错误
- vega-lite - Vega 在点击时执行排序(转换)
- postgresql - symfony 教义将布尔值转换为整数
- docker - 如何从旧的 Docker 映像中提取模块并添加到新的 Docker 映像中?
- c# - Ajax 如何传递具有文件列表的数组(.NET CORE / AJAX / JQUERY)
- php - PHP计算没有WHERE子句的列