Более точная подгонка кривой - PullRequest
1 голос
/ 27 сентября 2019

Я сделал подгонку кривой с помощью функции curve_fit в scipy.Но подгонка по кривой не была для меня хорошей.Есть ли способ улучшить подгонку кривой?Ниже код Python - это то, что я написал.

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

minus_eta_total =[-0.004, -0.0116, -0.02604, -0.04, -0.08, -0.12, -0.16, -0.2, -0.24, -0.288, -0.3456, -0.4]

I_d_infil_0_sub_1 = [0.004204675, 0.012262849, 0.028331318, 0.045626793, 0.113222124, 0.224759087, 0.403571293, 0.678854397, 1.090002487, 1.837299526, 3.260471157, 5.311900419]
ASR_el = 0.0075

eta_infil_0_sub_1 = np.array(minus_eta_total) + (np.array(I_d_infil_0_sub_1)*np.array(ASR_el))

cons_eq = 8.3144 * 1073 / (0.5 * 4 * 96485)

def func(x, a, b):
    return -cons_eq*np.log(x/a)-b*x

popt_infil_0_sub_1, pcov_infil_0_sub_1 = curve_fit(func, I_d_infil_0_sub_1, eta_infil_0_sub_1)

plt.clf()

plt.plot(I_d_infil_0_sub_1, eta_infil_0_sub_1, linestyle = '--',  marker='o', color='k', label = 'original')
plt.plot(I_d_infil_0_sub_1, func(np.asarray(I_d_infil_0_sub_1),*popt_infil_0_sub_1), 'k', label='fit: $\mathit{j_0}$=%5.4f, R$_{ohm}$=%5.4f' % tuple(popt_infil_0_sub_1))

plt.ylim(-0.42, 0.02)
plt.xticks(np.arange(0, 12, 2))
plt.yticks(np.arange(0, -0.42, -0.05))
plt.xlabel('$\mathit{j}$ ($A/cm^2$)', fontsize=14)
plt.ylabel('-\u03b7$_c$ (V)', fontsize=14)  # \u03bcm = micro(\u03bc) + meter(m)
plt.legend(loc='upper right')
plt.show(block = False)

1 Ответ

0 голосов
/ 28 сентября 2019

Подгонка не так хороша, как ожидалось, вероятно, потому что выбранное уравнение не совсем удобно.

Например, если мы выбрали уравнение:

y (x) = (exp (-a * x) -1) / a

и критерии подгонки: наименьшая среднеквадратичная относительная ошибка,

a = 10,17

Результат - MSRE = 0,052

Это очень хороший результат, если учесть такое простое уравновешивание только с одним параметром.

Конечно, более точная подгонка может быть достигнута при выборе более сложного уравнения с более настраиваемыми параметрами.

enter image description here

...