質問: 【初歩的質問】トライアル版の関数fitでガウス近似(指数近似)を行いたいのですが、うまくいきません。 https://jp.mathworks.com/help/curvefit/gaussian.html 上記の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);
回答: こんばんはです。 (他言語の能力があるないに関わらず)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関数にいれることができます。 いかがでしょうか? 菱田