gnuplotでフォークト関数(ガウス+ローレンツ関数)のフィット

このQ&Aのポイント
  • ガウシアンとローレンツ関数を畳み込んだフォークト関数の近似的な解析がgnuplotでできるかどうか困っています。
  • 検索した結果、フォークト関数には積分が含まれているため、gnuplotではフィットできないと言われています。
  • 自作のフィッティングルーチンを作ることも考えましたが、大変なのでできればgnuplotで解析したいと思っています。
回答を見る
  • ベストアンサー

gnuplot で フォークト関数(ガウス+ローレンツ関数)のフィット

自然共鳴幅をもったピークフィット解析をgnuplotでしたいと考えています。 ガウシアンとローレンツ関数を畳み込んだものはフォークト関数 と呼ばれるそうですが、この関数を近似的にでもかまわないので 解析的にあらわすことはできないのでしょうか? 検索をしたところどうしてもフォークト関数を表すには 積分が入ってしまうそうなのでgnuplotではフィットできないのではと困っています。 数値解析てきな処方で構わないのですが何かご存じないですか? (自作のフィッティングルーチンを作ればいいのでしょうが、それちょっと  大変なので何とかgnuplotでやってしまいたい、と考えています)

質問者が選んだベストアンサー

  • ベストアンサー
  • atabouyo
  • ベストアンサー率100% (1/1)
回答No.1

疑似フォークト関数(Pseudo-Voigt function)という関数があります。 リンク先に載っているのを見ればわかると思いますが、単純にガウス分布とローレンツ分布を足し合わせただけのものです。 2通りパターンがあって、幅をそれぞれ独立として扱うか、同一として扱うかの違いで、用途によって使い分けます。 実際にフォークト関数でフィットするのは光電子分光などの電子系のスペクトルだと思いますが、それはそれぞれの幅(ドップラー幅とローレンツ幅)を知ることにより、それの由来を考察するためであることがほとんどだと思われます。なので、できれば疑似ではないフォークト関数でフィットしようと試みることをお勧めします。なぜなら、おそらく質問内容を踏まえるに、綺麗にフィットできることに自己満足して物理的な意味のないフィッティングになってしまうだろうからです。 光電子分光系の研究室では、主にリンク先で挙げたOriginというデータ解析ソフトを使用することが多い(と思われます)。教授に研究室にライセンスがないか聞いてみてはどうでしょうか? また、先ほど述べた各幅の物理的な意味は、量子光学の教科書を読めば絶対載っています。理解を深めるために一度目を通すことをお勧めします。

参考URL:
http://www.lightstone.co.jp/products/origin/pfmfunc/funclist.htm
politebrig
質問者

お礼

回答ありがとうございました。 せっかく心配して回答していただいたのですが一応(?)自己解決していました。 私は核物理の分光をしており解析での第一目的は面積を出すことで 幅を出すのは二次的な目的で、畳み込み積分を数値的に表してgnuplotの フィットへ投入することに成功たので現時点ではこれでよしとしておくつもりです。 (パラメタサーチには多少時間はかかりますが) これからの拡張するにはもっと勉強するのがよさそうですね。 ありがとうございます。

