Оптимизация функции SSE в Scipy - PullRequest
0 голосов
/ 26 апреля 2019

Оптимизированные параметры вывода SCipy на самом деле не являются оптимальными.Как получить правильную оптиму?

Ниже приведен код, написанный для минимизации суммы квадратов ошибки функции.Фактическое оптимальное решение k = 600,0.21, но SCipy выводит (0,0.22).Также многие значения SSE - это «nan».

Может ли кто-нибудь помочь мне в этом отношении?Я новичок в этом.

Ниже приведены измеренные значения, загруженные из CSV-файла (упоминается в коде):

strain,stress
0.00,000.00
0.01,228.11
0.02,263.86
0.03,287.31
0.04,305.20
0.05,319.84
0.06,332.32
0.07,343.26
0.08,353.02
0.09,361.86
0.10,369.96
0.11,377.44
0.12,384.40
0.13,390.91
0.14,397.04
0.15,402.84
0.16,408.33
0.17,413.57
0.18,418.56
0.19,423.34
0.20,427.92
0.21,432.33
0.22,436.58
0.23,440.67
0.24,444.63
0.25,448.45
0.26,452.16
0.27,455.76
0.28,459.26
0.29,462.65
0.30,465.96
0.31,469.18
0.32,472.32
0.33,475.38
0.34,478.37
0.35,481.29
0.36,484.14
0.37,486.94
0.38,489.67
0.39,492.35
0.40,494.98
0.41,497.55
0.42,500.07
0.43,502.55
0.44,504.98
0.45,507.37
0.46,509.72
0.47,512.03
0.48,514.29
0.49,516.53
0.50,518.72
0.51,520.88
0.52,523.01
0.53,525.11
0.54,527.17
0.55,529.21
0.56,531.22
0.57,533.19
0.58,535.14
0.59,537.07
0.60,538.97
0.61,540.84
0.62,542.69
0.63,544.52
0.64,546.32
0.65,548.10
0.66,549.86
0.67,551.60
0.68,553.32
0.69,555.02
0.70,556.70
0.71,558.36
0.72,560.00
0.73,561.63
0.74,563.24
0.75,564.83
0.76,566.40
0.77,567.96
0.78,569.50
0.79,571.02
0.80,572.53
0.81,574.03
0.82,575.51
0.83,576.98
0.84,578.43
0.85,579.87
0.86,581.29
0.87,582.71
0.88,584.11
0.89,585.49
0.90,586.87
0.91,588.23
0.92,589.59
0.93,590.93
0.94,592.25
0.95,593.57
0.96,594.88
0.97,596.17
0.98,597.46
0.99,598.73
1.00,600.00
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import minimize
from sklearn.metrics import r2_score


url = 'test_data.csv'
z = pd.read_csv(url)
#
e1 = z['strain'].values
sigx = z['stress'].values
e=np.array(e1)
sig1=np.array(sigx)
k = [1000,0.2]
#n = 0.2
coe=np.array([k[0],k[1]])
#print (sig1)
def sig2(e):
    v=k[0] * np.power(e, k[1])
    SEzip = zip(sig1, v)
    sse = 0
    for y in SEzip:
        sse += np.power((y[0] - y[1]),2)
    print (sse)
    return sse

print (sig2(e))

result = minimize(sig2,coe,method='Nelder-Mead',options={'xatol': 1e-6,'fatol':1e-06,'maxiter':10000,'disp': True,'adaptive' : True})

print(result)

Код должен дать k [0] =600 & k [1] = 0,21 в результате.

...