fc2ブログ

初心者によるMATLABメモ

3次元形状やってんのになぜかMATLABを使わされることになった人のメモ。

 

検索エンジンから来た方は読みたい記事が表示されていない可能性があります。
その場合、左メニューのフォームでブログ内を検索すると見たい記事を見れると思います。
もしくは、カテゴリー名をクリックしていただくと各カテゴリーの記事のリストが見れます。

[数値解析] 高次方程式(2次方程式)を解く

MATLABで1変数の高次方程式を解く方法ときには,roots()が使えます。
手始めに2次方程式で説明します。


MATLABでは,ここに書いてあるように,次数の高い項から行ベクトルとして係数を書くことで,多項式を表現できます。
つまり上記の2次方程式なら,下記です。
C=[a, b, c]

これを頭にいれて,下記の方程式を解いてみます。


この方程式は,次の形に変形できるので解は-1と-2のはずです。


実際に方程式をCとして表現し、roots()を利用して解いてると,下記のように,解は列ベクトルとして出力されます。
解も先に書いたように,-2と-1であることが確認できます。
>> C=[1 3 2];
>> roots(C)
ans =
    -2
    -1

また,重解の場合には下記のように2個同じものが解として得られます。
>> roots([1 2 1])
ans =
    -1
    -1

これが不都合な場合は,下記のようにunique()で除去してください。
>> unique(roots([1 2 1]))
ans =
    -1

また,roots()で解を求めると下記のように複素数の解も求まります。
>> A=roots([1 -2 4 4])
A =
   1.3425 + 2.0092i
   1.3425 - 2.0092i
  -0.6850  

この場合に実数解のみが必要な場合には下記のようにすればよいでしょう。
>> B=A(imag(A)==0)
B =
   -0.6850

また,コレと同様に,下記のような高次多項式で表される方程式についても同じように解くことが出来ます。


この多項式なら,下記のような形で表現します。


例えば,下記の5次方程式を解いてみます。


まず方程式は下記で表現されます。
>> C = [1, 8, 18, 4, -19, -12];

この場合もroots()を用いて下記のように解くことがます。
>> roots(C)
ans =
   -4.0000
   -3.0000
    1.0000
   -1.0000
   -1.0000


参考:MATLAB Function Reference - roots
参考:MATLAB:マニュアル:R14:MATLAB:数学:サイバネットシステム-多項式の表現
参考:MATLAB Function Reference - imag
スポンサーサイト



このエントリに付けられたタグ|MATLAB数値解析方程式高次方程式二次方程式一元二次方程式roots