コード例 #1
0
ファイル: ST-0021.py プロジェクト: ailever/openapi
def fourier_series(x, f, n=0):
    # Make the parameter objects for all the terms
    a0, *A = parameters(','.join([f'a{i}' for i in range(0, n + 1)]))
    B = parameters(','.join([f'b{i}' for i in range(1, n + 1)]))
    # Construct the series
    series = a0 + sum(ai*cos(i*f*x) + bi*sin(i*f*x)
                     for i, (ai, bi) in enumerate(zip(A, B), start=1))
    return series
コード例 #2
0
def Fourier_series(x, f, n = 0):
    """Construit la série de Fourier comme modèle de référence pour le fitting."""

    a0, *cos_a = parameters(','.join(['a{}'.format(i) for i in range(0, n + 1)]))
    sin_b = parameters(','.join(['b{}'.format(i) for i in range(1, n + 1)]))
    series = a0 + sum(ai * cos(i * f * x) + bi * sin(i * f * x) for i, (ai, bi) in enumerate(zip(cos_a, sin_b), start=1))

    return series
コード例 #3
0
 def fourier_series(self, x, f, n=2):
     a0, *cos_a = parameters(','.join(
         ['a{}'.format(i) for i in range(0, n + 1)]))
     sin_b = parameters(','.join(['b{}'.format(i)
                                  for i in range(1, n + 1)]))
     series = a0 + sum(
         ai * cos(i * f * x) + bi * sin(i * f * x)
         for i, (ai, bi) in enumerate(zip(cos_a, sin_b), start=1))
     return series
コード例 #4
0
def fourier_series(x, f, n=0):
    """
    Returns a symbolic fourier series of order `n`.

    :param n: Order of the fourier series.
    :param x: Independent variable
    :param f: Frequency of the fourier series
    """
    # Make the parameter objects for all the terms
    a0, *cos_a = parameters(','.join(['a{}'.format(i) for i in range(0, n + 1)]))
    sin_b = parameters(','.join(['b{}'.format(i) for i in range(1, n + 1)]))
    # Construct the series
    series = a0 + sum(ai * cos(i * f * x) + bi * sin(i * f * x)
                     for i, (ai, bi) in enumerate(zip(cos_a, sin_b), start=1))
    return series
コード例 #5
0
def fit_model(df_avg, frequency):

    Model = {
        y: a * exp(-b * x) + c * sin(2 * pi * frequency * x + phi) + delta
    }
    avg_osc = df_avg.groupby("time").mean()["psc"]
    argmax_ind = avg_osc.values.argmax()
    ydata = avg_osc.values[argmax_ind:]
    xdata = real_time[argmax_ind:]
    sigma_y = df_avg.groupby("time").std()["psc"].values[argmax_ind:]

    fit = Fit(model, x=xdata, y=ydata, sigma_y=sigma_y)
    fit_result = fit.execute()
    yfit = model[y](x=xdata, **fit_result.params)
    return avg_osc, xdata, ydata, fit_result, yfit
コード例 #6
0
def fourier_series(x, period_list):
    """
    Returns a symbolic fourier series of order `n`.

    :param n: Order of the fourier series.
    :param x: Independent variable
    :param f: Frequency of the fourier series
    """
    # Make the parameter objects for all the terms
    (a0, ) = parameters("a0")
    cos_a = parameters(",".join(
        ["a{}".format(i) for i in range2(len(period_list))]))
    sin_b = parameters(",".join(
        ["b{}".format(i) for i in range2(len(period_list))]))
    # Construct the series
    print(period_list)
    series = a0 + sum(
        ai * cos(2 * math.pi / tau * x) + bi * sin(2 * math.pi / tau * x)
        for (tau, ai, bi) in zip(period_list, cos_a, sin_b))
    return series
