Y модуль cos x: Свойства функции y = cosx и её график — урок. Алгебра, 10 класс.

math ⚡️ Python 3 с примерами кода

Модуль math – один из наиважнейших в Python. Этот модуль предоставляет обширный функционал для работы с числами.

math.ceil(X)
округление до ближайшего большего числа.
math.copysign(X, Y)
возвращает число, имеющее модуль такой же, как и у числа X, а знак — как у числа Y.
math.fabs(X)
модуль X.
math.factorial(X)
факториал числа X.
math.floor(X)
округление вниз.
math.fmod(X, Y)
остаток от деления X на Y.
math.frexp(X)
возвращает мантиссу и экспоненту числа.
math.ldexp(X, I)
X * 2i. Функция, обратная функции math.frexp().
math.fsum(последовательность)
сумма всех членов последовательности.
Эквивалент встроенной функции sum(), но math.fsum() более точна для чисел с плавающей точкой.
math.isfinite(X)
является ли X числом.
math.isinf(X)
является ли X бесконечностью.
math.isnan(X)
является ли X NaN (Not a Number — не число).
math.modf(X)
возвращает дробную и целую часть числа X. Оба числа имеют тот же знак, что и X.
math.trunc(X)
усекает значение X до целого.
math.exp(X)
eX.
math.expm1(X)
eX - 1. При X → 0 точнее, чем math.exp(X)-1.
math.log(X, [base])
логарифм X по основанию
base
. Если base не указан, вычисляется натуральный логарифм.
math.log1p(X)
натуральный логарифм (1 + X). При X → 0 точнее, чем math.log(1+X).
math.log10(X)
логарифм X по основанию 10.
math.log2(X)
логарифм X по основанию 2. Новое в Python 3.3.
math.pow(X, Y)
XY.
math.sqrt(X)
квадратный корень из X.
math.acos(X)
арккосинус X. В радианах.
math.asin(X)
арксинус X. В радианах.
math.atan(X)
арктангенс X. В радианах.
math.atan2(Y, X)
арктангенс
Y/X
. В радианах. С учетом четверти, в которой находится точка (X, Y).
math.cos(X)
косинус X (X указывается в радианах).
math.sin(X)
синус X (X указывается в радианах).
math.tan(X)
тангенс X (X указывается в радианах).
math.hypot(X, Y)
вычисляет гипотенузу треугольника с катетами X и Y (math.sqrt(x * x + y * y)).
math.degrees(X)
конвертирует радианы в градусы.
math.radians(X)
конвертирует градусы в радианы.
math.cosh(X)
вычисляет гиперболический косинус.
math.sinh(X)
вычисляет гиперболический синус.
math.tanh(X)
вычисляет гиперболический тангенс.
math.acosh(X)
вычисляет обратный гиперболический косинус.
math.asinh(X)
вычисляет обратный гиперболический синус.
math.atanh(X)
вычисляет обратный гиперболический тангенс.
math.erf(X)
функция ошибок.
math.erfc(X)
дополнительная функция ошибок (1 - math.erf(X)).
math.gamma(X)
гамма-функция X.
math.lgamma(X)
натуральный логарифм гамма-функции X.
math.pi
pi = 3,1415926…
math.e
e = 2,718281…

Комплексная функция, отображение областей : Анализ-II

Сообщения без ответов | Активные темы | Избранное



Правила форума

В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе «Помогите решить/разобраться (М)».

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.


 
Dilettante 

 Комплексная функция, отображение областей

05.11.2010, 19:46 

29/05/10
85

Приветствую! Дана комплексная функция .

Необходимо определить, во что эта функция отобразит некоторую геометрическую фигуру, в частности прямоугольную сетку ,. Предполагаю, что для начала нужно найти и аргумент , но у меня не получается. Пробовал преобразовывать косинус, представляя его через

, но ничего не вышло. Подскажите, как найти модуль и аргумент этой функции.


   

                  

maxmatem 

 Re: Комплексная функция

05.11.2010, 23:08 

15/08/09
1458
МГУ

Какой функции ? этой

Цитата:

?
ну с модулем всё ясно.


   

                  

Joker_vD 

 Re: Комплексная функция

05.11.2010, 23:20 

Заслуженный участник

09/09/10
3729

Я всегда думал, что аргумент и модуль есть только у комплексных чисел, а не у комплекснозначных функций.


   

                  

Виктор Викторов 

 Re: Комплексная функция

06.11.2010, 00:16 

Заслуженный участник

04/04/09
1351

Dilettante в сообщении #370621 писал(а):

Предполагаю, что для начала нужно найти и аргумент , но у меня не получается.

