【初歩的質問】トライアル版の関数fitでガウス近似(指数近似)を行いたいのですが、うまくいきません。
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Takeru Katagiri
il 13 Mag 2020
Commentato: Takeru Katagiri
il 21 Mag 2020
上記の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 Commenti
Risposta accettata
Hiroyuki Hishida
il 13 Mag 2020
こんばんはです。
(他言語の能力があるないに関わらず)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 Commenti
Hiroyuki Hishida
il 14 Mag 2020
こんばんは。
最初に、「様」は勘弁してくださいませ。。。
さて、ご質問の内容ですが、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) のような関数表記を使用してください。
いかがでしょうか?
菱田
Più risposte (0)
Vedere anche
Categorie
Scopri di più su 内挿 in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!