フィルターのクリア

ガウスフィッティング​した後,フィッティン​グ曲線のピーク位置を​取得したいです.

36 ビュー (過去 30 日間)
Keishi Chiba
Keishi Chiba 2020 年 1 月 31 日
回答済み: Keishi Chiba 2020 年 2 月 5 日
ガウスフィッティングした後,フィッティング曲線のピーク位置を取得したいです.
f = fit(x.',DATA1.','gauss2')
上記のようにガウスフィッティングをした後,フィッティング曲線のピーク位置を数値として取り出したいと考えています.
findpeaksを使ってピーク位置を検出しようとしましたが,fが1×1のデータなのでできませんでした.(行列を用意しないといけないみたい)
cfitを行列に変換する方法も調べましたが,できませんでした.
fが数式として扱われているようなので,fの計算結果を一度行列に出力できればいいのかなとも考えているのですが,やり方がわかりません.
初歩的な質問で申し訳ございませんが,どなたかご教授いただければと思います.回答よろしくおねがいします.

採用された回答

Takumi
Takumi 2020 年 2 月 1 日
編集済み: Takumi 2020 年 2 月 1 日
近似関数の値を評価したい場合は、f(10)のようにするとx=10の点での値を評価できます。
以下に関数値を評価してピーク値を算出する例を示しますが,コード後半にあるように,微分値が0になる位置を補間によって求める方が少ない評価点で正確にピーク位置が求まりそうです.
[x,y] = titanium; % サンプルデータ
f = fit(x.',y.','gauss2'); % ガウス分布近似関数
xi = linspace(x(1),x(end),200)'; % 関数評価点
yi = f(xi); % 関数評価
plot(x,y,'ob'); % サンプルデータ
hold on
findpeaks(yi,xi); % ピーク位置表示
xx = xi(107:148); % 微分値評価区間
fx = differentiate(f, xx); % 微分値
xp = interp1(fx,xx,0); % ピーク位置 (微分値が0になる点を補間により求める)
plot(xp,f(xp),'.g'); % ピーク位置 (微分から)
figure
plot(xx,fx); % 微分値

その他の回答 (1 件)

Keishi Chiba
Keishi Chiba 2020 年 2 月 5 日
ありがとうございます.参考にさせていただきます.

カテゴリ

Help Center および File Exchange記述統計 についてさらに検索

Community Treasure Hunt

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

Start Hunting!