Symbolic math &引用;“私人”;sum()、diff()或integrate()的符号 让我们考虑一下我在下面提到的函数:

Symbolic math &引用;“私人”;sum()、diff()或integrate()的符号 让我们考虑一下我在下面提到的函数:,symbolic-math,maxima,computer-algebra-systems,Symbolic Math,Maxima,Computer Algebra Systems,一般来说,它可以正常工作,但是如果原始表达式f已经包含符号r,j,等等呢?在这种情况下,它没有做正确的事情。到目前为止,我找到的唯一解决方案是为这些符号使用一些唯一的前缀,或者至少以下划线开头:r→ \uu r,j→ \uuu j。但我希望应该有一个更惯用的解决方案。有什么事吗 不幸的是,在极大值中,所有符号实际上都是全局的——某些表达式中的x与f(x):=…中的x是相同的符号。因此,没有通用的方法来确保函数参数与同名的其他符号区分开来。有些函数试图将其参数设置为局部变量,例如,sum专门处理索

一般来说,它可以正常工作,但是如果原始表达式
f
已经包含符号
r
j
,等等呢?在这种情况下,它没有做正确的事情。到目前为止,我找到的唯一解决方案是为这些符号使用一些唯一的前缀,或者至少以下划线开头:
r
→ <代码>\uu r,
j
→ <代码>\uuu j。但我希望应该有一个更惯用的解决方案。有什么事吗

不幸的是,在极大值中,所有符号实际上都是全局的——某些表达式中的
x
f(x):=…
中的
x
是相同的符号。因此,没有通用的方法来确保函数参数与同名的其他符号区分开来。有些函数试图将其参数设置为局部变量,例如,
sum
专门处理索引变量,但
integrate
不这样做


我试图制作一个词汇块结构,它可以区分相同名称的符号。它被称为“blex”,我认为网络搜索应该能找到它,如果找不到,请告诉我,我会发布一个链接。

这太遗憾了。我想现在我会坚持使用前缀或下划线。是的,我认为现在选择不寻常的名称来避免名称冲突是一个可行的解决方案。好消息是,事实上,我认为实现词汇符号可能不需要太多的工作,而且我非常确定很少程序实际上需要动态范围才能正常工作,因此,将更改为词汇范围可能不太难付诸实践。
   rot[i](f) := sum(sum(sum(sum(
      G[r,i]*G[q,j]*W[i,j,k]*('diff(f[k], y[q]) + sum(K[k,q,m]*f[m], m, 1, N)),
          r, 1, N),
          j, 1, N),
          k, 1, N),
          q, 1, N) $