二元指数函数的Python数值解法

二元指数函数的Python数值解法,python,numpy,scipy,numerical-methods,numerical-computing,Python,Numpy,Scipy,Numerical Methods,Numerical Computing,我有一个包含两个已知变量x和y的指数函数。当我输入x时,我需要找到y的值。然而,我的代码无法通过并解决问题。 我的函数和所有相关常数如下所示: import math import numpy as np import scipy.optimize as optimize x1=np.array([0,20]) Vt = 0.026 Io = 23*math.pow(10,-10) Iph = 2.282 idf = 1 Ns = 60 Nm = 1 Rse = 0.5 Rsh = 10

我有一个包含两个已知变量x和y的指数函数。当我输入x时,我需要找到y的值。然而,我的代码无法通过并解决问题。 我的函数和所有相关常数如下所示:

import math
import numpy as np
import scipy.optimize as optimize

x1=np.array([0,20])

Vt = 0.026
Io = 23*math.pow(10,-10)
Iph = 2.282
idf = 1
Ns = 60 
Nm = 1 
Rse = 0.5
Rsh = 1000
x = np.linspace(x1.min(),x1.max(),300)    
def equation(x,Iph,Io,Rse,Rsh,Ns,Nm,Vt):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh 
y = optimize.newton(equation(10,Iph,Io,Rse,Rsh,Ns,Nm,Vt), 7)
目前产出:

 File "<ipython-input-172-93ede88c9b49>", line 16, in ivcurve_equation
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + v/Rsh + I*Rse/Rsh 

TypeError: can't multiply sequence by non-int of type 'float'
快速查看并尝试进行一些“模式匹配”。
方程
的参数只能是变量,不能是常数。以下是您的代码的工作版本,您应该根据自己的需要进行调整:

import math
import numpy as np
import scipy.optimize as optimize

x1=np.array([0,20])

Vt = 0.026
Io = 23*math.pow(10,-10)
Iph = 2.282
idf = 1
Ns = 60
Nm = 1
Rse = 0.5
Rsh = 1000
x_arr = np.linspace(x1.min(),x1.max(),300)
x = x_arr[0]
def equation(y):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh

result = optimize.newton(equation, 7)

print(result)
现在,如果您想要x的数组的输出,请尝试以下操作:

def equation(y,x):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh

result = [optimize.newton(equation, 7, args = (a,)) for a in x_arr]

print(result)

希望这有帮助

你能告诉我这行中哪一个是列表或序列吗?
返回y-Iph+Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1)+v/Rsh+I*Rse/Rsh
@GauriShankarBadola请,我现在已经正确编辑了方程。对x和y都是列表。但是,目前我正在输入一个x值。我试图为x.def方程(x,Iph,Io,Rse,Rsh,Ns,Nm,Vt)找到y的值:返回y-Iph+Io*(np.exp((x+yRse)/(nsnmidvt))-1)+x/Rsh+y*Rse/Rsh,在这个方法中,y来自哪里?还有
v
。@Alexander这是一个输入错误。对不起。我为此做了编辑。太好了!成功了。我有个问题。输入
fprime
fprime2
是否对上述等式有任何帮助?关于
fprime
fprime2
:当然有帮助。如果设置了一阶导数和二阶导数,牛顿法会收敛得更好,但最棘手的是计算它们。关于数组问题:我将更新我的答案
def equation(y,x):
    return y - Iph + Io*(np.exp((x+y*Rse)/(Ns*Nm*idf*Vt))-1) + x/Rsh + y*Rse/Rsh

result = [optimize.newton(equation, 7, args = (a,)) for a in x_arr]

print(result)