Mathematica中清除一系列符號定義的函式

2021-06-11 03:26:42 字數 1470 閱讀 6325

mathematica中使用clear[symbol_1,symbol_2,... ] 清除符號symbol_i的值和定義。但是,有時需要清除一系列符號的值和定義。比如, 

有一系列變數a, b, c構成乙個集和,稱作 vars,

vars=;

中間計算得到,

a=1; b=2; c=3;...

現在想清除這一系列變數a, b, c,...的值。

雖然可以將每乙個要清除的變數列出,用clear[a,b,c,...]清除,但是如果這個變數的集合很大,元素有成百上萬個,那麼使用clear[ ]很不現實。

下面的函式可以實現這一目標,它輸入乙個列表(list),呼叫這一函式之後,將清除這個列表裡每個變數的值。

基本想法是,先保持輸入不變,將輸入轉變成乙個字串,再從這個字串中恢復每乙個變數相應的子字串,比如''a"是變數a相應的字串,最後使用clear的另外一種用法clear["symbol_1","symbol_2",... ]清除每個子字串對應的變數。

(*給函式設定holdall屬性,防止引數被計算*)

setattributes[clearlist, holdall];

(*如果輸入不是列表list,返回錯誤資訊*)

clearlist::nnarg = "the argument `1` is not a list.";

clearlist[syml_] /;

if[head[evaluate[syml]] === list, true,

message[clearlist::nnarg, syml]; false] := module[,

str[1] = tostring[holdform[syml]];

(*clearlist[{}] or clearlist[var]*)

if[stringfreeq[str[1], ""],

str[1] = tostring[trace[syml][[2]]]];

(*clearlist*)

str[2] =

stringreplace[

str[1], " -> "", "[" ~~ __ ~~ "]" -> ""}];

str[3] = stringsplit[str[2], ];

seq = str[3] /. list -> sequence;

clear[evaluate[seq]];

];

測試如下:

1.  var = ;

a = 1; c0[1] = 2; epsilon = 3;

clearlist[var];

2. a = 1; c0[1] = 2; epsilon = 3;

var := ;     (*此處延遲賦值*)

clearlist[var];

3. a = 1; c0[1] = 2; epsilon = 3;

clearlist ;

mathematica中貝塞爾曲線的疑惑

mathematica 貝塞爾曲線 疑惑因工作中需要用貝塞爾曲線來作為角色登場的路線,所以遊戲設計中有多條曲線 對於控制點數 4的貝塞爾曲線發現與遊戲實際中顯示的不同 對於path3的控制點為,遊戲中的路徑 第一次直接使用貝塞爾曲線命令如下 graphics axes true 得到如下圖形 對於此...

Mathematica 乙個基於康托集合定義的函式

原文 無限小卻無限大的集合 階梯狀的連續函式 康托集合是閉區間 0,1 的子集,它的定義如下 給定區間 0,1 把這個區間分成三段,去掉中間那一端 即去掉 1 3,2 3 然後把剩下的兩段中每一段都按照剛才的方法再進行操作,然後再分,再分,就這樣一直挖洞挖下去。在第二次操作後,剩下的區間是 0,1 ...

Android中清除快取

有時候會遇到要清除應用快取的功能,不經常用,總忘,所以在這裡總結,實際價值個人感覺不大。快取管理類 public class datacleanmanager return getformatsize cachesize 清空快取 param context public static boolea...