首先... SyntaxHighlighter沒法高亮Mathematica的語法,所以下面只能以這種形式表示了
沒有row interchange的LU分解函數(LU Decomposition without row interchanging):
LUFactor[mat0_] :=
Module[{m, n, i, j, k = 1, L, U = mat0},
{m, n} = Dimensions[U];
L = IdentityMatrix[m];
For[j = 1, j < n + 1, j++,
If[U[[k, j]] != 0,
For[i = k + 1, i < m + 1, i++,
L[[i, k]] = U[[i, j]]/U[[k, j]];
U[[i]] = U[[i]] - U[[k]]*U[[i, j]]/U[[k, j]];
];
k++
]
];
Print["L=", L // MatrixForm];
Print["U=", U // MatrixForm];
Return[{L, U}];
]
將這個放在Mathematica的檔案中執行一次後就能呼叫這個函數,在裡面放入要分解的矩陣就可。Print那兩行是顯示L和U,不需要的話可刪除。如果想將這個函數的L和U指定到另外的變數中,可以寫成{a,b}=LUFactor[matrix],這樣L和U就會指定到a和b這兩個變量上。
事源是這樣的,Mathematica本身內置了一個叫LUDecomposition的函數,但它沒法選擇做不做row interchange,而筆者在溫習線性代數的課題時,在LU分解的練習中有些題目是要在不做row interchange的情況下解的,只好放棄。
然後想說其實筆者也會一點編程,應該查一下Mathematica的編程語法就會了吧,於是就邊查邊找別人寫的函數的例子,就編出上面的function了。
一開始只是寫了4x4的矩陣作試驗,然後擴建成nxn,再把參數改一改,令它能處理mxn,最後加一個If和改改參數變成能處理pivot的問題。
不過Mathematica的資料真難找,搜尋常常夾了一堆不相干的東西,像要找function的定義方法就找了很多數學function的相關東西出來,找programming就變mathematical programming,好麻煩。
2015年12月10日 星期四
2015年10月7日 星期三
[程式/Python] 俄羅斯方塊 Tetris
之前在Codecademy看完了python的課程後,想看看自己理解了多少,於是找了MIT的Python Course的功課和Project來做,這幾天沒發文就是去寫程式了,目前己完成所有Project。
其中一個我覺得很有趣的是自製 俄羅斯方塊 遊戲,我把它打包成執行檔了,載點如下:
>>俄羅斯方塊 下載<<
下載 俄羅斯方塊.rar 後,解壓縮並運行tetris.exe進行遊戲,其中會出現一個黑色畫面不用理會,玩完後關了它就好。
控制:
←↓→:移動方塊
↑:轉動方塊
空白鍵:直接落下
當遊戲進行到後期,畫面更新速度會加快,然後就會不定期出現一些Bug來阻礙大家遊玩∠( ᐛ 」∠)_,有發現的話請幫忙回報,我能處理的都會處理。(不過很多不是我的code有問題,似乎是Graphics Module的問題,這個我沒法處理)
完成這些Project的難點是Template都是用Python2寫的,我要把它改寫成Python3的格式,畢竟我也是一個月前第一次接觸Python,2和3的分別寫在不太熟識,結果很多時間花在翻譯code。
另外我也有完成 康威生命遊戲 ,不過這個好像沒那麼有趣所以不貼了。
遊戲畫面:
其中一個我覺得很有趣的是自製 俄羅斯方塊 遊戲,我把它打包成執行檔了,載點如下:
>>俄羅斯方塊 下載<<
下載 俄羅斯方塊.rar 後,解壓縮並運行tetris.exe進行遊戲,其中會出現一個黑色畫面不用理會,玩完後關了它就好。
控制:
←↓→:移動方塊
↑:轉動方塊
空白鍵:直接落下
當遊戲進行到後期,畫面更新速度會加快,然後就會不定期出現一些Bug來阻礙大家遊玩∠( ᐛ 」∠)_,有發現的話請幫忙回報,我能處理的都會處理。(不過很多不是我的code有問題,似乎是Graphics Module的問題,這個我沒法處理)
完成這些Project的難點是Template都是用Python2寫的,我要把它改寫成Python3的格式,畢竟我也是一個月前第一次接觸Python,2和3的分別寫在不太熟識,結果很多時間花在翻譯code。
另外我也有完成 康威生命遊戲 ,不過這個好像沒那麼有趣所以不貼了。
遊戲畫面:
2015年9月20日 星期日
[程式/Python] 凱撒密碼 加密器 Caesar Cipher
凱撒密碼是移位密碼的一種,將英文字的各字母順移指定次數,例如ABE各順移兩次的話就會變成CDG。
以下是Python的code,這次沒有註解,因為寫的時候有點想睡,想寫快點,而且函數名稱都很明顯了,有看不懂再問吧:
效果:
首先顯示歡迎字句,然後問要加密的句子,如果沒有輸入句子就會要你重新輸入。然後到輸入順移次數,如果輸入非整數就會顯示輸入無效,直至輸入為整數。之後就會輸出加密後的句子,數字和符號不會改變。最後問你是否離開,答y就會結束,答n的話就會再來一次。
以下是Python的code,這次沒有註解,因為寫的時候有點想睡,想寫快點,而且函數名稱都很明顯了,有看不懂再問吧:
def checkint(c): while True: try: c = int(c) return c except: print ("Invaild value!") c = input("Enter shift value again:") def checkempty(s): while s=="": print ("No sentence.") s = input("Enter sentence to encrypt again:") return s def shiftletter(word, c): new_word = [] for letter in word: temp=ord(letter) if temp in range(65, 91): temp+=c temp = (temp-65)%26+65 elif temp in range(97, 123): temp+=c temp = (temp-97)%26+97 new_word.append(chr(temp)) return "".join(new_word) def encode(Input, c): word_list = Input.split() new_word_list = [] for word in word_list: new_word_list.append(shiftletter(word, c)) return " ".join(new_word_list) #My "Restart" option def exit(ans): while True: ans = str(ans).lower() if ans == "y": print ("See You!") input ("Press enter to continue") raise SystemExit() elif ans == "n": return "n" else: print () print ("Invalid Input") ans = input("Exit? (y/n)") #End of "Restart" def main(): Input = checkempty(input("Enter sentence to encrypt:")) c = checkint(input("Enter shift value:")) #for test #Input = "Mayday! Mayday!" #c = input("Enter shift value:") #end for test print ("The encoded phrase is:", encode(Input, c)) print ("Welcome to Caesar cipher!") print () re = "n" while re=="n": main() print () re = exit(input("Exit? (y/n)")) print () print ()
效果:
首先顯示歡迎字句,然後問要加密的句子,如果沒有輸入句子就會要你重新輸入。然後到輸入順移次數,如果輸入非整數就會顯示輸入無效,直至輸入為整數。之後就會輸出加密後的句子,數字和符號不會改變。最後問你是否離開,答y就會結束,答n的話就會再來一次。
標籤:
凱撒密碼
,
程式
,
Caesar Cipher
,
Python
2015年9月19日 星期六
[程式/Python] 猜字遊戲 Hangman
┳┻|_∧
┻┳|ω・) ♪
┳┻|⊂ノ
我用Python寫的第一個遊戲終於出來了,是猜字遊戲:
>>Hangman下載<<
下載Hangman EXE.rar後,解壓縮並運行hangman.exe進行遊戲,畫面大小請自己調整,我還不會調整∠( ᐛ 」∠)_
遊戲如下:
開始遊戲後會看到載入字庫的畫面,字庫word.txt的字可以自行增加,不過55900字已經夠玩了吧。下面會看到吊刑台,沒甚麼作用,只是用來顯示你有多快輸。
Word會顯示你猜對了的字母在該字的哪個位置,Guess是你猜過的字母,Misses是猜錯了的字母,Guess a letter要求玩家輸入一個字母。
猜錯的話就會開始出現吊頸男,上頭的guesses left會減少,減到0還沒猜到就結束,玩家輸,在0之前猜完就贏。
猜對了字母的話guesses left不會減少,可一直猜下去。
輸的畫面,輸了後會公佈答案,贏了也會就是了。
遊戲完結後會問你是否離開,只能答y或n,輸入其他會顯示輸入無效,答y的話遊戲會自動結束,答n的話會直接開始新遊戲。
code就不貼了,有人要我再貼吧。
┻┳|ω・) ♪
┳┻|⊂ノ
我用Python寫的第一個遊戲終於出來了,是猜字遊戲:
>>Hangman下載<<
下載Hangman EXE.rar後,解壓縮並運行hangman.exe進行遊戲,畫面大小請自己調整,我還不會調整∠( ᐛ 」∠)_
遊戲如下:
開始遊戲後會看到載入字庫的畫面,字庫word.txt的字可以自行增加,不過55900字已經夠玩了吧。下面會看到吊刑台,沒甚麼作用,只是用來顯示你有多快輸。
Word會顯示你猜對了的字母在該字的哪個位置,Guess是你猜過的字母,Misses是猜錯了的字母,Guess a letter要求玩家輸入一個字母。
猜錯的話就會開始出現吊頸男,上頭的guesses left會減少,減到0還沒猜到就結束,玩家輸,在0之前猜完就贏。
猜對了字母的話guesses left不會減少,可一直猜下去。
輸的畫面,輸了後會公佈答案,贏了也會就是了。
遊戲完結後會問你是否離開,只能答y或n,輸入其他會顯示輸入無效,答y的話遊戲會自動結束,答n的話會直接開始新遊戲。
code就不貼了,有人要我再貼吧。
2015年9月17日 星期四
[程式] Codecademy Python課程File Input/Output 5/9 Reflesh錯誤及解決方法
Codecademy Python 課程跑到File In/Out 5/9時,即使你的code打對了,它還是會出現以下錯誤:
Traceback (most recent call last):
File "python", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'text.txt'
並要求你Reflesh頁面。
解決方法(意外地簡單):
先在畫面左邊選擇6/9的課程,然後重新回到5/9的課程,重新提交你的code。
Traceback (most recent call last):
File "python", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'text.txt'
並要求你Reflesh頁面。
解決方法(意外地簡單):
先在畫面左邊選擇6/9的課程,然後重新回到5/9的課程,重新提交你的code。
標籤:
5/9
,
程式
,
Codecademy
,
Python
2015年9月10日 星期四
[程式/Mathematica] Initializing kernels無法完成的解決方法
Mathematica 10最近發生了一點更新問題,導至開啟時無法完成初始化Kernel,造成程式當掉。
解決方法如下:
請到以下位置:
Windows
C:\Users\<username>\AppData\Roaming\Mathematica\Paclets\Configuration
Linux
~/.Mathematica/Paclets/Configuration
Mac OS X
~/Library/Mathematica/Paclets/Configuration
尋找並刪除 pacletSiteData_10.pmd2 這個檔案,然後啟動Mathematica。
解決方法如下:
請到以下位置:
Windows
C:\Users\<username>\AppData\Roaming\Mathematica\Paclets\Configuration
Linux
~/.Mathematica/Paclets/Configuration
Mac OS X
~/Library/Mathematica/Paclets/Configuration
尋找並刪除 pacletSiteData_10.pmd2 這個檔案,然後啟動Mathematica。
2015年9月8日 星期二
[程式/Python] 小遊戲 - BattleShip Code分享
剛剛在Codecademy完成了BattleShip的練習,原本打算改成2P,不過我先把它改成Python34的格式再加入重新開始和結束的選項。老實說,這遊戲真的不太好玩,編碼如下:
當中加入了while loop和raise SystemExit()來作重新開始和結束遊戲的選擇。
from random import randint #function for print out the board def print_board(board): for row in board: print (" ".join(row)) #variable for restart re=1 while (re==1): #generate a game board board = [] for row in range(5): board.append(["O"]*5) ship_row = randint(0,len(board)-1) ship_col = randint(0,len(board[0])-1) print ("Battle Ship!") print_board(board) #for debug, del it after finish print ("(", ship_row, ",", ship_col, ")") #give 4 turns to guess for turn in range(4): print () print ("Turn ",turn+1) guess_row = int(input("Guess Row:")) guess_col = int(input("Guess Col:")) #different result according to the guess if guess_row == ship_row and guess_col == ship_col: board[guess_row][guess_col] = "W" print () print ("Congratulations! You sunk my battleship!") print_board(board) break else: print () if guess_row not in range(5) or guess_col not in range(5): print ("Oops, that's not even in the ocean.") elif board[guess_row][guess_col] == "X": print ("You guessed that one already.") else: board[guess_row][guess_col] = "X" print ("You missed my battleship!") print_board(board) if turn == 3: print ("Gome Over") print () #variable for asking restart res=1 while(res==1): response = input("Restart(Y/N)? ") print () response = response.upper() if response == "Y": res=0 elif response == "N": res=0 re=0 else: print ("Invalid Input") print () print () print () print () raise SystemExit("See You!")
當中加入了while loop和raise SystemExit()來作重新開始和結束遊戲的選擇。
標籤:
程式
,
BattleShip
,
Python
[程式] 如何在Blogger中使用SyntaxHighlighter(語法高亮)
最近寫的code越來越長,不太方使用截圖表示,所以在找了在Blogger使用SyntaxHighlighter的方法。綜觀多篇教學文,最簡單的是程式語言教學誌的方法,現抽出重點加以修良如下,完整教學請參考>>這裡<<。
在<head>和</head>之間加入以下編碼:
這裡已整合了23種可標記SyntaxHighlighter的語言,如只想使用其中一種,請參考程式語言教學誌的做法。
各程式的名稱和縮寫如下(點選程式名稱外連至官方範例):
使用SyntaxHighlighter的準備:
先到Blogger後台->範本->編輯html在<head>和</head>之間加入以下編碼:
這裡已整合了23種可標記SyntaxHighlighter的語言,如只想使用其中一種,請參考程式語言教學誌的做法。
在文章中使用SyntaxHighlighter:
在編寫完文章時,進入html模式,在你想要加入code的位置加入以下編碼:在/* 程式名或縮寫; */和/* 你的Code */填入相應的內容,發表文章後便能看到效果。不過加入SyntaxHighlighter後似乎無法預覽文章,建議在寫好整篇文章後再加入SyntaxHighlighter。/* 你的Code */
各程式的名稱和縮寫如下(點選程式名稱外連至官方範例):
程式名稱
|
縮寫
|
ActionScript3
|
as3,
actionscript3
|
Bash/shell
|
bash, shell
|
ColdFusion
|
cf,
coldfusion
|
C#
|
c-sharp,
csharp
|
C++
|
cpp, c
|
CSS
|
css
|
Delphi
|
delphi, pas,
pascal
|
Diff
|
diff, patch
|
Erlang
|
erl, erlang
|
Groovy
|
groovy
|
JavaScript
|
js, jscript,
javascript
|
Java
|
java
|
JavaFX
|
jfx, javafx
|
Perl
|
perl, pl
|
PHP
|
php
|
Plain Text
|
plain, text
|
PowerShell
|
ps,
powershell
|
Python
|
py, python
|
Ruby
|
rails, ror,
ruby
|
Scala
|
scala
|
SQL
|
sql
|
Visual Basic
|
vb, vbnet
|
XML
|
xml, xhtml,
xslt, html, xhtml
|
標籤:
程式
,
SyntaxHighlighter
2015年8月26日 星期三
[程式/Python] 在Codecademy寫的第一個Python程序 : Pig Latin
最近試著在Codecademy學寫Python,這是我寫的第一個程序:
把英文單字的字頭放到最尾,然後在後面加上ay的暗語。
把英文單字的字頭放到最尾,然後在後面加上ay的暗語。
不過寫這個的時候還沒學到for loop怎麼寫,上網查了一下寫法再試一下,那個range(a,b)原來只到 i = b-1,(a,b)不由a到b,總覺得很不舒服。
後記:
原來到這邊不需要寫這個程式,之後的課程會一步步教,而且有教"string".[a:b],可以不用for來寫:3
後記:
原來到這邊不需要寫這個程式,之後的課程會一步步教,而且有教"string".[a:b],可以不用for來寫:3
標籤:
程式
,
Codecademy
,
Pig Latin
,
Python
訂閱:
文章
(
Atom
)