Programming with MATLAB | ![]() ![]() |
代数演算子の多重定義
いくつかの代数演算は、多項式に対して有効で、polynomクラスに対して実現されるものです。代数演算子を多重定義するときは、演算を適用したいデータタイプを常に確認する必要があります。この節で、plus
,
minus
, mtimes
メソッドは、演算子polynom/polynomやpolynom/doubleの組み合わせでの加算、減算、乗算を行うためにpolynomクラスに対して定義されたものです。
+演算子の多重定義
p + q
は、@polynom/plus.m
関数が(p
とq
が、"オブジェクトの優先順位"で記述するような、より高い優先順位のオブジェクトでなく)存在するならば、その関数を呼び込みます。
つぎのM-ファイルは、polynomクラスに対する+演算子を定義します。
function r = plus(p,q) % POLYNOM/PLUS polynomに対して、p + q を実行 p = polynom(p); q = polynom(q); k = length(q.c) - length(p.c); r = polynom([zeros(1,k) p.c] + [zeros(1,-k) q.c]);
関数は、まず、二つの入力引数が多項式であることを保証しなければなりません。たとえば、つぎのような表現
p + 1
は、polynomとdoubleを含んでいますが、正常に機能します。それで、関数は、二つの係数ベクトルにアクセスし、二つを同じ長さにするために、必要ならばゼロを付け加えます。実際の加算は、2つの係数ベクトルのベクトル和です。最終的に、関数は、三度polynom
コンストラクタを呼び、適切なタイプの結果を作成します。
-演算子の多重定義
プラス(+)演算子と同じアプローチを使って、多重定義されたマイナス(-)演算子を実現できます。MATLABは、p
-q
を計算するために@polynom/minus.m
を呼びます。
function r = minus(p,q) % POLYNOM/MINUS polynoms に対して、p-q を実行 p = polynom(p); q = polynom(q); k = length(q.c) - length(p.c); r = polynom([zeros(1,k) p.c] - [zeros(1,-k) q.c]);
*演算子の多重定義
MATLABは、積p*q
を計算するためにメソッド@polynom/mtimes.m
を呼び出します。関数名の最初に付いている文字m
は、MATLABの行列(matrix)乗算の多重定義であることに起因しています。二つの多項式の乗算は、これらの係数ベクトルのコンボリューションです。
function r = mtimes(p,q) % POLYNOM/MTIMES polynoms に対して、p * q を実行 p = polynom(p); q = polynom(q); r = polynom(conv(p.c,q.c));
多重定義された演算子の使用
p = polynom([1 0 -2 -5])
を実行するとき、つぎの二つの関数@polynom/plus.m
と@polynom/mtimes.m
を呼び、
q = p+1
r = p*q
q = x^3 - 2*x - 4 r = x^6 - 4*x^4 - 9*x^3 + 4*x^2 + 18*x + 20
![]() |
Polynom subsrefメソッド | Polynomクラスに対する関数の多重定義 | ![]() |