【初歩的質問】トライアル版の関数fitでガウス近似(指数近似)を行いたいのですが、うまくいきません。
27 次查看(过去 30 天)
显示 更早的评论
上記の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);
0 个评论
采纳的回答
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
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) のような関数表記を使用してください。
いかがでしょうか?
菱田
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!