Re: [問題] 如何求解方程式"符號運算"與"簡化"

看板Mathematica作者時間12年前 (2012/12/23 00:56), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/4 (看更多)
※ [本文轉錄自 jurian0101 信箱] 作者: jurian0101 (Hysterisis) 標題: Re: [問題] 如何求解方程式"符號運算"與"簡化" 時間: Sun Dec 23 00:54:01 2012 ※ 引述《s0310388 (沒人要兄弟)》之銘言: : jurian0101大大你好 : 我去翻書與搜尋網路後,有些指令跟你請教一下 : Sort@Flatten[Variables/@{line1,line2,line3,line4,line5}[[All,2]]] : (1)/@的意思是?為什麼有斜線與@ 某函數 /@ 某List 是 Map[某函數, 某List]的簡寫 f/@{1,2,3} = {f[1], f[2], f[3]} 有一個TreeForm可以幫助理解Map的作用 原本 {1,2,3} 原型(FullForm)是 List[1,2,3], TreeForm = List ↙ ↓ ↘ 1 2 3 f/@{1,2,3} = Map[f,{1,2,3}] = {f[1], f[2], f[3]} TreeForm = List ↙ ↓ ↘ f f f ↓ ↓ ↓ 1 2 3 多了一層的感覺,看F1說明文件有例子請類推 雖然你沒問這裡也沒出現,但有一個相似但完全不同的運算符號是@@ = Apply 若 f@@{a,b,c} = f[a,b,c] f@@(a+b+c) = f[a,b,c] 請自已用一下 FullForm 與 TreeForm看一下實際上發生了什麼,可以發現@@的 作用是把f塞到帶頭地位,有「篡位」的味道。 : (2) [[All,2]]的意思是?我發現[All,1]可以跑,[All,3]不能跑? 兩層括號[[ ]]是 Part 的縮寫 a[[2,1]] = Part[a,2,1] 利用上面那個TreeForm圖,如{f[1], f[2], f[3]}[[2,1]] 就是樹的第二個分支再 第一個分支 = 2 在Part裡使用All, 指的是那一層所有分支,所以{f[1], f[2], f[3]}[[All,1]] = {1,2,3} 如果對樹什麼的不熟,說明文件的 tutorial/ExpressionsOverview 參考一下 f[1]在Mathematica裡面真的不是"函數" (像Basic或C那樣) 那麼簡單,反而是 一個表達式(Expression),更像java裡的,所有部分都可以拆開合起來並新增或 移除像一個個物件一樣。 : ANS5=L D[i[L][t],t]==L (D[i[L][t],t]/.Solve[ANS4,D[i[L][t],t]][[1]]) : (1) /.,斜線與 . 的意思是 /.又是個縮寫XD 表達式 /. 規則 = ReplaceAll[表達式, 規則] 這是Mathematica中最強而有力的操弄符號,沒有之一 規則 (pattern and rules) 等同於所謂正則表達式(RegExp)的Mathematica版本, 有一整族的Mathematica函數可以配合運行。 有個箭頭像 x->g[x] 的部分叫做transformation rule, 簡稱rule 用法是 {1, 2x, a*x}/.x->g[x] 變成 {1, 2g[x], a*g[x]} ReplaceAll白話叫做凡是跟x (箭頭左邊) 長一樣的通通變成 g[x] (箭頭右邊) 其他再去看說明跟範例。用的到的學得比較快,其他改天用到再學。 : (2) [[1]]的意思是? 同前述略 : ANS7=Coefficient[ANS6[[2]],#]&/@{i[L][t],v[c],V[g][t]} : (1) ANS6為何要加[[2]]與# : (2) &/@的意思是? : (3)以上大量的@在做什麼? : 謝謝!! f@a = f[a] 是因為可以少打一個字符,游標不用移到後面去加]而生的偷懶法XD 例子是 f@g@x = f[g[x]] 如上例所示,在多層函數套疊的場合可以使眼花程度降低,但順序有被程式讀錯 之虞的情況,還是得用回括號。 又,能用@的函數共通點是只有一個變數值(argument,方括號裡的東西稱之) #和& 又是Mathematica語法裡彈性很高很精妙的東西,總是成對出現 白話文理解的話是,「 & 負責把它碰到的符號塞到 # 所在的位置 」 f[a,#,b]&[test] = f[a, test, b] 和@聯合的話 f[a,#]& @test = f[a,#,b]&[test] #有兩種基本變化,其一是編號 #1 代表[]裡第一個argument, #2表第二個以此類推 而其二 ## 代表[]裡所以有東西一股腦塞給他 f[#1,a,#2]&[X,Y] = f[X, a, Y] 與其等同,常見的把List餵給函數的方法,用到Apply = @@ (參考第一段) f[#1,a,#2]& @@ {X,Y} = f[X, a, Y] 與前者完全相同,List只是暫時帶頭者,用後就被f幹掉的感覺 最後是## f[##,a]& [1,2,3,4,5] = f[1,2,3,4,5,a] = = = 後記: 我學Mathematica最常看的說明頁面是 guide/ListManipulation 由此可知 Mathematica使用者一般在做的事多半是在玩弄List,確定結構後才能應用 內建或自定函數添加血肉。玩弄的過程配上pattern (另一個我早先常看的 頁面)會很強大,待你用到時發現,不過現在不用擔心XD。 這就是用以致學的道理 www -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.88 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: jurian0101 (140.112.213.88), 時間: 12/23/2012 00:56:32 ※ 編輯: jurian0101 來自: 140.112.213.88 (12/23 00:57)

07/04 15:43, , 1F
初學者路過推
07/04 15:43, 1F
文章代碼(AID): #1GrUP1Gq (Mathematica)
文章代碼(AID): #1GrUP1Gq (Mathematica)