如何在 fsolve 中包含可调参数?

How to include adjustable parameter in fsolve?

我越来越熟悉 Python 中的 fsolve,但在我的非线性方程组中包含可调参数时遇到了问题。 This link 似乎回答了我的问题,但我仍然遇到错误。下面是我的代码:

 import scipy.optimize as so

 def test(x,y,z):
    
     eq1 = x**2+y**2-z
     eq2 = 2*x+1
    
     return [eq1,eq2]

     z = 1                                         # Ajustable parameter
     sol = so.fsolve(test , [-1,2] ,args=(z))      # Solution Array
     print(sol)                                    # Display Solution

输出给出

    TypeError: test() missing 1 required positional argument: 'z'

z明确定义为参数时。如何包含此可调参数?

所以在发帖之前我应该​​多花点时间玩玩它。这是我发现的

import scipy.optimize as so
import numpy as np

def test(variables,z): #Define function of variables and adjustable arg
    
    x,y = variables     #Declare variables
    
    eq1 = x**2+y**2-1-z #Equation to solve #1
    eq2 = 2*x+1         #Equation to solve #2
    
    return [eq1,eq2]    #Return equation array

z = 1                                       #Ajustable parameter
initial = [1,2]                             #Initial condition list                          
sol = so.fsolve(test , initial, args = (z)) #Call fsolve
print(np.array(sol))                        #Display sol  

有输出

[-0.5         1.32287566]

我不是最擅长分析代码的,但我 认为 我的问题是我在 test(x,y,z) 中混淆了我的变量和参数,以至于它没有不知道我试图将最初的猜测应用于什么。

无论如何,我希望这对某人有所帮助。

编辑:当我在这里时,测试函数是一个半径可调的圆和一条与它相交于两点的直线。

如果你想找到正解和负解,你需要将你的初始猜测作为数组传递(有人问过类似的问题 here)。这是更新后的版本

z = 1
initial = [[-2,-1],[2,1]]
sol = []                            
for i in range(len(initial)): 
   sol.append(so.fsolve(test , initial[i], args = (z))) 
print(np.array(sol)) 

输出为

[[-0.5        -1.32287566]
 [-0.5         1.32287566]]