Я пытаюсь решить систему нелинейных уравнений, которая изменяет число переменных и уравнений при изменении n_inputs. В конце мне нужно получить w [i] (для w в диапазоне (n_inputs)) и alfa.
Сначала я сделал это, и оно работало хорошо:
Инициализация переменных wi и бета:
w=[0 for i in range(n_inputs)]
beta=0
Определение альфа:
alfa=np.dot(w,x_M)+beta
Выбор системы по n_inputs:
if n_inputs == 2:
def f(x):
w[0],w[1],alfa=x
f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
return [f1,f2,f3]
elif n_inputs == 3:
def f(x):
w[0],w[1],w[2],alfa=x
f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
return [f1,f2,f3,f4]
elif n_inputs == 4:
def f(x):
w[0],w[1],w[2],w[3],alfa=x
f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
return [f1,f2,f3,f4,f5]
elif n_inputs == 5:
def f(x):
w[0],w[1],w[2],w[3],w[4],alfa=x
f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
f6=(sigmoid(alfa)-sigmoid(alfa)**2)*w[4]-k[4]
return [f1,f2,f3,f4,f5,f6]
elif n_inputs == 6:
def f(x):
w[0],w[1],w[2],w[3],w[4],w[5],alfa=x
f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
f6=(sigmoid(alfa)-sigmoid(alfa)**2)*w[4]-k[4]
f7=(sigmoid(alfa)-sigmoid(alfa)**2)*w[5]-k[5]
return [f1,f2,f3,f4,f5,f6,f7]
Однако мне нужно обобщить ее для любого значения n_inputs.
Пока я получил это, но мне нужно указать переменные, и я не могу этого сделать.
def f(x):
w,alfa=x
f=[sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b]
for i in range(n_inputs):
f.append((sigmoid(alfa)-sigmoid(alfa)**2)*w[i]-k[i])
return f
ValueError: слишком много значений для распаковки (ожидается 2)
Может кто-нибудь помочь, пожалуйста?