Как создать линейную функцию в Python без использования numpy.linspace () - PullRequest
0 голосов
/ 19 сентября 2019

Итак, я пытаюсь создать линейные функции в Python, такие как y = x без использования numpy.linspace().В моем понимании numpy.linspace () дает вам массив, который является прерывистым.Но для

я пытаюсь найти пересечение y = x и функции, неразрешимой аналитически (такой есть на рисунке).

Вот мой код, я не знаю, как определить x.Есть ли способ слишком выразить у имеет простую непрерывную функцию?

import random as rd
import numpy as np

a = int(input('choose a :'))
eps = abs(float(input('choose epsilon :')))

b = 0
c = 10
x = ??????

y1 = x
y2 = a*(1 - np.exp(x))

z = abs(y2 - y1)
while z > eps :
    d = rd.uniform(b,c)
    c = d
    print(c)
print(y1 , y2 )

Here is a picture to describe what I am trying to do

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Поскольку ваши функции дифференцируемы, вы можете использовать метод Ньютона-Рафсона , реализованный scipy.optimize:

>>> scipy.optimize.newton(lambda x: 1.5*(1-math.exp(-x))-x, 10)
0.8742174657987283

Вычислить ошибку очень просто:

>>> def f(x): return 1.5*(1-math.exp(-x))
...
>>> x = scipy.optimize.newton(lambda x: f(x)-x, 10)
>>> error = f(x) - x
>>> x, error
(0.8742174657987283, -4.218847493575595e-15)

Я несколько произвольно выбрал x0 = 10 в качестве отправной точки.Здесь нужно позаботиться о том, чтобы метод не сходился к x = 0, что в вашем примере также является корнем.

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

Я не математик, так что, возможно, вы можете объяснить мне это здесь, но я не понимаю, что именно вы подразумеваете под "неразрешимой аналитически".

Вот что Симпи возвращает:

from sympy import *

x = symbols('x')
a = 1.5
y1 = x
y2 = a*(1 - exp(-x))
print(solve(y1-y2))

# [0.874217465798717]
...