什么是快速,scipy fsolve vs root?

时间:2018-06-10 17:51:39

标签: python performance optimization scipy

我试图找到一个函数的根。我过去使用过fsolve,但随着我的数据集越来越大,它似乎变得越来越不一致( - > n = 187)。现在我正在寻找替代方案并找到scipy.root我不明白两者之间有什么区别,哪一个在我的情景中更好。

我正在尝试解决以下3N耦合方程并尝试找到向量x y和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))

0 个答案:

没有答案