Mathematica里Break[]似乎跳出了兩個循環,怎麼解(抱歉,檢查後發現並沒有跳出兩循環)?
用Mathematica寫了一個程序,將矩陣化為行標準型(代碼在下面,為了判斷哪裡出了問題,多加了幾個Print),但是紅線處的Break似乎跳出了兩個For循環,直接執行了紅線處的j++(可以從out中看出),這個怎麼解?
(檢查後發現並沒有跳出兩個循環,是
If[k &> m,
zero = 1,
Continue[]
]
中多餘了Continue[])
修改後代碼在後面
out如下:
代碼如下:
A = {{0, 1, 2, -4, 1}, {1, -1, -1, 1, 0}, {2, -2, -4,
6, -1}, {3, -3, -5, 7, -1}};
A // MatrixForm
m = 4; n = 5; zero = 0;
T = Table[x, {x, 1, n, 1}];
For[i = 1; j = 1, i &<= m j &<= n, j++; Print[j], Print[i, j]; If[A[[i, j]] == 0, For[k = i + 1, k &<= m, k++, If[A[[k, j]] == 0, Continue[], T[[1]] = A[[i]]; A[[i]] = A[[k]]; A[[k]] = T[[1]]; Print["跳出"]; Break[] ] ]; If[k &> m,
zero = 1,
Continue[]
]
];
Print[A // MatrixForm];
If[zero == 0,
A[[i]] = A[[i]]/A[[i, j]];
For[p = 1, p &<= m, p++, If[p == i, Continue[], A[[p]] = A[[p]] - A[[p, j]]*A[[i]] ] ]; i++, zero = 0; Continue[] ] ] A // MatrixForm Clear["Global`*"]修改後代碼:
A = {{0, 1, 2, -4, 1}, {1, -1, -1, 1, 0}, {2, -2, -4,
6, -1}, {3, -3, -5, 7, -1}};
A // MatrixForm
m = 4; n = 5; zero = 0;
T = Table[x, {x, 1, n, 1}];
For[i = 1; j = 1, i &<= m j &<= n, j++, If[A[[i, j]] == 0, For[k = i + 1, k &<= m, k++, If[A[[k, j]] == 0, Continue[], T[[1]] = A[[i]]; A[[i]] = A[[k]]; A[[k]] = T[[1]]; Break[] ] ]; If[k &> m,
zero = 1
]
];
If[zero == 0,
A[[i]] = A[[i]]/A[[i, j]];
For[p = 1, p &<= m, p++, If[p == i, Continue[], A[[p]] = A[[p]] - A[[p, j]]*A[[i]] ] ]; i++, zero = 0; Continue[] ] ] A // MatrixForm Clear["Global`*"]謝謝!
你不要問怎麼改了...社區基本達成一致了, 如果出現For那麼就不幫他改...
還有什麼Continue, Break...你咋不直接用Goto, Label 寫彙編呢...
我看了下就是求行階梯矩陣唄...
有個內置函數 RowReduce 了解一下...
或許有的人覺得實現基礎演算法是在鍛煉編程能力, 其實這是沒意思的事, 尤其是在函數式編程里...
你管他這個函數誰構造的, 用不就行了...
推薦閱讀:
※為何Mathematica解三角函數方程組可行性這麼低呢?
※如何找到mathmatica最新幾版的學習教材教程?
※Mathematica還有哪些美麗的地方?
※mathematica 能 批量生成自定義函數嗎 幫助都翻破了 找不到解決方法?
TAG:WolframMathematica |