如何在 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]]
我越来越熟悉 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]]