#!/usr/bin/env ruby
require("rbgsl")
N = 100
y0 = 1
A = 1.5
fc = 0.7
phi = 0.2
r = GSL::Rng.alloc()
x = GSL::Vector.linspace(0, 12, N)
y = y0 + A*GSL::Sf::sin(fc*x+phi) + 0.1*r.gaussian(1, N)
coef, err, chi2, dof = GSL::MultiFit::FdfSolver.fit(x, y, "sin")
y0 = coef[0]
amp = coef[1]
fc = coef[2]
phi = coef[3]
p coef
p err
GSL::graph(x, y, y0+amp*GSL::Sf::sin(fc*x+phi))