ある配列データS,S​1,S2についてS=​a*S1+b*S2と​なるような係数a,b​の計算

2 views (last 30 days)
mushi77
mushi77 on 10 Feb 2022
Answered: Toru Ikegami on 15 Feb 2022
EDXや分光分析などで得られるスペクトルデータSに対して、事前にデータベース化されている個別元素1,2のスペクトルデータS1,S2を用いて、それぞれの元素の定量値や元素比率などを推定するような計算をしています。
最小二乗法を用いた計算式からS=a*S1+b*S2となるa,bを計算する式をたてているのですが、もっと簡単にmatlabにこれらを計算させる関数などは用意されているのでしょうか?
polyfitのように線形多項式係数を求めるものは見つかったのですが、任意のデータS1,S2を用いた関数が見つからず質問させていただきました。
上記のようなスペクトル解析を想定しており、S1^2のようなベースデータの高次については考慮する必要はありません。
特定ツールボックス機能でも結構です。
よろしくお願いいたします。

Answers (1)

Toru Ikegami
Toru Ikegami on 15 Feb 2022
こんにちは
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
ans = 2×1
0.3000 0.8000
Moore-Penrose の pseudo-inverse を使用しても同様のことが出来ます.
pinv(So)*S
ans = 2×1
0.3000 0.8000
両者の違いについてはドキュメントを参照ください.

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!