関連するQ&A

  • gnuplotでガウス-ローレンツ混合関数フィッティング

    物理学での実験データをgnuplotでガウス-ローレンツ混合関数フィッティングすることはできましたが,非対称項(x-p) -> (x-p)/[1+a*(x-p)/w], where -2≦a≦2 を取り入れるとエラー(Undefined value during function evaluation)が発生します.なぜでしょうか. ちなみにこの非対称項は 小島勇夫・福本夏生・倉橋正保;非対称ガウス―ローレンツ複合関数によるX線光電子分光スペクトルの波形解析;分析化学;Vol.35, No.10(19861005), pp. T96--T100 を参考にしました.

  • グラフのフィッティング

    学生実験で固体の共振曲線を求めようとしています。細い試料に振動を加えて(振幅ー周波数)のグラフを作製したのですがガウシアンでフィッティングすべきか、ローレンシアンでフィッティングすべきなのか分かりません。 両者の区別はどのようにするべきなんでしょう? どういう場合に適しているのか? あとフォークト関数とか言うのもあるようですが、これはどうなんでしょうか?積分が含まれているためgnuplotではフィッティングできません… 偽フォークト関数ならできるそうですが、そこまで突っ込む勇気がありません… ~おまけ~ 大学によって異なるとは思いますが、学生実験(大学2年)のレポートはどの程度の完成度を求められているのでしょうか?

  • ガウス関数と正規分布と関係について教えて下さい。

    Wikiによれば正規分布はガウス関数の部分集合だそうですけど、 ではこれらはどうやって使い分ければ良いのでしょうか? 例えば論文を見ていると結構ガウシアンフィッティングというのを行っていますが、これっておかしくないでしょうか? 実験データの統計をとるためにはガウシアンフィッティングではなく 正規分布フィッティング(?)みたいなものを使う必要があると思うのですが・・・

  • フィッティング

    何らかのピークのデータがあるとしますよね?それをデータ解析するのにフィッティングします。そのときよくあるガウシアンとローレンツィアン。これらがどういうフィッティングなのかを知りたいです。これを知らなかったらどういう場合にどういうフィッティングをしたらいいのかわかりませんよね?例えば、何を見たらのってたりするものなのでしょうか?自分で探してみたけど見つかりません。しかも今現在そのフィッティングが目の前まで差し迫ってきています。誰か助けて!

  • 最小二乗法

    粉末X線回折で得たデータをローレンツ関数を使ってピークフィッティングを試みています。 最小二乗法でやろうと思っているのですが、やり方がわかりません。 どなたか教えてくれないでしょうか。

  • ExcelでGaussian fittingをしたいのですが、どうすれば良いですか?

    A1・・・A1001にx軸の値が B1・・・B1001にy軸の値が入っているとします。 このデータをグラフ化したのちに、ガウシアン関数y=a+b*exp(-(x-c)^2/d^2)に対してフィッティングを行い、それぞれの定数を算出及び、その算出されたグラフを上に乗せるということをしたいのですが、 Excel VBAを使ってどのようにすれば良いのでしょうか? また、ピークが1本ではなく2本ある場合Multipeak Gaussian fittingというものでそれぞれのピークに対してフィッティングすることもできるそうなのですが、できればその方法についても教えて頂けないでしょうか? 自分でひな形くらい作って質問したいところですが、全くどうやって作れば良いのか検討もつかないのでどなたかよろしくお願い致します。

  • 最小二乗法における誤差の求め方

    こんばんは。 皆様よろしくお願いいたします。 あるデータにフィットさせる関数の係数を 最小二乗法を用いて、自分でプログラムを作って 見つけようと考えているのですが、 係数の誤差をどのように求めればいいかが わかりません。方法を探しても、直線の 場合はきれいに連立方程式が解けて、 誤差の伝播から計算するべき式が求まりますが、 一般の曲線の場合は解けないと思います。 gnuplotなどでフィッティングするとerrorが 出てきますが、あれはどのようにして 計算しているのでしょうか。 よろしくお願いいたします。

  • 確立密度関数の積分方程式

    ある事象の分析で、次の式にたどり着きました。 g(y) = ∫(-∞, ∞) f(x) f(x+y) dx ここでf(x) は未知の確立密度関数、g(y)は既知の関数です。 私が考えている問題では、fを正規分布で近似できるので、gも正規分布となり、gの分散の1/2がfの分散になりますが、ここで実用を離れ、一般の場合に(gは偶関数でなければならないなど、いくつか条件はあると思いますが)この積分方程式が解析的に解けるのかということに興味をもちました。 調べた範囲ではこれを扱ったサイトが見つかりませんでしたので、ご教示お願いします。

  • ガウス形とローレンツ形

    波形でよく出てくるガウス形とローレンツ形ですが、これら半値幅とピークの高さがわかれば形が決まりますよね。 そこで、半値幅とピーク高さの値が求まったとして、面積を求めたいと思っています。半値幅とピーク高さでガウス形とローレンツ形の面積を表わすことができるのでしょうか?面積の公式ってあるのでしょうか? 数学に詳しい方、よろしくお願いいたします。

  • カーブフィットを行うプログラムについて

    カーブフィットを行うプログラムについて質問があります。 下記は、周波数応答関数を入力し、 カーブフィットを行うプログラムですが、 プログラムの下4行の意味が全く分かりません。 (下4行とは、■マークが先頭に書いてあるものです) どうか何卒ご教授お願い致します。 わかりにくい質問の仕方をしてしまい、申し訳ないです。 ---------------------- clear variables global;comgui('close all') fm='wagawara_ryou10_'; n1=101; n2=142; n=0; for i=n1:n2 fnm=strcat(fm,int2str(i),'_h.txt') [IIw,Mag,Phi,Q,Q]=textread(fnm,'%f %f %f %f %f','headerlines',3); n=n+1; IIxf(:,n)=complex(Mag.*cos(Phi*pi/180),Mag.*sin(Phi*pi/180)); end %---初期固有振動数データと減衰比データの読み込み.2005.9.13--- fn='wagawara_ryou10_mif_pk_dm.txt' [peak,zeta]=textread(fn,'%f %f','headerlines',2); pkze=[peak,zeta]; %---処理開始--- iiplot %伝達関数のプロット XF(5).po=pkze %初期固有振動数と減衰比を代入。 idcom('e 15 371'); %idcom('e i w') i:帯域幅,w:中心周波数 idcom('est'); idcom('eup .05 .002 -10'); %idcom('eup dstep fstep num i') ■out=id_rm(XF(5),[1 1 1 1]); ■XF(3)=res2xf(out,IIw); ■iicom('IIxhOn'); ■[som2,ga2,pbs2,cps2]=res2nor(IIres,IIpo,IDopt); ---------------------- よろしくお願い致します。 失礼します。