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

조회 수: 16 (최근 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
Hiroyuki Hishida
Hiroyuki Hishida 2020년 5월 14일
こんばんは。
最初に、「様」は勘弁してくださいませ。。。
さて、ご質問の内容ですが、fit関数で返されるのはオブジェクト(ここではf1)ですので、「.」を使ってアクセスできます。例えば、f1.a1という具合です。
f1.hogehogeなどとしてみますと、以下のようなメッセージが出力されます。a1以外には、b1、c1などが使えることが確認できます。
名前 'hogehoge' は、係数または問題パラメーターではありません。cfit または sfit の係数と問題パラメーターには、'f.a1' のよう
なドット表記でのみアクセスできます。
現在の近似では次のプロパティにアクセスできます: a1, b1, c1
係数の名前と値は、p1 = f.p1 のように名前で、あるいは names = coeffnames(f) のように関数 coeffnames または関数
coeffvalues を使用して取得できます。
メソッドを使用するには、代わりに plot(f) のような関数表記を使用してください。
いかがでしょうか?
菱田
Takeru Katagiri
Takeru Katagiri 2020년 5월 21일
菱田さん
ご回答ありがとうございます。ならびに返事が遅くなり申し訳ありません。
菱田さんから教えて頂いた方法で、無事目的を達成できました。
本当にありがとうございました。今後ともお助けいただけると幸いです。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Curve Fitting Toolbox 入門에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!