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 |