MATLAB Answers

【初歩的質問】トライ​アル版の関数fitで​ガウス近似(指数近似​)を行いたいのですが​、うまくいきません。

15 ビュー (過去 30 日間)
Takeru Katagiri
Takeru Katagiri 2020 年 5 月 13 日
コメント済み: Takeru Katagiri 2020 年 5 月 21 日
上記のURLの手順で、ガウス モデルによる対話的な近似 はできるのですが、関数 fit によるガウス モデル近似がうまくできません。
Xとzf10の行列はお互い7897×1なのですが下記の方法だと、
エラー: fit>iFit (line 135)
X は 1 列または 2 列の行列でなければなりません。
と表示されます。どのようにしたらうまくできますか。
加えて、Xに対して異なるzf20,zf30,・・・・・とあり、
すべてのzf行列において、ガウス関数のa1,b1,c1,a2,b2,c2,・・・(a は振幅、b は重心 (の位置) であり、c はピーク幅)を保管し、比較したいのですが、プログラム内で一気に計算して、a,b,cの値を保存する方法はありませんか。
初歩的な質問で申し訳ありません。よろしくお願いします。
f=fit(X.',zf10.','gauss1');
plot(f,X,zf10);

採用された回答

Hiroyuki Hishida
Hiroyuki Hishida 2020 年 5 月 13 日
こんばんはです。
(他言語の能力があるないに関わらず)MATLAB初心者のはまりポイントだと思いますので、参考になるであろうコードを添付して、解説します。
[x,y] = titanium;
f1=fit(x.', y.', 'gauss2');
figure(1);
plot(f1,x,y)
X=rand(100,1);
zf10 = rand(100,1);
f2=fit(X, zf10, 'gauss1');
figure(2);
plot(f2, X, zf10);
前半は、デモコードそのままですが、ポイントは1行目と2行目です。
[x,y]はベクトルと言えばベクトルなのですが、大きさは1 x 49となっており1行49列の大きさです。関数fitの引数は、1列もしくは2列である必要がありますので、2行目で転置 ' させています。しかし ' のあとに , をおくと、これまたエラーになりますので、要素ごとの処理をさせるようにして、このエラーを回避しています。
後半は、即興で書いたものになりますが、100行1列の変数を2つ定義しています。この場合は、そのままfit関数にいれることができます。
いかがでしょうか?
菱田
  5 件のコメント
Takeru Katagiri
Takeru Katagiri 2020 年 5 月 21 日
菱田さん
ご回答ありがとうございます。ならびに返事が遅くなり申し訳ありません。
菱田さんから教えて頂いた方法で、無事目的を達成できました。
本当にありがとうございました。今後ともお助けいただけると幸いです。

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!