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...