Использовать символы в пределах определенного интеграла - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу использовать пределы (Ef-e * V) и Ef как нижний и верхний пределы в моем Определенном интеграле.где Ef дается 10 электрон-вольт, e - электронный заряд, и я хочу получить ответ с точки зрения V Как бы я это сделал ????ПОЖАЛУЙСТА, ПОМОГИТЕ


    from scipy.integrate import quad
    import sympy as sp
    import math

    e = 1.6 * (10 ** -19)
    L = 10 ** -9
    h = 6.626 * (10 ** -34)
    h_cut = 1.05 * (10 ** -34)
    m = 9.11 * (10 ** -31)
    V0 = 4.0*e  # in J
    EF = 10.0*e  # in J
    E = sp.Symbol('E')
    V = sp.Symbol('V')



    def f(E):
        j = (4 * E * (V0 - E)) / (4 * E * (V0 - E) + V0 ** 2 * ((2 * m * (V0 - E)) * ((L / h_cut) ** 2)))
        return j


    i, err = quad(f, EF - e * V, EF)
    print('i= ', i)
    I = (2 * e * i) / h
    print(I)
    ```
THE error is as follows:
Traceback (most recent call last):
  File "C:/Users/Subham/Desktop/Integration/integration.py", line 22, in <module>
    i, err = quad(f, EF - e * V, EF)
  File "C:\Users\Subham\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scipy\integrate\quadpack.py", line 337, in quad
    flip, a, b = b < a, min(a, b), max(a, b)
  File "C:\Users\Subham\Desktop\Integration\venv\lib\site-packages\sympy\core\relational.py", line 304, in __nonzero__
    raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational

1 Ответ

0 голосов
/ 18 мая 2019

Поскольку вы используете SymPy, вы можете сделать интеграл там. Однако лучше всего работать с числами Rational, поэтому мы делаем это

>>> gx = nsimplify(f(x), rational=True)

Затем вычислите интеграл

>>> i = integrate(gx, (x,EF-e*V,EF))

И покажите это с любой точностью, какой пожелаете. Вот результат для 2 сигфигов на каждом номере:

>>> nfloat(i, 2)
1.6e-19*V + 1.7e-17*log(1.9e-17 - 1.6e-19*V) + 6.5e-16
...