"Private" 个用于 sum()、diff() 或 integrate() 的符号
"Private" symbols for sum(), diff(), or integrate()
让我们考虑一下我在 中提到的以下函数:
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) $
一般情况下是可行的,但是如果原始表达式 f
已经包含符号 r
、j
等怎么办?在这种情况下,它没有做正确的事情。到目前为止,我找到的唯一解决方案是为这些符号使用一些唯一的前缀,或者至少用下划线开头它们的名称:r
→ __r
、j
→ __j
.但我希望应该有一个更惯用的解决方案。有没有什么?
不幸的是,在 Maxima 中,所有符号实际上都是全局的——某些表达式中的 x
与 f(x) := ...
中的 x
是相同的符号。所以没有通用的方法来确保函数参数与其他同名符号区分开来。一些函数试图使它们的参数成为本地参数,例如,sum
会特殊对待索引变量,但 integrate
不会。
我尝试制作一个词法块结构,它可以区分同名符号。它叫做 blex
,我认为网络搜索应该可以找到它,如果找不到,请告诉我,我会 post link.
让我们考虑一下我在
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) $
一般情况下是可行的,但是如果原始表达式 f
已经包含符号 r
、j
等怎么办?在这种情况下,它没有做正确的事情。到目前为止,我找到的唯一解决方案是为这些符号使用一些唯一的前缀,或者至少用下划线开头它们的名称:r
→ __r
、j
→ __j
.但我希望应该有一个更惯用的解决方案。有没有什么?
不幸的是,在 Maxima 中,所有符号实际上都是全局的——某些表达式中的 x
与 f(x) := ...
中的 x
是相同的符号。所以没有通用的方法来确保函数参数与其他同名符号区分开来。一些函数试图使它们的参数成为本地参数,例如,sum
会特殊对待索引变量,但 integrate
不会。
我尝试制作一个词法块结构,它可以区分同名符号。它叫做 blex
,我认为网络搜索应该可以找到它,如果找不到,请告诉我,我会 post link.