2013-11-02 5 views
1

Я как бы новичок в Python, и я хочу найти корень ошибок линейной функции, включающих в себя все ошибки.Поиск корня и ошибка оценки установленной функции

я вставил функцию с

import numpy as np 
import scipy.optimize as op 

def lin_fit(x, a, b): 
    return a * x + b 

... 

popt, pconv = op.curve_fit(lin_fit, U, sqrt_I) 
x = np.linspace(np.min(U), np.max(U), 100) 
y = lin_fit(x, *popt) 

Тогда я нашел корень с

def root(x): 
    return lin_fit(x, *popt) 

return op.fsolve(root, 0) 

Это не было никаких проблем, но я не сейчас, как найти ошибку этих корней.

Может ли кто-нибудь помочь?

+0

Является ли это просто пример? планируете ли вы использовать тот же подход для других функций? – Jblasco

+0

Я просто хочу использовать его для такого рода линейных функций. –

+0

В этом случае из коэффициентов приставки: -b/a = root, правильно? Не нужно вызывать op.fsolve. – Jblasco

ответ

0

Ошибка содержится в pconv, где диагональ содержит дисперсию для каждого расчетного коэффициента, который в этом случае равен a и b.

Из MathWorld коэффициент корреляции r, который измеряет общее качество подгонки может быть вычислена как:

sxy = pconv[0,1]*x.shape[0] 
sxx = pconv[0,0] 
syy = pconv[1,1] 
r = (sxy**2/(sxx*syy))**0.5 
+0

Итак, 'pconv [0,0]' содержит ошибку для 'a' и' pconv [1,1] 'содержит ошибку для' b'? Не будет ли тогда ошибка для корня '((pconv [0,0] * b/a ** 2) ** 2+ (pconv [1,1]/a) ** 2) ** 0,5' (Гауссово распространение неопределенности)? И если это так, как мне получить значения для 'a' и b'? –

+0

@ LinoschArtox Да ... но, пожалуйста, просто проверьте это уравнение на распространение ошибок, потому что у меня нет ... –

+0

Извините за то, что я немного надул, как мне получить значения для 'a' и' b'? –