code: def fit_theta(self):
          
          x = range(1, self.point_num + 1)
          y = self.trial_history
          for i in range(NUM_OF_FUNCTIONS):
              model = curve_combination_models[i]
              try:
                  # The maximum number of iterations to fit is 100*(N+1), where N is the number of elements in `x0`.
                  if model_para_num[model] == 2:
                      a, b = optimize.curve_fit(all_models[model], x, y)[0]
                      model_para[model][0] = a
                      model_para[model][1] = b
                  elif model_para_num[model] == 3:
                      a, b, c = optimize.curve_fit(all_models[model], x, y)[0]
                      model_para[model][0] = a
                      model_para[model][1] = b
                      model_para[model][2] = c
                  elif model_para_num[model] == 4:
                      a, b, c, d = optimize.curve_fit(all_models[model], x, y)[0]
                      model_para[model][0] = a
                      model_para[model][1] = b
                      model_para[model][2] = c
                      model_para[model][3] = d
              except (RuntimeError, FloatingPointError, OverflowError, ZeroDivisionError):
                  # Ignore exceptions caused by numerical calculations
                  pass
              except Exception as exception:
                  logger.critical("Exceptions in fit_theta:", exception)
docs: use least squares to fit all default curves parameter seperately
          
          Returns
          -------
          None