ある配列データS,S1,S2についてS=a*S1+b*S2となるような係数a,bの計算
4 ビュー (過去 30 日間)
古いコメントを表示
EDXや分光分析などで得られるスペクトルデータSに対して、事前にデータベース化されている個別元素1,2のスペクトルデータS1,S2を用いて、それぞれの元素の定量値や元素比率などを推定するような計算をしています。
最小二乗法を用いた計算式からS=a*S1+b*S2となるa,bを計算する式をたてているのですが、もっと簡単にmatlabにこれらを計算させる関数などは用意されているのでしょうか?
polyfitのように線形多項式係数を求めるものは見つかったのですが、任意のデータS1,S2を用いた関数が見つからず質問させていただきました。
上記のようなスペクトル解析を想定しており、S1^2のようなベースデータの高次については考慮する必要はありません。
特定ツールボックス機能でも結構です。
よろしくお願いいたします。
0 件のコメント
回答 (1 件)
Toru Ikegami
2022 年 2 月 15 日
こんにちは
MATLABのバックスラッシュ演算子( \ )ひとつでご所望の計算を行うことが出来ます.
信号Sを二つの信号,の重ね合わせで表すというのを行列表記すると次のようになりますね.
この線形方程式を係数ベクトルについて解けばよいわけですが,行列は正方行列ではないので逆行列を掛けることは出来ません.このような線形方程式を解く手段として,MATLABでは演算子 \ (バックスラッシュ)が用意されています.
ダミー信号で例示します.サイン波とコサイン波を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
両者の違いについてはドキュメントを参照ください.
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!