Ошибочные вычисления Гаусса-Ньютона на Python - PullRequest
0 голосов
/ 30 мая 2020

Я делаю алгоритм Гаусса-Ньютона на Python, но я думаю, что мой ответ почему-то неверен. На первой итерации он возвращает истинные значения, но я думаю, что другие итерации ошибочны. На странице википедии они дали примерный вопрос, но мой код показывает неправильные значения. Я пробовал этот топи c, но у меня это не сработало. В моем коде есть ошибка? Я не понимаю и не мог решить эту проблему несколько дней.

Вопрос моего учителя:

x = [0.25, 0.75, 1.25, 1.75, 2.25]
y = [0.28, 0.57, 0.68, 0.74, 0.79]
inial values a0 = 1, a1 = 1
f(x) = a0*(1–e^(–a1*x))
df/da0 = 1–e^(–a1*x)
df/da1 = a0*x*(1–e^(–a1x))

Это мой код решает эту проблему (я думаю):

import scipy
import matplotlib.pyplot as plt
import numpy as np
from numpy.linalg import inv
import math
import scipy.misc
from  math import e


def GaussNewtonMethod(startpoints):
    x = np.array([0.25, 0.75, 1.25, 1.75, 2.25])
    y = np.array([0.28, 0.57, 0.68, 0.74, 0.79])
    CalculatedPoints = startpoints
    for k in range(5):
        # Calculate Z
        Z = []
        for i in range(len(x)):
            Z.append([1-pow(e,-CalculatedPoints[1]*x[i]),CalculatedPoints[0]*x[i]*pow(e,-CalculatedPoints[1]*x[i])])
        D = []
        for i in range(len(y)):
            D.append(y[i]-Z[i][0]);
        D = np.array(D)
        Z = np.array(Z)
        ZT = Z.transpose()
        eq1 = ZT.dot(Z)
        eq2 = inv(eq1)
        eq3 = eq2.dot(ZT)
        eq4 = eq3.dot(D)
        CalculatedPoints = np.add(startpoints,eq4)
        print('new startpoints',CalculatedPoints)

    newy = []
    for i in x:
        newy.append(CalculatedPoints[0]*(1-pow(e,-i*CalculatedPoints[1])))
    fig, axs = plt.subplots()
    axs.scatter(x, y)
    axs.plot(x, newy)
    fig.suptitle('Gauss - Newton')
    plt.show()


GaussNewtonMethod([1,1])

Мой ответ:

new startpoints [0.72852264 1.50193087] // this the true one
new startpoints [0.7910431  1.17577025]
new startpoints [0.76868865 1.46238863]
new startpoints [0.79016327 1.20404379]
new startpoints [0.77254469 1.43636334]

для получения дополнительной информации о моих расчетах Screenshot

График вопроса: Screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...