Есть же очень милая формула, выражающая косинус комплексного числа через обычные и гиперболические синус и косинус.

Joker_vD в сообщении #370761 писал(а):

Я всегда думал, что аргумент и модуль есть только у комплексных чисел, а не у комплекснозначных функций.

А что является значением комплекснозначной функции?


   

                  

maxmatem 

 Re: Комплексная функция

06.11.2010, 00:29 

15/08/09
1458
МГУ

Да уж, я про модуль, что-то поспешил ответить(чего-то не заметил, что там функция , а некомплексное число). Согласен с Joker_vD

, про

Цитата:

Я всегда думал, что аргумент и модуль есть только у комплексных чисел, а не у комплекснозначных функций.

, может автор что-то другое имел в виду?


   

                  

Виктор Викторов 

 Re: Комплексная функция

06.11.2010, 00:46 

Заслуженный участник

04/04/09
1351

Пусть , тогда Можно отсюда найти модуль и аргумент? И вообще, если и , то .


   

                  

paha 

 Re: Комплексная функция

06.11.2010, 01:01 

Заслуженный участник

03/02/10
1928

так параметризуйте координатные прямые и подставляйте в

Виктор Викторов в сообщении #370800 писал(а):


   

                  

Виктор Викторов 

 Re: Комплексная функция

06. 11.2010, 01:06 

Заслуженный участник

04/04/09
1351

paha в сообщении #370804 писал(а):

так параметризуйте координатные прямые и подставляйте в

Виктор Викторов в сообщении #370800 писал(а):

Я «за», но работать должен автор темы.

(Оффтоп)

Рад Вас видеть.


   

                  

Joker_vD 

 Re: Комплексная функция

06. 11.2010, 01:13 

Заслуженный участник

09/09/10
3729

Виктор Викторов в сообщении #370793 писал(а):

А что является значением комплекснозначной функции?

А есть ли разница между «модуль комплекснозначной функции» и «модуль значения комплекснозначной функции»?


   

                  

Виктор Викторов 

 Re: Комплексная функция

06. 11.2010, 01:23 

Заслуженный участник

04/04/09
1351

Joker_vD в сообщении #370808 писал(а):

Виктор Викторов в сообщении #370793 писал(а):

А что является значением комплекснозначной функции?

А есть ли разница между «модуль комплекснозначной функции» и «модуль значения комплекснозначной функции»?

А как Вы думаете? Возьмите, например, функцию и посмотрите.


   

                  

Joker_vD 

 Re: Комплексная функция

06. 11.2010, 10:38 

Заслуженный участник

09/09/10
3729

(Оффтоп)

Композция модуля и тождественной функции есть модуль. Да. И что? А вот вы возьмите и посмотрите.


   

                  

MetaMorphy 

 Re: Комплексная функция

06. 11.2010, 10:42 

23/10/10
89

Зачем автору вообще модуль и аргумент, если спрашивается, во что перейдёт при отображении прямоугольная сетка?

Прямые переходят в семейство кривых (представляющих собой гиперболы и два вырожденных случая — прямую и два луча), а прямые в кривые (а это — семейство эллипсов и вырожденный случай — отрезок). Собственно, выше paha уже всё сказал.


   

                  

Dilettante 

 Re: Комплексная функция

06. 11.2010, 13:23 

29/05/10
85

Модуль и аргумент решил искать, т.к. подобное задание решалось на практике и там мы искали модуль и аргумент, а от них уже отталкивались. Про соотношение я если честно не знал…
Спасибо всем за развёрнутые рекомендации! Буду разбираться


   

                  

Виктор Викторов 

 Re: Комплексная функция

06. 11.2010, 15:40 

Заслуженный участник

04/04/09
1351

Виктор Викторов в сообщении #371139 писал(а):

Joker_vD в сообщении #370808 писал(а):

Виктор Викторов в сообщении #370793 писал(а):

А что является значением комплекснозначной функции?

А есть ли разница между «модуль комплекснозначной функции» и «модуль значения комплекснозначной функции»?

А как Вы думаете? Возьмите, например, функцию и посмотрите.

Joker_vD в сообщении #371250 писал(а):

(Оффтоп)

Композция модуля и тождественной функции есть модуль. Да. И что? А вот вы возьмите и посмотрите.

Если и , то . Можно в этом случае найти модуль или нет?


   

                  

paha 

 Re: Комплексная функция

06.11.2010, 22:51 

Заслуженный участник

03/02/10
1928

MetaMorphy в сообщении #371253 писал(а):

Прямые переходят

