Re: [問題] 如何求解方程式"符號運算"與"簡化"
※ [本文轉錄自 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
討論串 (同標題文章)
完整討論串 (本文為第 3 之 4 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章