Что быстрее, scipy fsolve vs root? - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь найти корень функции.Я использовал fsolve в прошлом, но по мере того, как мои наборы данных увеличиваются, они становятся более противоречивыми (-> n = 187).Сейчас я ищу альтернативы и нашел scipy.root. Я не понял, в чем разница между этими двумя, и какая из них лучше в моем сценарии.

Я пытаюсь решить следующие 3N связанные уравнения и пытаюсь найти вектор xyи z: enter image description here

Мой код следующий, где 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...