RuntimeWarning: деление на ноль, встречающееся в true_divide W = 1 / sigma ** 2 / s_sq symfit - PullRequest
0 голосов
/ 27 февраля 2019

Я пытался запустить этот код, но я получаю одни и те же ошибки, независимо от того, насколько я его упрощаю.

/ home / runner / .site-packages / symfit / core / fit.py: 1046: RuntimeWarning: деление на ноль, встречающееся в true_divide W = 1 / sigma ** 2 / s_sq [:,np.newaxis]

/ home / runner / .site-packages / symfit / core / fit.py: 1783:> RuntimeWarning: недопустимое значение, обнаруженное в double_scalars, возвращает 1 SS_res / SS_tot

Помощь будет принята с благодарностью.

x1, ya = sf.variables('x1, ya')
I1, I2, I3, A, B, C, D = sf.parameters('I1, I2, I3, A, B, C, D')


I1.value = 46.483
I2.value = 5.916
I3.value = 21.90
A.value = -3.828*10**(-5)
B.value = 0
C.value = 0
D.value = 0

# Making the equation
ya = (A*x1**3 + B*x1**2 + C*x1 + D + (q_subm*x1**4)/(24*EI))  #q_sub and EI are constants

#model = Model({y: Piecewise((ya, x1 <= I1), (yb, x2 <= I2), (yc, x3 <= I3))})
model = Model({ya})

# As a constraint, we want cable to be at 0 at start and and at "-p" height at x=60
# also no angle in pipe ate those points
constraints = [
    Eq(ya.subs({x1: 0}), 0),
    Eq(ya.subs({x1: 60}), -p),
    Eq(ya.diff(x1).subs({x1: 0}), 0),
    Eq(ya.diff(x1).subs({x1: 60}), 0)
]


x1data = np.linspace(0, 60., 60)
y1data = model(x1=x1data, A = -3.828*10**(-5), B = 0, C = 0, D = 0)
np.random.seed(2)
y1data = np.random.normal(y1data, 0.005) 

plt.plot([60], [0.4], 'ro')
plt.scatter(x1data, y1data)
plt.savefig('plot.png')

print ('Done plotting fig')

#fit = Fit(model, x=xdata, y=ydata, constraints=constraints)
fit = Fit(model, x1=x1data, constraints=constraints)

print ('Done fitting model')
fit_result = fit.execute()
#print(fit_result)

1 Ответ

0 голосов
/ 27 февраля 2019

У меня есть несколько комментариев о вашем коде, возможно, один из них решит проблему.

  • model = Model({ya}) ошибочно пытается создать модель из набора, так как {} делает набор,Попробуйте использовать model = Model({y: ya}) или model = Model(ya).(Я бы порекомендовал первый)
  • Комментированная строка fit = Fit(model, x=x1data , y=y1data, constraints=constraints) по существу правильна, обратите внимание, что я изменил имена массивов данных, чтобы включить 1.Строка в приведенном выше примере не может работать, поскольку вы не предоставляете ydata.
  • Что такое type из q_subm и EI?Пока они являются стандартным типом чисел Python, это нормально, но если они являются чем-то экзотическим, это может привести к проблемам.
  • Имейте в виду, что "ошибки", перечисленные в этом вопросе, Warnings, инет ничего плохого в некоторых предупреждениях во время подгонки, если результат правильный.

Надеюсь, это решит проблему, если не даст мне знать.

x1, y = sf.variables('x1, y')
I1, I2, I3, A, B, C, D = sf.parameters('I1, I2, I3, A, B, C, D')


I1.value = 46.483
I2.value = 5.916
I3.value = 21.90
A.value = -3.828*10**(-5)
B.value = 0
C.value = 0
D.value = 0

# Making the equation
ya = (A*x1**3 + B*x1**2 + C*x1 + D + (q_subm*x1**4)/(24*EI))  #q_sub and EI are constants
model = Model({y: ya})

# As a constraint, we want cable to be at 0 at start and and at "-p" height at x=60
# also no angle in pipe ate those points
constraints = [
    Eq(ya.subs({x1: 0}), 0),
    Eq(ya.subs({x1: 60}), -p),
    Eq(ya.diff(x1).subs({x1: 0}), 0),
    Eq(ya.diff(x1).subs({x1: 60}), 0)
]


x1data = np.linspace(0, 60., 60)
y1data = model(x1=x1data, A=-3.828*10**(-5), B=0, C=0, D=0)
np.random.seed(2)
y1data = np.random.normal(y1data, 0.005) 

plt.plot([60], [0.4], 'ro')
plt.scatter(x1data, y1data)
plt.savefig('plot.png')

print ('Done plotting fig')

fit = Fit(model, x=x1data, y=y1data, constraints=constraints)
fit_result = fit.execute()

print ('Done fitting model')
print(fit_result)
...