Как мне использовать fsolve для решения квадратного уравнения? - PullRequest
0 голосов
/ 20 сентября 2019

Как использовать fsolve для вычисления значения y для следующего нелинейного уравнения в Python

y=x^3 -√y

(когда x = 0, 1, 2.3611, 2.9033,3.2859, 3.5915)

Я попытался решить проблему на бумаге, а затем использовать функцию для вычисления значения y.Но я не могу использовать fsolve, чтобы сделать то же самое для меня.

def func(x):return np.round(((-1+np.sqrt(1+(4*x**3)))/2)**2,4)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Следует избегать корневых функций, если применять числовой алгоритм, при нулевых аргументах корневая функция не является гладкой.Таким образом, используйте 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]
0 голосов
/ 20 сентября 2019

Вы можете попробовать вот так:

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])

OutPut:

[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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...