-
Recent Posts
Recent Comments
Archives
- December 2013
- November 2013
- March 2012
- February 2012
- December 2011
- November 2011
- October 2011
- August 2011
- July 2011
- June 2011
- May 2011
- March 2011
- February 2011
- January 2011
- October 2010
- August 2010
- July 2010
- May 2010
- April 2010
- March 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
Categories
Meta
友站連結
Tag Archives: CAS
用Python幫你進行代數運算 : Sympy
最近因為接到的Case,滿腦子中都是線性代數的東西,程式中有太多東西需要計算,以前學過的東西全都從腦子裡挖了出來,不過我通常都不背公式的,我所做的都是將當時走過的思路再走過一次,把公式重新導出來,因為公式是一個點,忘記就沒了,而思路是一條線,只要抓到了就可以得到同樣的結果 我還記得有一次,在PTT站上問一個微積分的式子是怎麼來的,因為我在書上看到他經過一個很奇怪的上下乘某個三角函數,式子就莫名奇妙的跑出來了,有個台大的學生很不以為然的回答,就是上下相乘那三角函數阿,當時讓我覺得挺無言的,這我當然也知道,看書也知道,問題是在於,如果沒有書跟你講,你是怎樣能想到這神來一筆,知道要上下乘這個函數? 所以公式的結果從來都不是重點,重點在於思路,只死記公式最後都會忘光光,但是能夠思考而走到公式這一步的話,就好像走過一條路,找到片段,又能找到終點,死記公式,就好像把你丟到一個定點,要你記住那裡長什麼樣子,一個是點,一個是一條路,當然是思路記得比較好 這種想法讓我到了應用時通常都能用上我所學到的,因為我知道那些東西從哪裡來的,即使忘記了也可以再導出來,但同時有些時候也讓我吃足了苦頭,還記得有一次考物理時,前面半節課我在導公式,後面半節用導出來的公式算,下場當然很慘,其實很多時候公式寫到一個地方,剩的就只剩整理,但是這過程卻很煩人、機械化,很容易一個正負號,一個看走眼就會讓後面的過程全部跟著錯掉,所以不得不在過程中每個符號小心的重寫一次,長久以來我一直在想,即使是整理也是有規則的,為什麼不能用電腦來算呢? 雖然我知道有matlab這類的東西,畢竟沒時間學,領域也不太一樣,不合胃口,直到前陣子在PTT的Python版上看見有人推薦一款Python的library : Sympy,他是一款Python寫的代數運算函式庫,舉個例子你寫出了一個式子,想知道它的導函數是什麼,你只要先將式子列出來,再用一個函數呼叫,他就可以把導函數算出來,這非常地合我喜好,我們現在就來介紹如何使用Sympy來幫你計算兩線在平面交一點的公式 兩線交一點 首先我們在平面上有P1和P2兩點,而從P1出發的是u向量,從P2出發的是v向量,我們想得知這兩條線在哪裡會交一點,就必須這麼算,我們設t和s為實數,我們可以找到一個等式P1 + su = P2 + tv,也就是P1以u的速度走s秒(秒只是幫助想像的假設),P2以v的速度走t秒,兩人會撞在一起,要導公式就要先找等式,這就是我們公式的等式,一開始我不知道是程式寫太多還怎樣,突然有點腦殘的想說,奇怪,這式子有兩個未知數s和t,一條式子算不出兩個未知數阿? 後來才突然想到,我忘了這是平面,所以在x分量和y分量上面我們各有一條這樣的等式,有了兩條等式,兩個未知數才可能有解 有了等式之後,嘿嘿,就是該交給電腦的時候了 from sympy import * p1x = Symbol(‘p1x’) p1y = Symbol(‘p1y’) p2x = Symbol(‘p2x’) p2y = Symbol(‘p2y’) ux = Symbol(‘ux’) uy = Symbol(‘uy’) vx … Continue reading