Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用fsolve解二次方程?_Python_Numpy_Numerical Methods - Fatal编程技术网

Python 如何使用fsolve解二次方程?

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

在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.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