MATLAB solveでRootOfとかいう表記が出る場合
symbolicmath Toolboxを最近使うようになったもののいろいろとよくわからないことが多いので
なにか問題にハマった時にはとりあえずメモをするようにしています。
環境は MATLAB2015a です。
solveで方程式を解いたのにRootOf(~,z,1)となってよくわからない
symbolicで方程式を解かせるという思考停止をしていると次数の高い場合などには
次のような結果を返すことがあります。
【 コード入力例 】
syms x a solve(x^4 + x^3 + a == 0, x)
【 実行結果 】
ans = RootOf(z^4 + z^3 + a, z)
やる気あんのかw
解決策
実はsolveには変数’MaxDegree’というものが存在しそれ以上の次数の式は解こうとしません。
この変数のデフォルト値は2になっており,
つまり2次より複雑な方程式は特に指定してあげないかぎり解いてくれないのです。
この場合は’MaxDegree’を4に設定することできちんと解くことができます。
【 コード入力例 】
syms x a S = solve(x^4 + x^3 + a == 0, x, 'MaxDegree',4) pretty(S) %図示
どのみちかなり長い式が出ます。prettyというコマンドを打つことである程度まとまった形で見せてくれますがそれでも
この解決策が直接役に立つ場面は早々無いかもしれませんね…
+- -+ | #2 - #3 - 1/4 | | | | #3 + #1 - 1/4 | | | | #3 - #1 - 1/4 | | | | - #3 - #2 - 1/4 | +- -+ where / 1/3 \1/2 | 9 #7 #6 9 #6 2/3 | | ---------- - ---- - 9 #7 #6 - 12 (a - 3/256) #6 - #5 | \ 2 64 / #1 == -------------------------------------------------------------- #4 / 1/3 \1/2 | 9 #7 #6 9 #6 2/3 | | ---------- - ---- - 9 #7 #6 - 12 (a - 3/256) #6 + #5 | \ 2 64 / #2 == -------------------------------------------------------------- #4 #6 #3 == ------- 1/6 6 #7 / 1/3 \1/4 1/6 | 9 #7 2/3 | #4 == 6 #7 | 12 a + ------- + 9 #7 | \ 4 / 1/2 1/2 1/2 3 3 6 (9 a + #8) #5 == ------------------------- 8 / 1/3 \1/2 | 9 #7 2/3 | #6 == | 12 a + ------- + 9 #7 | \ 4 / a #8 #7 == - + -- 2 18 1/2 / 135 a 2 3 \1/2 #8 == 3 | ----- + 18 (a - 3/256) - 256 (a - 3/256) - 189/65536 | \ 256 /
なっが!!!!