Python 如何使用fsolve解二次方程?
在Python中,如何使用fsolve计算以下非线性方程的y值Python 如何使用fsolve解二次方程?,python,numpy,numerical-methods,Python,Numpy,Numerical Methods,在Python中,如何使用fsolve计算以下非线性方程的y值 y=x^3-√y (当x=0,1,2.3611,2.9033,3.2859,3.5915时) 我试着在纸上解决这个问题,然后用一个函数来计算y的值。但我不能用fsolve为我做同样的事情 def func(x):返回np.round((-1+np.sqrt(1+(4*x**3))/2)**2,4)您可以这样尝试: import math from scipy.optimize import fsolve y = [0.000, 0
y=x^3-√y
(当x=0,1,2.3611,2.9033,3.2859,3.5915时)
我试着在纸上解决这个问题,然后用一个函数来计算y的值。但我不能用fsolve为我做同样的事情
def func(x):返回np.round((-1+np.sqrt(1+(4*x**3))/2)**2,4)
您可以这样尝试:
import math
from scipy.optimize import fsolve
y = [0.000, 0.3820, 10.00, 20.00, 30.00, 40.00]
def func(x):
for i in y:
return x**3-(math.sqrt(i))
x0 = fsolve(func, [0, 1, 2.3611, 2.9033, 3.2859, 3.5915])
输出:
[0.00000000e+000 2.24279573e-109 5.29546580e-109 6.51151078e-109 7.36960349e-109 8.05500243e-109]
It is scientific notation. If 1e-5 It means 1 × 10−5. In other words, 0.00001.
将科学符号转换为小数:
Now, x0 = [0.00000000e+000 2.24279573e-109 5.29546580e-109 6.51151078e-109 7.36960349e-109 8.05500243e-109]
for i in x0:
data = float("{:.8f}".format(float(str(i))))
print(data)
如果应用数值算法,应避免使用根函数,因为在零参数下,根函数是非光滑的。因此,使用
y=z²
,希望函数z^2+z
足够凸,从1.0开始,求根迭代保持z的正值,并取结果的平方根
y = [ fsolve(lambda z: z**2+z-x**3, 1.0)[0]**2 for x in [0, 1, 2.3611, 2.9033, 3.2859, 3.5915] ]
这就得到了解决方案
[0.0, 0.3819660112501052, 10.000316539128024, 20.000195919522547, 30.00100142437062, 40.00161656606038]
请使用适当的标记使您的代码更具可读性。感谢您更新解决方案,但我无法使用此选项获得所需的结果。答案应该是(答案:y=0.000,0.3820,10.00,20.00,30.00,40.00),但使用这个我得到[0.00000000 e+000 2.24279573e-109 5.29546580e-109 6.51151078e-109 7.36960349e-109 8.05500243e-109],注意等式是f(y)=y+y**0.5-x**3
。你也可以先解出g(z)=z**2+z-x**3
,然后将非负的z
转换为y=z**0.5
你能告诉我如何打印结果吗?@user3227604这是科学记数法。如果1e-5,则表示1×10−5.换句话说,0.00001。答案必须是(答案:y=0.000,0.3820,10.00,20.00,30.00,40.00)你是对的,我应该遵循我自己的推导,y=z**2
。