質問: fit(x.',data1.','gauss2') 上記のようにガウスフィッティングをした後,フィッティング曲線のピーク位置を数値として取り出したいと考えています. findpeaksを使ってピーク位置を検出しようとしましたが,fが1×1のデータなのでできませんでした.(行列を用意しないといけないみたい) cfitを行列に変換する方法も調べましたが,できませんでした. fが数式として扱われているようなので,fの計算結果を一度行列に出力できればいいのかなとも考えているのですが,やり方がわかりません. 初歩的な質問で申し訳ございませんが,どなたかご教授いただければと思います.回答よろしくおねがいします.
回答: 近似関数の値を評価したい場合は、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); % 微分値