如何清除带有下标的变量的定义
mathematica吧
全部回复
仅看楼主
level 1
我定义了带有下标的变量,用于表示对称多项式:
nvars=4;
(Array[Subscript[\[Sigma], #] &, nvars] // Evaluate) =
SymmetricPolynomial[#, Array[Subscript[x, #] &, nvars]] & /@
Range[nvars];
在我想清除定义或者相关值的时候没有效果
Clear[Subscript[\[Sigma], 1]]
整体清除也是没效果
Clear[Subscript[\[Sigma], #] & /@ Range[nvars]] (* 估计是因为这些表达式在内部的时候已经执行了,造成里面就是对称多项式,而不是sigma? 但我用SymbolName也不行,因为符号不允许有下标,用Hold,Defer,Unevaluated将Clear里面的参数强制不执行,但这样得到的就只是一串代码表达式了,也不行*)
最后想到用Unset,虽然显示失败,但是能有效,不知为什么
Unset[Subscript[\[Sigma], #] & /@ Range[4]]
Unset[Subscript[\[Sigma], #]] & /@ Range[4]
上面两种方法都可以,但是为什么用在Clear上就不行。
2016年07月07日 13点07分 1
吧务
level 12
Clear[ Subscript ]
2016年07月10日 03点07分 2
感谢,没想到还能这么用。Subscript是一个函数名,难道也是这种带下标的对象的类别名?
2016年07月10日 05点07分
回复
失落的记忆sea
:Mathematica没有“类别名”的概念,Subscript的值存在……唉你自己看这里吧:http://mathematica.stackexchange.com/a/18562/1871
2016年08月06日 10点08分
@xzcyr 明白了,Clear[Subscript]就是清除所有与Subscript相关的定义。这样一来,就导致任何带下标的定义都被清除了呢。
2016年08月07日 04点08分
level 1
比如
nvars=4;
(Array[Subscript[\[Sigma], #] &, nvars] // Evaluate) =
SymmetricPolynomial[#, Array[Subscript[x, #] &, nvars]] & /@
Range[nvars];
然后再定义一个
Subscript[x,i]=10;
如果想清除Subscript[\[Sigma],#],#=1~(nvars-2),并保留剩余变量的定义,是否有简单的方法呢?
2016年08月07日 04点08分 4
level 1
比较麻烦。
nvars = 4;
Clear[Subscript];
(Array[Subscript[\[Sigma], #] &, nvars] // Evaluate) =
Subscript[x, #] & /@ Range[nvars];
Information[Subscript]
clearSubscript[sym_,
nums_] := (DownValues[Subscript] =
DeleteCases[
DownValues[
Subscript], _?(MemberQ[#, _[Subscript[sym, x_]] /;
MemberQ[nums, x]] &), 1];);
clearSubscript[\[Sigma], Range[2]]
Information[Subscript]
2016年08月07日 12点08分 5
直接Do[Subscript[\[Sigma], i] =., {i, nvars - 2}]不就行了
2016年08月07日 15点08分
@无影东瓜 好像也是诶,我自己都被自己绕进去了。
2016年08月08日 02点08分
不过我从这里也学到了关于下值的一些用法,这个方法还是挺一般化的,对于解决非特殊问题很有指导意义。感谢二位的回答[吐舌]~
2016年08月08日 02点08分
@无影东瓜 ....几乎没用个=.,所以想不起来....
2016年08月08日 14点08分
1