1

表形式の XY データからガウス関数 (別名ベル曲線) へのカーブ フィッティングを行うアルゴリズムを探しています。グーグルで検索すると、Matlab 用のガウス フィッティング アルゴがいくつか見つかります。

https://ccrma.stanford.edu/~jos/sasp/Fitting_Gaussian_Data.html

http://jila.colorado.edu/bec/BEC_for_everyone/matlabfitting.htm

仕事にはMatlabの「ポリフィット」機能を使用しているようです。

Lua 言語 (ガウスまたはポリフィット) のアルゴリズムをすぐに作成したのを見た人はいますか? そうでない場合は、Lua のスキルが限られているため、そのようなアルゴリズムを作成/移植するのに 1 日かかる可能性があるため、助けていただければ幸いです。

4

2 に答える 2

2

これが、ノイズの多い測定データからガウスフィットを抽出する私の試みです。

require 'gsl'
require 'math'

--x=x coordinates, y=y coordinates
--clip=relative clip/ignore level 0..1 (i.e 0.1 removes values below 10% of max amplitide)
--removeoffset=set to true if y data offset should be removed
function gaussianFit( x, y, clip, removeoffset )
    local xx = {}
    local yy = {}
    local yoffset=0

    if removeoffset==nil or removeoffset==false then
    else --remove y data offset
        yoffset=gsl.Vector(y):min()
    end

    local ymax=gsl.Vector(y):max()-yoffset

    --pick only data points that has y coord larger than clip level
    for i=1,#x do
        if (y[i]-yoffset) > (clip*ymax) then
            table.insert(xx, x[i])
            table.insert(yy, math.log(y[i]-yoffset))
        end
    end

    local xvect = gsl.Vector(xx)
    local yvect = gsl.Vector(yy)

    --fit to polynomial
    local poly3 = gsl.fit.poly(3) -- a third degree polynomial
    local fit = gsl.lsfit({xvect, poly3}, yvect, nil, "fmulti") -- fits xx and yy with poly3

    --convert to gauss coeffs
    local A2=fit:coeffs()[3]
    local A1=fit:coeffs()[2]
    local A0=fit:coeffs()[1]

    local sigma=math.sqrt(-1/(2*A2))
    local mu=A1*math.pow(sigma,2)
    local A=math.exp(A0+math.pow(mu,2)/(2*math.pow(sigma,2)))

    return sigma, mu, A
end

xx={1, 2, 3, 4, 5, 6, 7, 8, 9}
yy={1, 2, 4, 6, 4, 3, 2, 1, 1}
sigma,mu,A=gaussianFit(xx,yy,0.1,false)
print(sigma.." "..mu.." ".. A)
--prints 2.2829275461334 4.6387484511153 4.201115115886
于 2012-01-19T16:51:08.070 に答える
1

方程式を線形形式に再配置してから、 Paul Bourke による線形回帰(ページの少し下) で説明されている方法を使用できます。

必要に応じて、再配置プロセスを実演できます。

本当に必要な場合は、Lua で最適適合アルゴリズムの実装を提供できます。

于 2012-01-18T20:19:11.373 に答える