Я пытаюсь найти корень функции.Я использовал fsolve в прошлом, но по мере того, как мои наборы данных увеличиваются, они становятся более противоречивыми (-> n = 187).Сейчас я ищу альтернативы и нашел scipy.root
. Я не понял, в чем разница между этими двумя, и какая из них лучше в моем сценарии.
Я пытаюсь решить следующие 3N связанные уравнения и пытаюсь найти вектор xyи z:
Мой код следующий, где inrec, outrec и rec - это заранее определенные списки значений:
import scipy as sp
import numpy as np
from scipy.optimize import fsolve
import math
def f(w, n, onrec, inrec, rec):
F = [0]*3*n
for i in range(n):
F[i] = -onrec[i] #k_i>
F[n+i] = -inrec[i] #k_i<
F[(2*n)+i] = -rec[i] #k_i <>
for j in range(n):
if i == j:
None
else: #below the three functions are stated. w[i] = x_i, w[n+i] = y_i, w[2*n + i] = z_i
F[i] += (w[i]*w[n+j])/(1+w[i]*w[n+j]+w[j]*w[n+i]+w[2*n+i]*w[2*n+j])
F[n+i] += (w[j]*w[n+i])/(1+w[i]*w[n+j]+w[j]*w[n+i]+w[2*n+i]*w[2*n+j])
F[2*n+i] += (w[(2*n)+i]*w[(2*n)+j])/(1+w[i]*w[n+j]+w[j]*w[n+i]+w[2*n+i]*w[2*n+j])
return(F)
u = [1]*3*n
s = fsolve(f, u, args=(n, onrec, inrec, rec))