こんにちは
MATLABのバックスラッシュ演算子( \ )ひとつでご所望の計算を行うことが出来ます.
信号Sを二つの信号
,
の重ね合わせで表すというのを行列表記すると次のようになりますね.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894675/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894680/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894685/image.png)
この線形方程式を係数ベクトル
について解けばよいわけですが,行列
は正方行列ではないので逆行列を掛けることは出来ません.このような線形方程式を解く手段として,MATLABでは演算子 \ (バックスラッシュ)が用意されています.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894690/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894695/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/894700/image.png)
ダミー信号で例示します.サイン波とコサイン波を0.3と0.8の割合で足し合わせた信号を作ります.
x = (0:0.01:1)';
S1 = sin(2*pi*x);
S2 = cos(2*pi*x);
a = 0.3;
b = 0.8;
S = a*S1+b*S2;
So = [S1 S2];
重ね合わせの係数を計算します.
So\S
Moore-Penrose の pseudo-inverse を使用しても同様のことが出来ます.
pinv(So)*S
両者の違いについてはドキュメントを参照ください.