ай-яй-яй. .. зачем же лень человеческую поощрять. Ну, нашел бы топикстартер уравнения в полярных координатах, помучался бы с гиперболами

(Оффтоп)

хотя, если ему верить, то все равно будет с модулем и аргументом делать:)


   

                  

Показать сообщения за: Все сообщения1 день7 дней2 недели1 месяц3 месяца6 месяцев1 год Поле сортировки АвторВремя размещенияЗаголовокпо возрастаниюпо убыванию 
  Страница 1 из 1
 [ Сообщений: 15 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:

Мэтуэй | Популярные задачи

92
1 Найти точное значение грех(30)
2 Найти точное значение грех(45)
3 Найти точное значение грех(30 градусов)
4 Найти точное значение грех(60 градусов)
5 Найти точное значение загар (30 градусов)
6 Найти точное значение угловой синус(-1)
7 Найти точное значение грех(пи/6)
8 Найти точное значение cos(pi/4)
9 Найти точное значение грех(45 градусов)
10 Найти точное значение грех(пи/3)
11 Найти точное значение арктан(-1)
12 Найти точное значение cos(45 градусов)
13 Найти точное значение cos(30 градусов)
14 Найти точное значение желтовато-коричневый(60)
15 Найти точное значение csc(45 градусов)
16 Найти точное значение загар (60 градусов)
17 Найти точное значение сек(30 градусов)
18 Найти точное значение cos(60 градусов)
19 Найти точное значение cos(150)
20 Найти точное значение грех(60)
21 Найти точное значение cos(pi/2)
22 Найти точное значение загар (45 градусов)
23 Найти точное значение arctan(- квадратный корень из 3)
24 Найти точное значение csc(60 градусов)
25 Найти точное значение сек(45 градусов)
26 Найти точное значение csc(30 градусов)
27 Найти точное значение грех(0)
28 Найти точное значение грех(120)
29 Найти точное значение соз(90)
30 Преобразовать из радианов в градусы пи/3
31 Найти точное значение желтовато-коричневый(30)
32
35 Преобразовать из радианов в градусы пи/6
36 Найти точное значение детская кроватка(30 градусов)
37 Найти точное значение арккос(-1)
38 Найти точное значение арктан(0)
39 Найти точное значение детская кроватка(60 градусов)
40 Преобразование градусов в радианы 30
41 Преобразовать из радианов в градусы (2 шт. )/3
42 Найти точное значение sin((5pi)/3)
43 Найти точное значение sin((3pi)/4)
44 Найти точное значение тан(пи/2)
45 Найти точное значение грех(300)
46 Найти точное значение соз(30)
47 Найти точное значение соз(60)
48 Найти точное значение соз(0)
49 Найти точное значение соз(135)
50 Найти точное значение cos((5pi)/3)
51 Найти точное значение cos(210)
52 Найти точное значение сек(60 градусов)
53 Найти точное значение грех(300 градусов)
54 Преобразование градусов в радианы 135
55 Преобразование градусов в радианы 150
56 Преобразовать из радианов в градусы (5 дюймов)/6
57 Преобразовать из радианов в градусы (5 дюймов)/3
58 Преобразование градусов в радианы 89 градусов
59 Преобразование градусов в радианы 60
60 Найти точное значение грех(135 градусов)
61 Найти точное значение грех(150)
62 Найти точное значение грех(240 градусов)
63 Найти точное значение детская кроватка(45 градусов)
64 Преобразовать из радианов в градусы (5 дюймов)/4
65 Найти точное значение грех(225)
66 Найти точное значение грех(240)
67 Найти точное значение cos(150 градусов)
68 Найти точное значение желтовато-коричневый(45)
69 Оценить грех(30 градусов)
70 Найти точное значение сек(0)
71 Найти точное значение cos((5pi)/6)
72 Найти точное значение КСК(30)
73 Найти точное значение arcsin(( квадратный корень из 2)/2)
74 Найти точное значение загар((5pi)/3)
75 Найти точное значение желтовато-коричневый(0)
76 Оценить грех(60 градусов)
77 Найти точное значение arctan(-( квадратный корень из 3)/3)
78 Преобразовать из радианов в градусы (3 пи)/4 
79 Найти точное значение sin((7pi)/4)
80 Найти точное значение угловой синус(-1/2)
81 Найти точное значение sin((4pi)/3)
82 Найти точное значение КСК(45)
83 Упростить арктан(квадратный корень из 3)
84 Найти точное значение грех(135)
85 Найти точное значение грех(105)
86 Найти точное значение грех(150 градусов)
87 Найти точное значение sin((2pi)/3)
88 Найти точное значение загар((2pi)/3)
89 Преобразовать из радианов в градусы пи/4
90 Найти точное значение грех(пи/2)
91 Найти точное значение сек(45)
92 Найти точное значение cos((5pi)/4)
93 Найти точное значение cos((7pi)/6)
94 Найти точное значение угловой синус(0)
95 Найти точное значение грех(120 градусов)
96 Найти точное значение желтовато-коричневый ((7pi)/6)
97 Найти точное значение соз(270)
98 Найти точное значение sin((7pi)/6)
99 Найти точное значение arcsin(-( квадратный корень из 2)/2)
100 Преобразование градусов в радианы 88 градусов

Lambdify — Документация по SymPy 1.

11

Этот модуль предоставляет удобные функции для преобразования выражений SymPy в лямбда-функции, которые можно использовать для очень быстрого вычисления числовых значений.

sympy.utilities.lambdify.implemented_function( symfunc , реализация )[источник]

Добавить числовую реализацию в функцию symfunc .

symfunc может быть экземпляром UndefinedFunction или строкой имени. В последнем случае мы создаем UndefinedFunction экземпляр с этим имя.

Имейте в виду, что это быстрый обходной путь, а не общий метод создания специальные символические функции. Если вы хотите создать символическую функцию, которая будет используется всеми механизмами SymPy, вы должны подклассифицировать функцию учебный класс.

Параметры:

symfunc : str или UndefinedFunction экземпляр

Если str , то создайте новую UndefinedFunction с этим как имя. Если symfunc — неопределенная функция, создайте новую функцию с тем же названием и реализованной функцией.

реализация : вызываемый

числовая реализация, вызываемая evalf() или lambdify

Возвраты:

afunc : экземпляр sympy.FunctionClass

Функция

с прилагаемой реализацией

Примеры

 >>> из sympy.abc импортировать x
>>> из sympy.utilities.lambdify импортировать реализованную_функцию
>>> из sympy импортировать lambdify
>>> f = реализованная_функция('f', лямбда x: x+1)
>>> lam_f = lambdify(x, f(x))
>>> lam_f(4)
5
 
sympy.utilities.lambdify.lambdastr( args , expr , принтер=Нет , dummify=Нет )[источник]

Возвращает строку, которую можно преобразовать в лямбда-функцию.

Примеры

 >>> из sympy.abc импортировать x, y, z
>>> из sympy.utilities.lambdify импортировать lambdastr
>>> лямбдастр(х, х**2)
'лямбда х: (х**2)'
>>> lambdastr((x,y,z), [z,y,x])
'лямбда x,y,z: ([z, y, x])'
 

Хотя кортежи могут не отображаться в качестве аргументов лямбда-выражения в Python 3, lambdastr создаст лямбда-функцию, которая распаковывает оригинал аргументы, чтобы можно было обрабатывать вложенные аргументы:

 >>> lambdastr((x, (y, z)), x + y)
'лямбда _0,_1: (лямбда x,y,z: (x + y))(_0,_1[0],_1[1])'
 
sympy.utilities.lambdify.lambdify( аргументы , expr , модули = нет , принтер = нет , use_imps = True , dummify = False , cse = False ) [источник]

Преобразование выражения SymPy в функцию, позволяющую быстро числовая оценка.

Предупреждение

Эта функция использует exec и поэтому не должна использоваться на несанкционированный ввод.

Устарело, начиная с версии 1.7: передача набора для параметра args устарела, поскольку наборы неупорядоченный. Используйте упорядоченную итерацию, такую ​​как список или кортеж.

Параметры:

аргументы : Список [Символ]

Переменная или список переменных, вложенность которых представляет вложенность аргументов, которые будут переданы в функцию.

Переменные могут быть символами, неопределенными функциями или матричными символами.

 >>> из sympy import Eq
>>> из sympy.abc импортировать x, y, z
 

Список переменных должен соответствовать структуре того, как аргументы будут переданы в функцию. Просто приложите параметры, поскольку они будут переданы в списке.

Для вызова функции типа f(x) , затем [x] должен быть первым аргументом lambdify ; за это случае также можно использовать один x :

 >>> f = lambdify(x, x + 1)
>>> ф(1)
2
>>> f = lambdify([x], x + 1)
>>> ф(1)
2
 

Чтобы вызвать функцию типа f(x, y) , тогда [x, y] будет быть первым аргументом lambdify :

 >>> f = lambdify([x, y], x + y)
>>> f(1, 1)
2
 

Чтобы вызвать функцию с одним кортежем из трех элементов, например f((x, y, z)) , тогда [(x, y, z)] будет первым аргумент lambdify :

 >>> f = lambdify([(x, y, z)], Eq(z**2, x**2 + y**2))
>>> f((3, 4, 5))
Истинный
 

Если будут переданы два аргумента и первый является скалярным, но второй — кортеж с двумя аргументами, тогда элементы в списке должна соответствовать этой структуре:

 >>> f = lambdify([x, (y, z)], x + y + z)
>>> f(1, (2, 3))
6
 

выражение : выражение

Выражение, список выражений или матрица для вычисления.

Списки могут быть вложенными. Если выражение представляет собой список, вывод также будет списком.

 >>> f = lambdify(x, [x, [x + 1, x + 2]])
>>> ф(1)
[1, [2, 3]]
 

Если это матрица, будет возвращен массив (для модуля NumPy).

 >>> из матрицы импорта sympy
>>> f = lambdify(x, Matrix([x, x + 1]))
>>> ф(1)
[[1]
[2]]
 

Обратите внимание, что здесь используется порядок аргументов (переменные, затем выражение) для эмуляции ключевого слова Python lambda . lambdify(x, expr) работает (примерно) как lambda x: expr (см. Как это работает ниже).

модули : стр, дополнительно

Указывает числовую библиотеку для использования.

Если не указано, модули по умолчанию:

  • ["scipy", "numpy"] , если установлен SciPy

  • ["numpy"] , если установлен только NumPy

  • ["math", "mpmath", "sympy"] , если ни один из них не установлен.

То есть функции SymPy по возможности заменены на либо scipy либо numpy функций, если они доступны, и Python’s в противном случае стандартная библиотека math или mpmath .

Модули могут быть одного из следующих типов:

  • Строки "math" , "mpmath" , "numpy" , "numexpr" , "numexpr" "scipy" , "sympy" , или "tensorflow" или "jax" . Это использует соответствующий принтер и сопоставление пространства имен для этого модуля.

  • Модуль А (например, математический ). При этом используется глобальное пространство имен модуль. Если модуль является одним из вышеупомянутых известных модулей, он будет также используйте соответствующий принтер и отображение пространства имен (т. е. modules=numpy эквивалентно modules="numpy" ).

  • Словарь, который сопоставляет имена функций SymPy с произвольными функции (например, {'sin': custom_sin} ).

  • Список, содержащий сочетание приведенных выше аргументов с более высоким приоритет отдается записям, которые появляются первыми (например, чтобы использовать модуль NumPy, но переопределить функцию sin с пользовательской версией вы можете использовать [{'sin': custom_sin}, 'numpy'] ).

фиктивный : bool, необязательный

Независимо от того, являются ли переменные в предоставленном выражении, которые не действительные идентификаторы Python заменяются фиктивными символами.

Это позволяет использовать неопределенные функции, такие как Function('f')(t) . поставляются в качестве аргументов. По умолчанию переменные только фиктивные если они не являются допустимыми идентификаторами Python.

Установите dummify=True , чтобы заменить все аргументы фиктивными символами (если args не является строкой) — например, чтобы убедиться, что аргументы не переопределяют никаких встроенных имен.

cse : bool или вызываемый, необязательный

Большие выражения могут быть вычислены более эффективно, если общие подвыражения идентифицируются и предварительно вычисляются до используется многократно. Поиск подвыражений сделает Однако создание функции «lambdify» медленнее.

Когда True , используется sympy.simplify.cse , иначе (по умолчанию) пользователь может передать функцию, соответствующую подписи cse .

Пояснение

Например, чтобы преобразовать выражение SymPy sin(x) + cos(x) в эквивалентная функция NumPy, которая численно оценивает его:

 >>> from sympy import sin, cos, symbols, lambdify
>>> импортировать numpy как np
>>> х = символы('х')
>>> выражение = грех(х) + соз(х)
>>> выражение
грех (х) + потому что (х)
>>> f = lambdify(x, expr, 'numpy')
>>> а = np. массив ([1, 2])
>>> ф(а)
[1.381773290,49315059]
 

Основная цель этой функции — предоставить мост от SymPy выражения для числовых библиотек, таких как NumPy, SciPy, NumExpr, mpmath, и тензорный поток. Как правило, функции SymPy не работают с объектами из другие библиотеки, такие как массивы NumPy и функции из числовых такие библиотеки, как NumPy или mpmath, не работают с выражениями SymPy. lambdify соединяет эти два понятия, преобразуя выражение SymPy в эквивалентная числовая функция.

Основной рабочий процесс с lambdify заключается в том, чтобы сначала создать выражение SymPy. представляющие любую математическую функцию, которую вы хотите оценить. Этот должно выполняться с использованием только функций и выражений SymPy. Затем используйте lambdify , чтобы преобразовать это в эквивалентную функцию для числовых оценка. Например, выше мы создали expr , используя символ SymPy. x и функции SymPy sin и cos , а затем преобразовал его в эквивалентная функция NumPy f и вызвала ее в массиве NumPy a .

Примеры

 >>> из sympy.utilities.lambdify импортировать реализованную_функцию
>>> из sympy импортирует sqrt, sin, Matrix
>>> из функции импорта sympy
>>> из sympy.abc импортировать w, x, y, z
 
 >>> f = lambdify(x, x**2)
>>> f(2)
4
>>> f = lambdify((x, y, z), [z, y, x])
>>> f(1,2,3)
[3, 2, 1]
>>> f = lambdify(x, sqrt(x))
>>> f(4)
2.0
>>> f = lambdify((x, y), sin(x*y)**2)
>>> f(0, 5)
0,0
>>> row = lambdify((x, y), Matrix((x, x + y)).T, modules='sympy')
>>> строка (1, 2)
Матрица([[1, 3]])
 

lambdify можно использовать для перевода выражений SymPy в mpmath функции. Это может быть предпочтительнее использования evalf (который использует mpmath на бэкэнд) в некоторых случаях.

 >>> f = lambdify(x, sin(x), 'mpmath')
>>> ф(1)
0,8414709848078965
 

Аргументы кортежа обработаны, и функция lambdified должна вызываться с тем же типом аргументов, который использовался для создания функция:

 >>> f = lambdify((x, (y, z)), x + y)
>>> f(1, (2, 4))
3
 

Функцию flatten можно использовать, чтобы всегда работать со сглаженными аргументы:

 >>> из импорта sympy. utilities.iterables сгладить
>>> args = w, (x, (y, z))
>>> значения = 1, (2, (3, 4))
>>> f = lambdify (сглаживание (аргументы), w + x + y + z)
>>> f(*flatten(vals))
10
 

Функции, представленные в expr , также могут иметь собственные числовые значения. реализации в вызываемом объекте, прикрепленном к атрибуту _imp_ . Этот может использоваться с неопределенными функциями с помощью реализованной_функции завод:

 >>> f = реализованная_функция (функция ('f'), лямбда x: x+1)
>>> func = lambdify(x, f(x))
>>> функция(4)
5
 

lambdify всегда предпочитает _imp_ реализаций к реализациям в других пространствах имен, если только входной параметр use_imps не имеет значение False.

Использование с Tensorflow:

 >>> импортировать тензорный поток как tf
>>> из sympy import Max, sin, lambdify
>>> из sympy.abc импортировать x
 
 >>> f = Макс(х, грех(х))
>>> func = lambdify(x, f, 'tensorflow')
 

После tensorflow v2 активное выполнение включено по умолчанию. Если вы хотите получить совместимый результат для tensorflow v1 и v2 как и в этом руководстве, запустите эту строку.

 >>> tf.compat.v1.enable_eager_execution()
 

Если у вас включено активное выполнение, вы можете получить результат сразу же, как вы можете использовать numpy.

Если вы передаете объекты тензорного потока, вы можете получить EagerTensor объект вместо значения.

 >>> результат = функция (tf.constant (1.0))
>>> распечатать(результат)
tf.Tensor(1.0, shape=(), dtype=float32)
>>> печать (результат.__класс__)
<класс 'tensorflow.python.framework.ops.EagerTensor'>
 

Вы можете использовать .numpy() для получения значения numpy тензора.

 >>> результат.numpy()
1,0
 
 >>> var = tf.Variable(2.0)
>>> result = func(var) # также работает для tf.Variable и tf.Placeholder
>>> результат.numpy()
2.0
 

Работает с массивом любой формы.

 >>> тензор = tf. constant([[1.0, 2.0], [3.0, 4.0]])
>>> результат = функция (тензор)
>>> результат.numpy()
[[1. 2.]
 [3. 4.]]
 

Примечания

  • Для функций, включающих вычисления больших массивов, numexpr может предоставить значительное ускорение по сравнению с numpy. Обратите внимание, что доступные функции for numexpr более ограничены, чем numpy, но могут быть расширены с помощью реализованная_функция и определяемые пользователем подклассы функции. Если указано, numexpr может быть единственным параметром в модулях. Официальный список функций numexpr можно найти по адресу: https://numexpr.readthedocs.io/en/latest/user_guide.html#supported-functions

  • В приведенных выше примерах сгенерированные функции могут принимать скалярные значения или массивы numpy в качестве аргументов. Однако в некоторых случаях сгенерированная функция полагается на ввод, являющийся массивом numpy:

     >>> импортировать numpy
    >>> из sympy импортировать кусочно
    >>> из sympy. testing.pytest импортировать ignore_warnings
    >>> f = lambdify(x, Piecewise((x, x <= 1), (1/x, x > 1)), "numpy")
     
     >>> с ignore_warnings (RuntimeWarning):
    ... f (numpy.array ([-1, 0, 1, 2]))
    [-1. 0. 1. 0,5]
     
     >>> ф(0)
    Traceback (последний последний вызов):
        ...
    ZeroDivisionError: деление на ноль
     

    В таких случаях ввод должен быть заключен в массив numpy:

     >>> с ignore_warnings (RuntimeWarning):
    ... поплавок (f (numpy.array ([0])))
    0,0
     

    Или, если функциональность numpy не требуется, можно использовать другой модуль:

     >>> f = lambdify(x, Piecewise((x, x <= 1), (1/x, x > 1)), "math")
    >>> ф(0)
    0
     

Как это работает

При использовании этой функции очень полезно иметь представление о том, что она делается. По своей сути lambdify — это не что иное, как пространство имен. перевод поверх специального принтера, который заставляет работать некоторые угловые случаи правильно.

Чтобы понять lambdify, сначала мы должны правильно понять, как Python пространства имен работают. Скажем, у нас было два файла. Один называется sin_cos_sympy.py , с

 # sin_cos_sympy.py

из sympy.functions.elementary.trigonometric import (cos, sin)

определение sin_cos(x):
    вернуть грех (х) + соз (х)
 

и один с именем sin_cos_numpy.py с

 # sin_cos_numpy.py

из numpy import sin, cos

определение sin_cos(x):
    вернуть грех (х) + соз (х)
 

Два файла определяют идентичную функцию sin_cos . Однако в первый файл, sin и cos определяются как SymPy sin и потому что . Во втором они определяются как версии NumPy.

Если бы мы импортировали первый файл и использовали функцию sin_cos , мы получится что-то вроде

 >>> из sin_cos_sympy импортировать sin_cos
>>> sin_cos(1)
потому что (1) + грех (1)
 

С другой стороны, если мы импортировали sin_cos из второго файла, мы получил бы

 >>> из sin_cos_numpy импортировать sin_cos
>>> sin_cos(1)
1. 38177329068
 

В первом случае мы получили символьный вывод, т.к. sin и cos функционируют из SymPy. Во втором мы получили числовое значение. результат, потому что sin_cos использовал числовые функции sin и cos из NumPy. Но обратите внимание, что версии sin и cos , которые были used не было свойственно определению функции sin_cos . Обе Определения sin_cos точно такие же. Скорее, он основывался на имена, определенные в модуле, где была определена функция sin_cos .

Ключевым моментом здесь является то, что когда функция в Python ссылается на имя, не определено в функции, это имя ищется в «глобальном» пространство имен модуля, в котором определена эта функция.

Теперь в Python мы можем эмулировать это поведение без фактического написания файл на диск с помощью функции exec . exec принимает строку содержащий блок кода Python и словарь, который должен содержать глобальные переменные модуля. Затем он выполняет код «внутри», который словарь, как если бы это были глобальные переменные модуля. Следующее эквивалентно к sin_cos , определенному в sin_cos_sympy.py :

 >>> импортировать симпи
>>> module_dictionary = {'sin': sympy.sin, 'cos': sympy.cos}
>>> выполнить('''
... определение sin_cos(x):
... вернуть sin(x) + cos(x)
... ''', модульный_словарь)
>>> sin_cos = модуль_словарь['sin_cos']
>>> sin_cos(1)
потому что (1) + грех (1)
 

и аналогично sin_cos_numpy :

 >>> импортировать numpy
>>> module_dictionary = {'sin': numpy.sin, 'cos': numpy.cos}
>>> выполнить('''
... определение sin_cos(x):
... вернуть sin(x) + cos(x)
... ''', модульный_словарь)
>>> sin_cos = модуль_словарь['sin_cos']
>>> sin_cos(1)
1.38177329068
 

Итак, теперь мы можем понять, как работает lambdify . Название «ламбдифай» исходит из того факта, что мы можем думать о чем-то вроде lambdify(x, sin(x) + cos(x), 'numpy') как лямбда x: sin(x) + cos(x) , где sin и cos происходят из пространства имен numpy . Вот почему аргумент символов является первым в lambdify , в отличие от большинства SymPy функции там, где оно стоит после выражения: чтобы лучше имитировать лямбда ключевое слово.

lambdify принимает входное выражение (например, sin(x) + cos(x) ) и

  1. Преобразует в строку

  2. Создает глобальный словарь модулей на основе модулей, передано (по умолчанию используется модуль NumPy)

  3. Создает строку "def func({vars}): return {expr}" , где {vars} — это список переменных, разделенных запятыми, и {expr} — это строка созданный на шаге 1., затем exec`а эта строка с глобальными переменными модуля namespace и возвращает func .

На самом деле функции, возвращаемые lambdify , поддерживают проверку. Так что вы можете посмотрите, как именно они определяются с помощью inspect. getsource или ?? если вы используют IPython или блокнот Jupyter.

 >>> f = lambdify(x, sin(x) + cos(x))
>>> импорт проверить
>>> распечатать (проверить.getsource (f))
защита _lambdifygenerated(x):
    вернуть грех (х) + соз (х)
 

Здесь показан исходный код функции, но не ее пространство имен. был определен в. Мы можем проверить это, взглянув на __globals__ атрибут f :

 >>> f.__globals__['sin']

>>> f.__globals__['cos']

>>> f.__globals__['sin'] равно numpy.sin
Истинный
 

Это показывает нам, что грех и потому что в пространстве имен ф будет numpy.sin и numpy.cos .

Обратите внимание, что на каждом из этих шагов есть несколько вспомогательных слоев, но в ядро, так работает lambdify . Шаг 1 выполняется с помощью LambdaPrinter принтеры, определенные в модуле печати (см. sympy.printing.lambdarepr ). Это позволяет использовать различные выражения SymPy. чтобы определить, как они должны быть преобразованы в строку для разных модулей. Вы можете изменить принтер lambdify использует, передавая пользовательский принтер в аргумент принтера .

Шаг 2 дополнен некоторыми переводами. Есть по умолчанию переводы для каждого модуля, но вы можете предоставить свои собственные, передав list в аргумент модулей . Например,

 >>> определение mysin(x):
... print('взять на себя грех', x)
... вернуть numpy.sin(x)
...
>>> f = lambdify(x, sin(x), [{'sin': mysin}, 'numpy'])
>>> ф(1)
взять на себя грех 1
0,8414709848078965
 

Словарь globals создается из списка путем слияния словарь {'sin': mysin} и модуль словаря для NumPy. слияние выполняется так, что более ранние элементы имеют приоритет, поэтому mysin используется выше вместо numpy. sin .

Если вы хотите изменить способ работы lambdify для данной функции, Обычно проще всего это сделать, изменив словарь globals как таковой. В более сложных случаях может потребоваться создание и передача заказной принтер.

Наконец, шаг 3 дополнен некоторыми удобными операциями, такими как добавление строки документации.

Понимание того, как работает lambdify , поможет избежать определенных ошибки при его использовании. Например, распространенной ошибкой является создание lambdified функцию для одного модуля (скажем, NumPy) и передавать ей объекты из другой (скажем, выражение SymPy).

Например, мы создаем

 >>> из sympy.abc импортировать x
>>> f = lambdify(x, x + 1, 'numpy')
 

Теперь, если мы передаем массив NumPy, мы получаем этот массив плюс 1

 >>> импортировать numpy
>>> a = numpy.array([1, 2])
>>> ф(а)
[2 3]
 

Но что произойдет, если вы совершите ошибку, передав выражение SymPy вместо массива NumPy:

 >>> f(x + 1)
х + 2
 

Это сработало, но случайно. Теперь возьми другой ламбдифицированный функция:

 >>> из sympy import sin
>>> g = lambdify(x, x + sin(x), 'numpy')
 

Это работает, как и ожидалось, для массивов NumPy:

 >>> г(а)
[1,84147098 2,

743]

Но если мы попытаемся передать выражение SymPy, произойдет сбой

 >>> попробуйте:
... г (х + 1)
... # Выпуск NumPy после 1.17 вызывает TypeError вместо
... # Ошибка атрибута
... кроме (AttributeError, TypeError):
... поднять AttributeError()
Traceback (последний последний вызов):
...
Ошибка атрибута:
 

Теперь давайте посмотрим, что произошло. Причина, по которой это не удается, заключается в том, что g вызывает numpy.sin для входного выражения, а numpy.sin не знать, как работать с объектом SymPy. Как правило, NumPy функции не знают, как работать с выражениями SymPy, а SymPy функции не умеют работать с массивами NumPy. Вот почему существует: для обеспечения моста между SymPy и NumPy.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *