用替换求解 for 循环中的单个(非线性)方程?
Solving for a single (non linear) equation in a for loop with substitution?
我正在尝试在 for 循环 中使用 fsolve 求解单个(非线性)方程,但它似乎在我的代码中不起作用。
来自之前的帮助[=]如何在python中使用for循环求解非线性方程?
我成功地求解了两个或多个方程,但无法求解单个非线性方程。
*请注意,N 是我们在使用 for 循环时替换的步进范围值
from scipy.optimize import fsolve
import numpy as np
f_curve_coefficients = [-7.14285714e-02, 1.96333333e+01, 6.85130952e+03]
S = [0.2122, 0, 0]
a2 = f_curve_coefficients[0]
a1 = f_curve_coefficients[1]
a0 = f_curve_coefficients[2]
s2 = S[0]
s1 = S[1]
s0 = S[2]
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return [first_eq]
for N in range(1,6,1):
roots = fsolve(f,20) # fsolve(equations, X_0)
print(roots)
在 Matlab 中我们有一个名为 fzero 的函数可以解决这个问题 - 不确定 Python 是否有类似的函数?
解决方案不一定是 fsolve - 只需根据 python 论坛用户的建议...
预先感谢您的所有帮助。真的不知道没有Whosebug我会做什么!
您可以按如下方式更改代码:
from scipy.optimize import fsolve
import numpy as np
f_curve_coefficients = [-7.14285714e-02, 1.96333333e+01, 6.85130952e+03]
S = [0.2122, 0, 0]
a2 = f_curve_coefficients[0]
a1 = f_curve_coefficients[1]
a0 = f_curve_coefficients[2]
s2 = S[0]
s1 = S[1]
s0 = S[2]
f = lambda x : a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
for N in range(1,6,1):
roots = fsolve(f, 20)
print(roots)
删除函数:
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return [first_eq]
并将其转换为:
f = lambda x : a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
如果您想保留原始代码,只需更正即可:
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return first_eq
你的return [first_eq]
return一个列表并生成异常Result from function call is not a proper array of floats.
您还可以简化代码如下:
def f(x):
return a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
fsolve()
returnf(x)
的根源看here
我正在尝试在 for 循环 中使用 fsolve 求解单个(非线性)方程,但它似乎在我的代码中不起作用。
来自之前的帮助[=]如何在python中使用for循环求解非线性方程? 我成功地求解了两个或多个方程,但无法求解单个非线性方程。
*请注意,N 是我们在使用 for 循环时替换的步进范围值
from scipy.optimize import fsolve
import numpy as np
f_curve_coefficients = [-7.14285714e-02, 1.96333333e+01, 6.85130952e+03]
S = [0.2122, 0, 0]
a2 = f_curve_coefficients[0]
a1 = f_curve_coefficients[1]
a0 = f_curve_coefficients[2]
s2 = S[0]
s1 = S[1]
s0 = S[2]
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return [first_eq]
for N in range(1,6,1):
roots = fsolve(f,20) # fsolve(equations, X_0)
print(roots)
在 Matlab 中我们有一个名为 fzero 的函数可以解决这个问题 - 不确定 Python 是否有类似的函数?
解决方案不一定是 fsolve - 只需根据 python 论坛用户的建议...
预先感谢您的所有帮助。真的不知道没有Whosebug我会做什么!
您可以按如下方式更改代码:
from scipy.optimize import fsolve
import numpy as np
f_curve_coefficients = [-7.14285714e-02, 1.96333333e+01, 6.85130952e+03]
S = [0.2122, 0, 0]
a2 = f_curve_coefficients[0]
a1 = f_curve_coefficients[1]
a0 = f_curve_coefficients[2]
s2 = S[0]
s1 = S[1]
s0 = S[2]
f = lambda x : a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
for N in range(1,6,1):
roots = fsolve(f, 20)
print(roots)
删除函数:
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return [first_eq]
并将其转换为:
f = lambda x : a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
如果您想保留原始代码,只需更正即可:
def f(variable):
x = variable
first_eq =a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
return first_eq
你的return [first_eq]
return一个列表并生成异常Result from function call is not a proper array of floats.
您还可以简化代码如下:
def f(x):
return a2*x**2+a1*N*x +a0*N**2-(s2*x**2+s1*x+s0)
fsolve()
returnf(x)
的根源看here