Online Help

Maplesoft™, filiale de Cybernet Systems Co. Ltd. au Japon, est le premier fournisseur logiciels haute performance dans le domaine de l’ingénierie, des sciences et des mathématiques. Sa suite de produits reflète la philosophie selon laquelle « avec de grands outils, on peut réaliser de grandes choses »
615 Kumpf Drive
Waterloo, ON Canada
N2V 1K8
1-800-267-6583
Communauté

Liens rapides
Listes d’e-mails Maplesoft
Evalf в maple что это
Аппроксимация Площади Прямоугольниками
Рассмотрим площадь фигуры, ограниченной линией на интервале [-1, 4].
Как бы нам исхитриться, да и вычислить площадь фигуры, ограниченной этим графиком (на указанном отрезке)?
Предупреждение: Ни о каком определённом интеграле речи пока не идёт!
Может разбить всю рассматриваемую область на множество узких прямоугольников, одно основание у которых принадлежит оси х , а второе «упирается» в кривую? Одна часть таких прямоугольников принадлежала бы верхней полуплоскости, а другая — нижней. Ничего гениального, но именно в этом и состоит основная идея аппроксимации площади фигуры прямоугольниками. Остаются лишь детали.
Конкретнее: разделим отрезок [-1;4] на определённое число равных суботрезков. Каждый из этих суботрезков (подотрезков, подинтервалов) будем воспринимать как одно из оснований соответствующего прямоугольника. Противоположное основание такого прямоугольника пусть упирается правым концом в график данной функции. Т.е. одна из вершин прямоугольника (правая верхняя или правая нижняя) будет принадлежать графику функции. Мы можем с лёгкостью выполнить указанное построение при помощи специальной Maple-команды rightbox из пакета student .
В данном случае мы используем 5 подинтервалов. (Команде rightbox мы об этом сообщили последним её параметром). Можно с лёгкостью определить сумму площадей всех прямоугольников (отметьте, что основание каждого из них равно 1):
> evalf( abs(f(0)) + abs(f(1)) + abs(f(2)) + abs(f(3)) + abs(f(4)) );
Высота каждого из прямоугольников будет совпадать с абсолютной величиной значения функции на правом конце соответствующего подинтервала).
То же самое можно выполнить и более изящно — с помощью команды sum :
Разумеется, такое приближение является чрезвычайно грубым. Попробуем использовать большее количество прямоугольников. Увеличим их число вдвое (при этом длина каждого подинтервала уменьшится вдвое и станет равной 1/2):
Ну и так далее. Чем большее количество прямоугольников мы возьмём, тем точнее их суммарная площадь будет соответствовать истинной. Это очевидно, не правда ли? В десятичной форме нам будет проще следить за изменением результата.
Увеличим число подинтервалов до 25.
Методика применения пакета Maple для кинематического анализа механизмов Текст научной статьи по специальности «Математика»
Предложена методика реализации метода планов для кинематического исследования механизмов с использованием прикладных библиотек математического пакета Maple на примере анализа рычажного механизма второго класса. Подробно описан алгоритм создания процедуры построения планов положений и скоростей, приведен пример такой процедуры. Рассмотрены варианты использования данной методики для решения практических задач. Библиогр. 1. Ил. 3.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по математике , автор научной работы — Асадулин Рафаэль Камильевич
Разработка комплекса универсальных mws-программ (Maple) для компьютерного моделирования и автоматизации расчетов в области механики
Математическое моделирование объектов дифференциальной геометрии кривых в системе компьютерной математики Maple
Программная реализация математической модели кинематического расчета плоских рычажных механизмов
Recent developments on processing and interpretation aspects of first-order reversal curves (forc)
О возможностях ГИС в оценке численности и прогнозировании размещения гнездящихся хищных птиц: апробация методик на примере анализа пространственного распределения могильника и беркута в Волго-Уральском регионе, Россия
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
USING PACKET ‘MAPLE’ FOR KINEMATICAL ANALYSIS OF MECHANISMS
Methods of plans for kinematical investigating of mechanisms using applied libraries of mathematical packet ‘Maple’ have been presented taking analysis of lever mechanism of II class as an example. Algorithm of making plans of configuration and velocity is given in details. Variants of given methods have been used to solve practical problems.
Текст научной работы на тему «Методика применения пакета Maple для кинематического анализа механизмов»
Р. К. Асадулин Астраханский государственный технический университет
МЕТОДИКА ПРИМЕНЕНИЯ ПАКЕТА MAPLE ДЛЯ КИНЕМАТИЧЕСКОГО АНАЛИЗА МЕХАНИЗМОВ
В машиноведении разработано множество методов графоаналитического анализа кинематики и динамики механизмов. В последнее время эти методы были вытеснены компьютерными программами, позволяющими быстрее и точнее решать задачи кинематического анализа аналитическими методами. Однако и старые методы не были забыты, т. к. они дают более наглядное представление о происходящих в процессе движения механизмов процессах.
Наиболее распространенными «старыми» методами кинематического анализа механизмов являются метод планов и метод кинематических диаграмм. Суть этих методов сводится к следующему: в некотором масштабе строится кинематическая схема механизма, угловая скорость входного звена которого принимается постоянной; строятся: планы положений механизма, планы скоростей или кинематическая диаграмма перемещений анализируемой точки механизма, планы ускорений или графически дифференцируется диаграмма перемещений, причем чем меньше шаг построения планов положений, тем точнее решение задачи. В результате получают дискретные значения скоростей и ускорений всех точек механизма. Все эти действия предполагают большой объем построений и вычислений.
Реализуем метод планов с помощью пакета Maple 7, богатого прикладными библиотеками, направленными на решение различных задач.
Пакет аналитических вычислений Maple не нашел такого широкого распространения, как, например, MathCAD или Matlab [1], но это не уменьшает его достоинств. Этот пакет — совместное детище университета Ватерлоо (штат Онтарио, Канада) и Высшей технической школы (ЕТН, Цюрих, Швейцария). Он состоит из ядра — процедур, написанных на языке С, библиотек и интерфейса. Работа с пакетом проходит в режиме интерпретатора. В строке ввода пользователь вводит команду, нажимает клавишу Enter и получает результат — строку (строки) вывода либо сообщение об ошибочно введенной команде. Тут же выдается приглашение вводить новую команду и т. д.
Библиотека geometry содержит команды для решения задач двухмерной евклидовой геометрии [1]. Геометрические объекты определяются обычным образом: точка задается своими координатами (команда point), прямая (команда line) — двумя точками или уравнением, окружность (команда circle) — тремя точками, заданием центра и радиуса, диаметром. Целый ряд команд пакета проверяет выполнение того или иного условия для геометрических объектов, например, команда are_collinear проверяет, лежат ли три точки на одной прямой. Другие команды предназначены для
поиска характеристик геометрических объектов — так, команда intersection находит точку пересечения двух прямых. Все программы на языке Maple начинаются с команды restart, которая обнуляет все полученные результаты при перезапуске программы.
В качестве объекта исследования рассмотрим изображенный на рис. 1 рычажный механизм второго класса по Ассуру.
Рис. 1. Схема исследуемого механизма
Механизм приводится в движение кривошипом 1, вращающимся с постоянной угловой скоростью Wj = const. Создадим процедуру построения планов положений этого механизма. Задаем геометрические параметры механизма: /1 = 1,2 — длина звена 1; /2 = 1,5 — длина звена 2; / 31 = 5,0 — длина отрезка ВС звена 3; / 4 = 1,0 — длина отрезка CD звена 3; ОЕ = 4,5 — длина отрезка OE. Задаем начальный и конечный угол поворота звена 1: ug1 = 0; ug2 = 2 ■% . Определим шаг построения планов положений, который представляет собой угол поворота кривошипа
ug2 — ug1 Npoints -1
Здесь Крот18 — число планов положений, которые должны быть построенными, т. е. угол поворота кривошипа для /-го плана положений будет равен:
ugol, = ug1 + step ■ i.
Определим положение всех точек механизма (напомним, что точка задается командой point): geometry [point] (O, [0,0])
geometry[point](C||i,[(oe+l4*cos(ugol[i])),(l4*sin(ugol[i]))]) geometry [point] (E,[oe,0])
Точка D лежит на прямой OE и является одной из точек пересечения этой прямой с окружностью радиусом /32 с центром в точке С. geometry [circle] (ec, [E,l4]): geometry [line]
geometry[circle] (cd||i, [C||i,l32]):
Команда intersection выдаст две точки пересечения прямой и окружности, соответственно D||i1 и D||i2 (символ || является синтаксическим знаком, результатом такой записи будет значение Di1 и Di2). Из условия сборки нас будет интересовать точка, координаты которой ограничены условием xD > ОЕ , т. е.: if x1_d||i > oe then D||i:=D||i1 else D||i:=D||i2 end if
Эту запись можно расшифровать следующим образом — если координата по оси х точки Di1 больше величины OE, то точку Di1 считать точкой Di, в противном случае считать точкой Di точку Di2 .
Чтобы не потерять ход рассуждений, необходимо указать, что команда evalf(n) вычисляет значение величины n в формате числа с плавающей запятой, а команда HorizontalCoord(N) определяет координату точки N по горизонтальной оси (форма записи geometry[HorizontalCoord](N) означает, что команда HorizontalCoord принадлежит библиотеке geometry).
Точка А находится на пересечении двух окружностей с центрами в точках О и В и радиусами /2 и /4 соответственно. Поскольку есть затруднения в задании ограничивающих условий, представляем оба условия сборки:
geometry [circle] (ba||i,[B||i,l2]):
Определим координаты всех подвижных точек с использованием команд VerticalCoord(N) и HorizontalCoord, определяющих координаты точки по осям координат: x1_a||i:=evalf(geometry[VerticalCoord](A||i1)): x2_a||i:=evalf(geometry[HorizontalCoord](A||i2)): x_a||i:=geometry[HorizontalCoord](A||i1): y_a||i:=geometry[VerticalCoord](A||i1): x_a_||i:=geometry[HorizontalCoord](A||i2): y_a_||i:=geometry[VerticalCoord](A||i2): x_b||i:=geometry[HorizontalCoord](B||i): y_b||i:=geometry[VerticalCoord] (B||i): x_c||i:=geometry[HorizontalCoord] (C||i): y_c||i:=geometry[VerticalCoord](C||i): x_d||i:=geometry[HorizontalCoord] (D||i): y_d||i:=geometry[VerticalCoord] (D||i): x_e:=geometry[HorizontalCoord](E):
Для визуализации полученных результатов воспользуемся элементами библиотеки plottools, предназначенной для изображения на графиках простейших геометрических фигур:
zveno1 [i] := plottools [line] ([0,0],[x_a||i,y_a||i] ,color =blue,thickness=2): zveno1_ [i] :=plottools [line] ([0,0], [x_a_||i,y_a_| |i] ,color =blue,thickness=2): zveno2 [i] :=plottools [line]([x_a||i,y_a||i],[x_b||i,y_b||i] ,color= =blue,thickness=2):
zveno3 [i] :=plottools [line]([x_b||i,y_b||i],[x_d||i,y_d||i] ,color=
polzun [i]: =plottools [polygon] ([ [x_d||i-
0.5,y_d||i+0.2],[x_d||i+0.5,y_d||i+0.2],[x_d||i+0.5,y_d||i-0.2],[x_d||i-0.5, y_d||i-0.2]],color= yellow):
krivoship [i] :=plottools [line]([x_c||i,y_c||i],[x_e,y_e] ,color =blue,thickness=2):
opora1:=plottools[polygon]([[0,0],[-.2,-.2],[.2,-.2]],color=red, thickness=1): opora2:=plottools[polygon] ([ [x _e,y_e], [x_e-.2,y_e-.2], [x_e+.2,y_e-.2]], color=red, thickness=1): z1_[i]:=plottools[circle]([0,0] ,l1): z2_[i]:=plottools[circle]([x_b||i,y_b||i],l2):
Как видно из этой записи, такие команды, как line и circle встречаются не только в библиотеке geometry, поэтому необходимо конкретизировать их принадлежность. Новой командой является команда polygon, служащая для задания многоугольника по координатам его вершин. Опции color и thickness задают цвет и толщину линии изображаемой фигуры. Теперь можно построить i-й план положений с помощью команды display.
Индекс i у каждого определенного параметра позволяет нам сгруппировать весь алгоритм расчета в цикл, т. е. алгоритм будет выполняться для каждого i из определенной последовательности. Maple позволяет создать процедуру, в которую будет заключен этот алгоритм. В результате получим n планов положений. Если их показывать по очереди, то получим анимацию движения механизма, заданную процедурой, которая носит название pp, что означает «планы положений»: pp:= proc(Npoints::numeric) local
step := (ug2 — ug1)/(Npoints — 1); for i from 0 to Npoints-1 do ugol[i]:=ug1+step*i;
Здесь слово proc означает — процедура, число за скобками — Npoints -число планов положений, которое мы введем при запуске процедуры. Затем вводят локальные переменные, т. е. переменные, которым будет присваиваться какое-то значение только внутри данной процедуры. Место многоточия на самом деле занимает алгоритм, описанный выше. Слово seq в команде display означает, что переменная picture[i] будет преобразована в список, где i в качестве нижнего индекса будет задавать последовательность, принимая значения от 0 до Npoints-1, а значит, и картинка, заданная фигурами opora1, opora2, zveno1[i], zveno2[i], zveno1_[i], zveno2_[i], zveno3[i], polzun[i], krivoship[i], z1_[i], z2_[i], будет воспроизводиться последовательно. Выполнение команды «pp(100);» занимает несколько минут, после чего выводится анимационная картинка из ста слайдов (рис. 2).
Рис. 2. Кадры анимации движения механизма
Укажем, что результатом выполнения процедуры рр можно сделать любые из определенных в процедуре параметров, например, можно получить матрицу, где будут приведены координаты всех точек, или запрограммировать процедуру так, чтобы при вводе в скобках угла поворота кривошипа процедура определяла координаты какой-то одной или всех точек для данного положения механизма. Это говорит о том, что процедура является численной функцией / (х) = у , где значение х мы задаем сами, а значение у получаем в процессе выполнения процедурой алгоритма расчета, причем «тело» процедуры мы не изменяем.
Аналогичным образом выполняем построение планов скоростей, к процедуре рр добавляем следующие строки:
geometry [circle] (cb_||i, [c||i,bc_||i]):
if bd1||i >bd2||i then b||i:=b||i1 else b||i:=b||i2 end if:
geometry[line] (OA1 ||i,[O,A||i1]):
geometry [line] (OA2||i,[O,A||i2]):
geometry [PerpendicularLine] (pva1 ||i,pv,OA1 ||i):
geometry [intersection] (a1||i,pva1 ||i,ba1||i):
Символьные вычисления средствами Python. Часть1. Основы

При решении задач математического моделирования процессов и объектов часто очень практично использовать алгоритмы на языке Python с использованием символьных вычислений. Основываясь на библиотеке SymPy, Python с успехом справляется с решением уравнений и систем, интегрированием и дифференцированием, вычислением пределов, разложением в ряд и суммированием рядов, упрощением выражений, выполняет поиск решения дифференциальных уравнений и систем.
При использовании символьных вычислений пользователю предоставляется возможность управлять работой программы в процессе ее исполнения путём ввода любых допустимых функций с заданным количеством переменных.
Как преподаватель дисциплины «Компьютерная техника и программирование», в модуле, посвященном программированию на языке Python, я знакомлю студентов с возможностями этого языка для научных исследований. Вашему вниманию представляется цикл статей, в которых можно ознакомиться с символьными вычислениями на Python. Хочу сразу предупредить, что данные статьи не претендуют на абсолютную уникальность, так как собраны на основании материалов из различных источников, их цель – обучить студентов основам символьных вычислений.
Самым первым шагом на пути к символьным вычислениям является импортирование функций модуля SymPy с помощью pip, системы управления пакетами Python. Если вы с этим справились, сразу перейдем к объявлению переменных.
Примечание. Для сокращения записи во всех следующих примерах не приводится первая строка: from sympy import *
Явное объявление символьных переменных
Для символьных вычислений с помощью модуля SymPy символьные переменные и функции должны быть объявлены как таковые. В программах для математических вычислений, таких как Mathematica или Maple, переменные сразу рассматриваются как символьные. В Python же их необходимо принудительно объявить символьными, и сделать это можно несколькими путями. Самым простым будет использование функций symbols() или var(). Первая функция возвращает ссылку на символьный объект в виде какой-либо переменной. Вторая, без присваивания создает символьную переменную.
Пример кода
>>> x,y,a,b = symbols('x y a b') # созданы четыре символьные переменные, предыдущие же значения переменных затираются >>> f=a**3*x + 3*a**2*x**2/2 + a*x**3 + x**4/4 # переменная f становится автоматически символьной >>> type(f) >>> var('u,v') (u, v) >>> f=sin(u)**2+tan(v) # переменная f автоматически становится символьной >>> type(f)
Главное отличие между функциями symbols() и var() состоит в том, первая функция возвращает ссылку на символьный объект. Для использования в дальнейшем, ее нужно присвоить какой-либо переменной. Вторая, без присваивания, создает символьную переменную.
В функциях symbols() и var() можно объявлять символьные переменные с индексом:
Пример кода
>>> x=symbols('x:9'); x # диапазон индексов от 0 до 9 (x0, x1, x2, x3, x4, x5, x6, x7, x8) >>> x=symbols('x5:10'); x # диапазон индексов от 5 до 9 (x5, x6, x7, x8, x9) >>> x=var('x:9'); x # диапазон индексов от 0 до 9 (x0, x1, x2, x3, x4, x5, x6, x7, x8) >>> x=var('x5:10'); x # диапазон индексов от 5 до 9 (x5, x6, x7, x8, x9)
Также можно назначить тип и накладывать ограничения на символьные переменные прямо в функциях symbols() и var(). Иногда без таких ограничений очевидные преобразования не работают, например, сравните:
Пример кода
>>> x = symbols('x', integer=True) #назначаем целый тип >>> sqrt(x**2) Abs(x) >>> x = symbols('x', positive = True, integer=True) >>> sqrt(x**2) x >>> x = symbols('x') >>> sqrt(x**2) # это x, если x≥0 sqrt(x**2) >>> x = var('x', integer=True) >>> sqrt(x**2) Abs(x) >>> x = var('x', positive = True, integer=True) >>> sqrt(x**2) x >>> x = var('x') >>> sqrt(x**2) # это x, если x≥0 sqrt(x**2)
Чтобы создать контейнер для одиночного символа, используем аргумент seq=True:
>>> symbols('x',seq=True) (x,)
Определение действительных значений для символьных переменных:
>>> x, y, z = symbols('x,y,z', real=True) >>> x.is_real and y.is_real and z.is_real True
Функция S()
Иногда символьные выражения могут быть проинтерпретированы как числовые константы Python, а не SymPy. Поэтому для объявления символьных переменных, а также для преобразования числовых констант в символьные, применяют функцию S(), например, сравним:
>>> expr = x**2 + sin(y) + S(10)/2; expr x**2 + sin(y) + 5 >>> type(10) >>> type(S(10)) # символьная константа десять
Разница между постоянной Python и символьной состоит в том, что символьная константа может быть вычислена с заданной степенью точности, как показано в следующем примере в сравнении со стандартной функцией round():
z=1/7; z # вычисляет переменную z с процессорной точностью 0.14285714285714285 z1=S(1)/7; z1 1/7 z2=z1.n(30); z2 # вычисляет переменную z2 с точностью до 30 значащих цифр 0.142857142857142857142857142857 z3=round(z1,30); z3 0.14285714285714285
Cимвольные имена
Если в текущей сессии необходимо использовать символьную математику постоянно, то можно импортировать общепринятые символьные имена из модуля sympy.abc:
Пример кода
>>> import sympy.abc >>> dir(sympy.abc) ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_clash', '_clash1', '_clash2', 'a', 'alpha', 'b', 'beta', 'c', 'chi', 'd', 'delta', 'division', 'e', 'epsilon', 'eta', 'exec_', 'f', 'g', 'gamma', 'greeks', 'h', 'i', 'iota', 'j', 'k', 'kappa', 'l', 'lamda', 'm', 'mu', 'n', 'nu', 'o', 'omega', 'omicron', 'p', 'phi', 'pi', 'print_function', 'psi', 'q', 'r', 'rho', 's', 'sigma', 'string', 'symbols', 't', 'tau', 'theta', 'u', 'upsilon', 'v', 'w', 'x', 'xi', 'y', 'z', 'zeta']
Имя переменной из пространства имен можно удалить командой del имя1, имя2. :
>>> type(x) >>> del x,y >>> x NameError: name 'x' is not defined
Для восстановления значений стандартных констант, а также имен некоторых функций, нужно повторно загрузить модуль sympy.
>>> from sympy import *
Метод subs(. )
Следует помнить, что при записи символьного выражения может автоматически выполняться его упрощение, например:
>>> a,b,c,d,x,y,z,u,v,w = symbols('a b c d x y z u v w') >>> x - z + 20 -z- 15 + 3*sin(pi/2)+2*z x + 8
Метод subs(. ) используется для вычисления символьного выражения при заданных значениях переменных, например:
>>> a, x = symbols('a x') >>> f= a**3*x + 3*a**2*x**2/2 + a*x**3 + x**4/4 >>> f.subs(a,1) # в выражение f вместо переменной a была подставлена единица x**4/4 + x**3 + 3*x**2/2 + x
Если в методе subs использовать два аргумента, то они интерпретируются как subs(old,new), т.е. старый идентификатор old заменяется новым new. Аргумент метода subs() может быть последовательностью, которая должна содержать пары (old,new), а может быть символьным выражением, например:
>>> a,b,c,d,x,y,z = symbols('a b c d x y z') >>> f=a*x**3 +b*y**2 + c*z+d >>> f.subs([(a,1),(b,2),(c,3),(d,4)]) # выполнена подстановка a=1, b=2, c=3, d=4 x**3 + 2*y**2 + 3*z + 4 >>> pr= x**3+4*x**2+6*x+10 >>> pr.subs(x,1/x) # выполнена подстановка символьного выражения 10 + 6/x + 4/x**2 + x**(-3)
Обратим ваше внимание на следующую особенность работы с переменными (символьными и обычными переменными Python). Выполним следующий код:
>>> x='Hello' >>> pr=x+'world' >>> pr 'Helloworld' >>> x='AAA' #присвоили символьной переменной x новое значение >>> pr 'Helloworld'
Здесь действует правило: если переменная изменилась, то созданное ранее выражение, содержащее эту переменную, не пересчитывается автоматически. Это правило срабатывает и для обычных переменных Python.
Операции с дробями
Модуль SymPy может проводить вычисления с дробями и приводить их к общему знаменателю, например, сравните:
>>> S(1)/3+S(2)/5 11/15 >>> 1/3+2/5 0.7333333333333334
Функции Rational(числитель, знаменатель) и Integer(. ) используются для создания рациональных дробей без десятичного округления:
>>> z=Rational(1, 7)+Rational(2, 5); z 19/35 >>> Integer(1)/Integer(5) 1/5 >>> 1/5 0.2 >>> z=Integer(1)/Integer(5)+Rational(2, 7); z 17/35
Округления вычислений
В символьных вычислениях работает правило – если ничего не сказано, не делать никаких округлений. Посмотрите, как в первом случае Python преобразует выражение, но оставит в записи ответа квадратный корень и не выполнит никаких округлений, а во втором, так как одно из чисел задано с десятичной точкой, результат будет приближенным:
>>> sqrt(20) 2*sqrt(5) >>> sqrt(20.0) # в выражении используется число с десятичной точкой 4.47213595499958
Для любого символьного объекта существует метод evalf(. )(evaluate float), который возвращает его десятичное представление:
>>> sqrt(20).evalf() # функция sqrt() модуля sympy 4.47213595499958 >>> E.evalf() 2.71828182845905
В методе evalf([n. ]) можно использовать аргумент, задающий точность результата (n = количество значащих цифр)
>>> sqrt(20).evalf(30) 4.47213595499957939281834733746 >>> pi.evalf(20) 3.1415926535897932385
Также всегда нужно помнить, что вещественная арифметика не возвращает точный результат, сравните:
>>> from sympy import * >>> one=S('one') >>> one = cos(1)**2 + sin(1)**2 >>> one.evalf() # равно 1 1.00000000000000 >>> (one-1).evalf() # должно быть равно 0 -0.e-124
Если известно, что результат содержит погрешность вычислений, то с помощью опции chop=True метода evalf() ее можно удалить. Очень маленькое значение вещественной или мнимой части результата в этом случае заменяется нулем. Возьмем предыдущий пример:
>>> (one-1).evalf() # должно быть равно 0 -0.e-124 >>> (one - 1).evalf(chop=True) 0
Бесконечность
После выполнения первой строки from sympy import * становится доступен символ бесконечности – oo (две буквы „o‟), с которым тоже можно выполнять определенные операции:
>>> oo+1 oo >>> 1000000>> 1/oo 0
Символ бесконечности в основном используется функциями limit() и integrate() при задании пределов интегрирования, о чем мы поговорим в одной из следующих статей.
Вывод
Рассмотренные в статье символьные вычисления отличаются от числовых методов тем, что результаты можно и дальше исследовать, например, определять экстремумы функций, решать уравнения со вложенными переменными и так далее.
Надеюсь, моя статья будет полезна всем интересующимся программированием на языке Python, студентам и тем, кто занимается научными исследованиями.
- python
- Символьные вычисления
- Python
- Программирование