コード例 #7
0
 def do_glob_fit(self):
     """this method performs global fit on the CCPS"""
     # create parameters for symfit
     dist = self.data.keys()
     v = sf.parameters('v_', value=500, min=0, max=1000)[0]
     d = sf.parameters('D_', value=50, min=0, max=100)[0]
     y0_p = sf.parameters(', '.join('y0_{}'.format(key)
                                    for key in self.data.keys()),
                          min=0,
                          max=1)
     b_p = sf.parameters(', '.join('b_{}'.format(key)
                                   for key in self.data.keys()),
                         value=50,
                         min=0,
                         max=100)
     # create variables for symfit
     x = sf.variables('x')[0]
     y_var = sf.variables(', '.join('y_{}'.format(key)
                                    for key in self.data.keys()))
     # get fixed & shared params
     dx, a, w2, a2, tau, s, wz2 = self.get_params()
     # create model
     model = sf.Model({
         y: y0 + b * sf.exp(-(dst * dx - v * (sf.cos(a)) * x)**2 /
                            (w2 + 0.5 * a2 + 4 * d * x)) *
         sf.exp(-(x**2) * (v * sf.sin(a) - dx / tau)**2 /
                (w2 + 0.5 * a2 + a * d * x)) / (4 * d * x + w2 + 0.5 * a2)
         for y, y0, b, dst in zip(y_var, y0_p, b_p, dist)
     })
     # dependent variables dict
     data = {y.name: self.data[dst] for y, dst in zip(y_var, dist)}
     # independent variable x
     max_time = len(self.data[20]) * tau
     x_data = np.linspace(0, max_time, len(self.data[20]))
     # fit
     fit = sf.Fit(model, x=x_data, **data)
     res = fit.execute()
     return res
コード例 #8
0
def fourier_series(x, f, n=0):
    a0, *cos_a = parameters(",".join([f"a{i}" for i in range(n + 1)]))
    sin_b = parameters(",".join([f"b{i}" for i in range(1, n + 1)]))
    series = a0 + sum(ai * cos(i * f * x) + bi * sin(i * f * x)
                      for i, (ai, bi) in enumerate(zip(cos_a, sin_b), start=1))
    return series
コード例 #9
0
ファイル: global_fit.py プロジェクト: ZviBaratz/flics-app
    def run(
            self,
            angle=0.02472,
            pixel_to_micron_x=9.81e-8,
            beam_waist_xy=0.5e-6,
            beam_waist_z=2e-6,
            rbc_radius=4e-6,
            s=1,
            tau=0.001,
    ):
        # create parameters for symfit
        distances = self.data.keys()
        v = sf.parameters('v_', value=500, min=0, max=1000)[0]
        d = sf.parameters('D_', value=50, min=0, max=100)[0]
        y0_p = sf.parameters(
            self.create_distance_strings('y0'),
            min=0,
            max=1,
        )
        b_p = sf.parameters(
            self.create_distance_strings('b'),
            value=50,
            min=0,
            max=100,
        )
        # create variables for symfit
        x = sf.variables('x')[0]
        y_var = sf.variables(self.create_distance_strings('y'))

        # create model
        # pixel_to_micron_x
        model = sf.Model({
            y:
            y0 + b * sf.exp(-(dst * pixel_to_micron_x - v * (sf.cos(angle)) * x)**2 / (beam_waist_xy + 0.5 * rbc_radius**2 + 4 * d * x)) * sf.exp(-(x**2) * (v * sf.sin(angle) - pixel_to_micron_x / tau)**2 / (beam_waist_xy + 0.5 * rbc_radius**2 + angle * d * x)) / (4 * d * x + beam_waist_xy + 0.5 * rbc_radius**2)
            for y, y0, b, dst in zip(y_var, y0_p, b_p, distances)
        })
        # dependent variables dict
        data = {y.name: self.data[dst] for y, dst in zip(y_var, distances)}
        # independent variable x
        n_data_points = len(list(self.data.values())[0])
        max_time = n_data_points * tau
        x_data = np.linspace(0, max_time, n_data_points)
        # fit
        fit = sf.Fit(model, x=x_data, **data)
        res = fit.execute()
        return res