Решение уравнения с параметром maple
Для решения уравнений в Maple существует универсальная команда solve(eq,x) , где eq – уравнение, x – переменная, относительно которой уравнение надо разрешить. В результате выполнения этой команды в строке вывода появится выражение, которое является решением данного уравнения. Например:
Если уравнение имеет несколько решений, которые вам понадобятся для дальнейших расчетов, то команде solve следует присвоить какое-нибудь имя name . Обращение к какому-либо k –ому решению данного уравнения производится указанием его имени с номером решения k в квадратных скобках: name[k] . Например:
Решение систем уравнений.
Системы уравнений решаются с помощью такой же команды solve( , ) , только теперь в параметрах команды следует указывать в первых фигурных скобках через запятую уравнения, а во вторых фигурных скобках перечисляются через запятую переменные, относительно которых требуется решить систему. Если вам будет необходимо для дальнейших вычислений использовать полученные решения уравнений, то команде solve следует присвоить какое-нибудь имя name . Затем выполняется присвоения команда assign(name) . После этого над решениями можно будет производить математические операции. Например:
Численное решение уравнений.
Для численного решения уравнений, в тех случаях, когда трансцендентные уравнения не имеют аналитических решений, используется специальная команда fsolve(eq,x) , параметры которой такие же, как и команды solve . Например:
Решение рекуррентных и функциональных уравнений.
Команда rsolve(eq,f) позволяет решить рекуррентное уравнение eq для целой функции f . Можно задать некоторое начальное условие для функции f(n) , тогда получиться частное решение данного рекуррентного уравнения. Например:
Универсальная команда solve позволяет решать функциональные уравнения, например:
F := proc ( x ) RootOf(_ Z ^2 — 3*_ Z + 2* x ) end
В результате получается решение в неявном виде. Однако Maple может работать с такими решениями. Неявное решение функционального уравнения можно попытаться преобразовать в какую-либо элементарную функцию с помощью команды convert . Продолжая приведенный выше пример, можно получить решение в явном виде:
Решение тригонометрических уравнений.
Команда solve , примененная для решения тригонометрического уравнения, выдает только главные решения, то есть решения в интервале [0,2 p ]. Для того, чтобы получить все решения, следует предварительно ввести дополнительную команду _EnvAllSolutions:=true. Например:
В Maple символ _ Z
обозначает константу целого типа, поэтому решение данного уравнения в привычной форме имеет вид , где n – целые числа.
Решение трансцендентных уравнений.
При решении трансцендентных уравнений для получения решения в явном виде перед командой solve следует ввести дополнительную команду _EnvExplicit:=true . Пример решения сложной системы трансцендентных уравнений и упрощения вида решений:
Maple. Решение алгебраических задач. Решения уравнений, систем уравнений и неравенств в Maple
Страницы работы
Решение алгебраических задач
Решение уравнений (часть 1)
Для решения уравнений, систем уравнений и неравенств в Maple используется команда (оператор) «solve». Например, для решения уравнения х2 – 6х + 5 = 0 набираем: > solve(x^2–6*x+5=0); 1, 5 Обратите внимание, что если аргумент solve не является уравнением (или неравенством), то Maple трактует его так, как если бы это выражение было приравнено к 0. Можно было бы написать «> solve(x^2–6*x+5);». При решении алгебраических уравнений Maple приводит все корни, включая комплексные: > solve(x^4=1); 1, –1, I, –I
Решение уравнений (часть 2)
С помощью команды «solve» можно решать не только алгебраические уравнения. Например, решим тригоно-метрическое уравнение tg x – 2 sin x = 0: > solve(tan(x)–2*sin(x)); Обратите внимание, что Maple привёл решения, лежащие в пределах одного промежутка периодичности (от –π до π). Для вывода всех решений необходимо присвоить зарезервированной переменной _EnvAllSolutions значение true: > _EnvAllSolutions := true; > solve(tan(x)–2*sin(x)); где _Z
обозначает любое целое число.
Решение уравнений (часть 3)
Приведём примеры применения функции «solve» для решения уравнений с несколькими переменными. Решим, например, уравнение xy + x – 1 = 0 относительно x: > solve(x*y+x–1,x); относительно y: > solve(x*y+x–1,у); В общем виде Maple решает это уравнение так: > solve(x*y+x–1); Видно, что форма ответа определяется вторым параметром (или его отсутствием) команды «solve», указывающим, относительно какой переменной решать уравнение.
Неравенства решаются тем же оператором «solve». Например, решим неравенство x2(x – 1) solve(x^2*(x–1) solve(x^2*(x–1)>=0); 0, RealRange(1, ∞) В переводе на математический язык ответ: U[1; ∞). Открытый интервал (или луч) задаётся в Maple с помощью функции «Open», применяемой к концам интервала, задаваемого функцией «RealRange».
Решение системы уравнений
Все уравнения системы записываются в фигурных скобках через запятую. Решим например систему > solve( ); , Решим систему с параметром > solve( , );
Решение уравнения с параметром maple
уМЕДХАЭБС: task2, рТЕДЩДХЭБС: Top, чЧЕТИ: Top
1 уЙУФЕНЩ ЛПНРШАФЕТОПК БМЗЕВТЩ
Maple – УРЕГЙБМЙЪЙТПЧБООЩК НБФЕНБФЙЮЕУЛЙК РБЛЕФ, ЛПФПТЩН РПМШЪХАФУС РТПЖЕУУЙПОБМШОЩЕ НБФЕНБФЙЛЙ ЧП ЧУЕН НЙТЕ. рПДПВОЩЕ РБЛЕФЩ ФБЛЦЕ ОБЪЩЧБАФУС УЙУФЕНБНЙ ЛПНРШАФЕТОПК БМЗЕВТЩ. йЪ НОПЦЕУФЧБ РПДПВОЩИ УЙУФЕН (Maple, Matlab, Mathcad, Mathematica, Macsyma, Derive, Axiom, MuPAD) Maple СЧМСЕФУС РТЙЪОБООЩН МЙДЕТПН Ч ПВМБУФЙ УЙНЧПМШОЩИ ЧЩЮЙУМЕОЙК (ФП ЕУФШ Ч РТЕПВТБЪПЧБОЙЙ ЧЩТБЦЕОЙК У ЙУРПМШЪПЧБОЙЕН РЕТЕНЕООЩИ, НОПЗПЮМЕОПЧ, ЖХОЛГЙК Й Ф.Д.). рПНЙНП ЬФПЗП Ч Maple ЧИПДСФ НПДХМЙ, ПВМЕЗЮБАЭЙЕ ТБВПФХ Ч ФБЛЙИ ТБЪДЕМБИ НБФЕНБФЙЛЙ, ЛБЛ ЧЩУЫБС БМЗЕВТБ, МЙОЕКОБС БМЗЕВТБ, БОБМЙФЙЮЕУЛБС ЗЕПНЕФТЙС, ФЕПТЙС ЮЙУЕМ, НБФЕНБФЙЮЕУЛЙК БОБМЙЪ, ДЙЖЖЕТЕОГЙБМШОЩЕ ХТБЧОЕОЙС, ЛПНВЙОБФПТОЩК БОБМЙЪ, ФЕПТЙС ЧЕТПСФОПУФЕК, УФБФЙУФЙЛБ Й НОПЗЙИ ДТХЗЙИ.
дМС РПМХЮЕОЙС УРТБЧЛЙ РП ФПК ЙМЙ ЙОПК ЛПНБОДЕ ОЕПВИПДЙНП Ч ПЛОЕ Maple ЧЧЕУФЙ ?command (ЪБНЕОЙЧ command ОБ ЙНС ЛПНБОДЩ).
Maple ЛБЛ УХРЕТЛБМШЛХМСФПТ
ч ТБВПЮЕН МЙУФЕ (worksheet) УЙУФЕНЩ Maple НПЦОП ЧЧПДЙФШ ЛПНБОДЩ РПУМЕ РТЙЗМБЫЕОЙС » > «. лПНБОДБ ДПМЦОБ ЪБЧЕТЫБФШУС УЙНЧПМПН » ; «, ЕЕ ТЕЪХМШФБФ ОЕНЕДМЕООП ЧЩЧПДЙФУС ОБ ЬЛТБО. еУМЙ ЧНЕУФП » ; » РПУФБЧЙФШ » : «, ФП ЛПНБОДБ ВХДЕФ ЧЩРПМОЕОБ, ОП ТЕЪХМШФБФ ЕЕ ТБВПФЩ ОЕ ВХДЕФ ОБРЕЮБФБО. оБРТЙНЕТ:
лБЛ НЩ ЧЙДЙН, Maple ЧЩДБЕФ ПФЧЕФ Ч ФПЮОПН ЧЙДЕ Ч ЧЙДЕ ТБГЙПОБМШОПЗП ЧЩТБЦЕОЙС. еУМЙ ИПЮЕФУС РТЕДУФБЧЙФШ ЕЗП Ч ЧЙДЕ ДЕУСФЙЮОПК ДТПВЙ (У ОЕЛПФПТПК ФПЮОПУФША) ЧПУРПМШЪХКФЕУШ ЖХОЛГЙЕК evalf . еЕ РЕТЧЩК ПВСЪБФЕМШОЩК РБТБНЕФТ – ЧЩЮЙУМСЕНПЕ ЧЩТБЦЕОЙЕ, ЧФПТПК (ОЕПВСЪБФЕМШОЩК) – ЛПМЙЮЕУФЧП ЪОБЮБЭЙИ ДЕУСФЙЮОЩИ ЪОБЛПЧ (ХЮФЙФЕ, ЮФП РТЙ ЬФПН ЧЩТБЦЕОЙЕ ПЛТХЗМСЕФУС ДМС ЧЩЧПДБ УППФЧЕФУФЧХАЭЕЗП ЛПМЙЮЕУФЧБ ЪОБЛПЧ):
уЙНЧПМ % ПВПЪОБЮБЕФУС РПУМЕДОЕЕ ЧЩЮЙУМЕООПЕ Maple ЧЩТБЦЕОЙЕ, %% – РТЕДРПУМЕДОЕЕ, %%% — РТЕДРТЕДРПУМЕДОЕЕ (Б ЧПФ ПВПЪОБЮЕОЙС %%%% ХЦЕ ОЕ УХЭЕУФЧХЕФ).
юЙУМБ Й ЛПОУФБОФЩ
еУМЙ Ч ЧЩТБЦЕОЙЙ ЧУФТЕЮБЕФУС ЮЙУМП, ЪБРЙУБООПЕ У РМБЧБАЭЕК ФПЮЛПК (ОБРТЙНЕТ, 3.14 ЙМЙ 5.6e-17 ), ФП ЧУЕ ЧЩЮЙУМЕОЙС ЧЩРПМОСАФУС РТЙВМЙЦЕООП, Ч РТПФЙЧОПН УМХЮБЕ ЧЩЮЙУМЕОЙС РТПЧПДСФУС ФПЮОП. ч Maple ЕУФШ УМЕДХАЭЙЕ ЛПОУФБОФЩ: Pi юЙУМП РЙ
I нОЙНБС ЕДЙОЙГБ i
exp(1) пУОПЧБОЙЕ ОБФХТБМШОЩИ МПЗБТЙЖНПЧ e
infinity вЕУЛПОЕЮОПУФШ
true мПЗЙЮЕУЛБС ЙУФЙОБ
false мПЗЙЮЕУЛБС МПЦШ
чЩЮЙУМЕОЙС У ХЮБУФЙЕН ЛПОУФБОФ ЧЩРПМОСАФУС ФПЮОП (ЕУМЙ ФПМШЛП ЙИ ЪОБЮЕОЙЕ ОЕ ВХДЕФ РЕТЕЧЕДЕОП Л ДЕКУФЧЙФЕМШОПНХ ЪОБЮЕОЙА), ОБРТЙНЕТ
пРЕТБФПТЩ
ч Maple УХЭЕУФЧХАФ УМЕДХАЭЙЕ ПРЕТБФПТЩ:
бТЙЖНЕФЙЮЕУЛЙЕ: + , — , * , / , ^ (ЧПЪЧЕДЕОЙЕ Ч УФЕРЕОШ), ! (ЖБЛФПТЙБМ).
мПЗЙЮЕУЛЙЕ: , > , >= , , = (ТБЧОП), <> (ОЕ ТБЧОП).
рЕТЕНЕООЩЕ
рЕТЕНЕООПК СЧМСЕФУС МАВПК ЙДЕОФЙЖЙЛБФПТ (УПУФПСЭЙК ЙЪ МБФЙОУЛЙИ ВХЛЧ Й ГЙЖТ, ОБЮЙОБАЭЙКУС У ГЙЖТЩ). рЕТЕНЕООПК НПЦЕФ ВЩФШ РТЙУЧПЕОП МАВПЕ ЪОБЮЕОЙЕ РТЙ РПНПЭЙ ПРЕТБФПТБ РТЙУЧБЙЧБОЙС := . рЕТЕНЕООБС, ЛПФПТПК ОЕ РТЙУЧПЕОП ОЙЛБЛПЕ ЪОБЮЕОЙЕ УЮЙФБЕФУС УЧПВПДОПК РЕТЕНЕООПК Й ЕЕ ЙНС УПИТБОСЕФУС Ч БТЙЖНЕФЙЮЕУЛЙИ ЧЩЮЙУМЕОЙСИ. оБРТЙНЕТ:
уФБОДБТФОЩЕ ЖХОЛГЙЙ
ъОБЛ x (ЧПЪЧТБЭБЕФ 1, -1 ЙМЙ 0) – sign(x)
фТЙЗПОПНЕФТЙЮЕУЛЙЕ ЖХОЛГЙЙ: sin(x) , cos(x) , tan(x) , cot(x)
пВТБФОЩЕ ФТЙЗПОПНЕФТЙЮЕУЛЙЕ: arcsin(x) , arccos(x) , arctan(x) , arccot(x)
оБФХТБМШОЩК, ДЕУСФЙЮОЩК МПЗБТЙЖН Й МПЗБТЙЖН РП ДБООПНХ ПУОПЧБОЙА: ln(x) , log10(x) , log[a](x)
рТЕПВТБЪПЧБОЙЕ НБФЕНБФЙЮЕУЛЙИ ЧЩТБЦЕОЙК
ч ЧЩТБЦЕОЙЕ НПЗХФ ЧИПДЙФШ ЛПОУФБОФЩ, УЧПВПДОЩЕ РЕТЕНЕООЩЕ, НБФЕНБФЙЮЕУЛЙЕ ЖХОЛГЙЙ. рТЙНЕТ ЧЩТБЦЕОЙС:
дПЧПМШОП ЮБУФП Ч ЛБЮЕУФЧЕ ЧЩТБЦЕОЙК ЧЩУФХРБАФ НОПЗПЮМЕОЩ ПФ ПДОПК ЙМЙ ОЕУЛПМШЛЙИ РЕТЕНЕООЩИ ЙМЙ ТБГЙПОБМШОЩЕ ЧЩТБЦЕОЙС. Maple УПДЕТЦЙФ ТБЪМЙЮОЩЕ ЖХОЛГЙЙ ДМС РТЕПВТБЪПЧБОЙС ФБЛЙИ ЧЩТБЦЕОЙК.
жХОЛГЙС factor(eq) ТБЪМБЗБЕФ ЧЩТБЦЕОЙЕ eq ОБ НОПЦЙФЕМЙ.
жХОЛГЙС expand(eq) ТБУЛТЩЧБЕФ УЛПВЛЙ Ч ЧЩТБЦЕОЙЙ. еУМЙ ХЛБЪБФШ ПДЙО ЙМЙ ОЕУЛПМШЛП ДПРПМОЙФЕМШОЩИ РБТБНЕФТПЧ Ч ЧЙДЕ expand(eq,a,b,c) , ФП ЧЩТБЦЕОЙС a , b , c ТБУЛТЩЧБФШУС ОЕ ВХДХФ. ьФП РПМЕЪОП, ЕУМЙ ОЕПВИПДЙНП ЛБЦДПЕ УМБЗБЕНПЕ ХНОПЦЙФШ ОБ ЛБЛПЕ-ФП ЧЩТБЦЕОЙЕ.
дМС РТЙЧЕДЕОЙС ДТПВЕК Л ПВЭЕНХ ЪОБНЕОБФЕМА У РПУМЕДХАЭЙН УПЛТБЭЕОЙЕН ЙУРПМШЪХЕФУС ЖХОЛГЙС normal(eq) .
жХОЛГЙС simplify(eq) ХРТПЭБЕФ ЧЩТБЦЕОЙЕ eq . ч ЛБЮЕУФЧЕ ЧФПТПЗП (ОЕПВСЪБФЕМШОПЗП) РБТБНЕФТБ, ЕК НПЦОП ХЛБЪБФШ, ЛБЛЙЕ ЧЩТБЦЕОЙС РТЕПВТБЪПЧЩЧБФШ: trig – ФТЙЗПОПНЕФТЙЮЕУЛЙЕ, power – УФЕРЕООЩЕ, radical – ТБДЙЛБМЩ, exp – ЬЛУРПОЕОФЩ, ln – МПЗБТЙЖНЩ.
тЕЫЕОЙЕ ХТБЧОЕОЙК
пВЩЛОПЧЕООЩЕ ХТБЧОЕОЙС
дМС ТЕЫЕОЙС ХТБЧОЕОЙК ЙУРПМШЪХЕФУС ЖХОЛГЙС solve(eq,x) , ЗДЕ eq – ТЕЫБЕНПЕ ХТБЧОЕОЙЕ, x – ЙНС РЕТЕНЕООПК, ПФОПУЙФЕМШОП ЛПФПТПК ТБЪТЕЫБЕФУС ХТБЧОЕОЙЕ. рТЙНЕТ:
еУМЙ ХТБЧОЕОЙЕ ЙНЕЕФ ОЕУЛПМШЛП ТЕЫЕОЙК, ФП ТЕЫЕОЙЕ ХТБЧОЕОЙС НПЦОП РТЙУЧПЙФШ ОЕЛПФПТПК РЕТЕНЕООПК, ОБРТЙНЕТ p . дБМЕЕ НПЦОП ЙУРПМШЪПЧБФШ k -Е ТЕЫЕОЙЕ ХТБЧОЕОЙС Ч ЧЙДЕ p[k] :
уЙУФЕНЩ ХТБЧОЕОЙК
уЙУФЕНЩ ХТБЧОЕОЙК ТЕЫБАФУС У РПНПЭША ФБЛПК ЦЕ ЖХОЛГЙЙ solve( , ) , ФПМШЛП ФЕРЕТШ Ч РБТБНЕФТБИ ЖХОЛГЙЙ УМЕДХЕФ ХЛБЪЩЧБФШ Ч РЕТЧЩИ ЖЙЗХТОЩИ УЛПВЛБИ ЮЕТЕЪ ЪБРСФХА ХТБЧОЕОЙС, Б ЧП ЧФПТЩИ ЖЙЗХТОЩИ УЛПВЛБИ РЕТЕЮЙУМСАФУС ЮЕТЕЪ ЪБРСФХА РЕТЕНЕООЩЕ, ПФОПУЙФЕМШОП ЛПФПТЩИ ФТЕВХЕФУС ТЕЫЙФШ УЙУФЕНХ. еУМЙ ОЕПВИПДЙНП ЙУРПМШЪПЧБФШ РПМХЮЕООЩЕ ТЕЫЕОЙС ХТБЧОЕОЙК ДМС ДБМШОЕКЫЙИ ЧЩЮЙУМЕОЙК, ФП ОЕПВИПДЙНП ТЕЪХМШФБФ, ЧПЪЧТБЭБЕНЩК ЖХОЛГЙЕК solve РТЙУЧПЙФШ ЛБЛПК-ОЙВХДШ РЕТЕНЕООПК, ОБРТЙНЕТ, p , Б ЪБФЕН ЧЩРПМОЙФШ ЛПНБОДХ assign(p) . рТЙНЕТ:
юЙУМЕООПЕ ТЕЫЕОЙЕ ХТБЧОЕОЙК
рПРТПВХЕН ТЕЫЙФШ ХТБЧОЕОЙЕ: x 6 -2x+1=0. йУРПМШЪПЧБОЙЕ ЖХОЛГЙЙ solve ДБУФ ОБН ПДЙО ЛПТЕОШ -1 Й ЕЭЕ ОБВПТ ЧЩТБЦЕОЙК ЧЙДБ RootOf(_Z^5+_Z^4+_Z^3+_Z^2+_Z-1,index = 1) . дЕМП Ч ФПН, ЮФП РТПЙЪЧПМШОПЕ ХТБЧОЕОЙЕ УФЕРЕОЙ ЧЩЫЕ 4 У ТБГЙПОБМШОЩНЙ ЛПЬЖЖЙГЙЕОФБНЙ НПЦЕФ ОЕ ЙНЕФШ ЛПТОЕК, ЧЩТБЪЙНЩИ Ч ЧЙДЕ ТБДЙЛБМПЧ ОБД ТБГЙПОБМШОЩНЙ ЮЙУМБНЙ. тЕЫЕОЙС ЧУЕЧПЪНПЦОЩИ ФБЛЙИ ХТБЧОЕОЙК ОБЪЩЧБАФУС БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ. дБООПЕ ХТБЧОЕОЙЕ ФБЛЦЕ ОЕТБЪТЕЫЙНП Ч ТБДЙЛБМБИ, Й Maple ОБЫМБ ОБН ЕДЙОУФЧЕООЩК ЛПТЕОШ, ЧЩТБЪЙНЩК Ч ТБДЙЛБМБИ (1) Й УППВЭЙМБ, ЮФП ПУФБЧЫЙЕУС ЛПТОЙ СЧМСАФУС БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ: ЛПТОСНЙ НОПЗПЮМЕОБ z 5 +z 4 +z 3 +z 2 +z-1=0 (ЙНЕООП ЬФПФ НОПЗПЮМЕО ХЛБЪБО Ч БТЗХНЕОФЕ ЖХОЛГЙЙ RootOf ). Maple ХНЕЕФ ТБВПФБФШ У БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ, ОП НПЦОП ФБЛЦЕ ОБКФЙ РТЙВМЙЦЕООПЕ ЮЙУМЕООПЕ ТЕЫЕОЙЕ РТЙ РПНПЭЙ ЖХОЛГЙЙ fsolve :
йОПЗДБ Maple РТЙ ТЕЫЕОЙЙ ФТБОУГЕОДЕОФОЩИ ХТБЧОЕОЙК ОЕ ЧЩЧПДЙФ УМПЦОЩЕ ЧЩТБЦЕОЙС Ч ЧЙДЕ ТБДЙЛБМПЧ, Б ПУФБЧМСЕФ ЙИ Ч ЖПТНЕ RootOf. юФПВЩ ЪБУФБЧЙФШ Maple ЧЩЧПДЙФШ ЧУЕ ТЕЫЕОЙС Ч ЧЙДЕ ТБДЙЛБМПЧ (ЕУФЕУФЧЕООП, ЕУМЙ ПОЙ РТЕДУФБЧЙНЩ Ч ФБЛПК ЖПТНЕ), ОЕПВИПДЙНП РТЙУЧПЙФШ ЪОБЮЕОЙЕ true УЙУФЕНОПК РЕТЕНЕООПК _EnvExplicit ( _EnvExplicit:=true ).
тЕЫЕОЙЕ ФТЙЗПОПНЕФТЙЮЕУЛЙИ ХТБЧОЕОЙК
лПНБОДБ solve , РТЙНЕОСЕНБС ДМС ТЕЫЕОЙС ФТЙЗПОПНЕФТЙЮЕУЛЙИ ХТБЧОЕОЙК, ОБИПДЙФ ФПМШЛП ЗМБЧОЩЕ ТЕЫЕОЙС, ФП ЕУФШ ЧЩЧПДЙФ ФПМШЛП ПДОП ТЕЫЕОЙЕ ЙЪ УЕТЙЙ РЕТЙПДЙЮЕУЛЙИ ТЕЫЕОЙК:
дМС ФПЗП, ЮФПВЩ Maple ОБИПДЙМБ ЧУЕ ТЕЫЕОЙС, ОЕПВИПДЙНП РТЕДЧБТЙФЕМШОП РТЙУЧПЙФШ ЪОБЮЕОЙЕ true УЙУФЕНОПК РЕТЕНЕООПК _EnvAllSolutions . фПЗДБ НЩ РПМХЮЙН ТЕЪХМШФБФ Ч ДТХЗПН ЧЙДЕ, Ч ЛПФПТПН ВХДХФ ЖЙЗХТЙТПЧБФШ РЕТЕНЕООЩЕ Z1
. ьФЙ РЕТЕНЕООЩЕ ПВПЪОБЮБАФ РТПЙЪЧПМШОХА ЛПОУФБОФХ ГЕМПЗП ФЙРБ, Ч ВПМЕЕ РТЙЧЩЮОПН ЧЙДЕ ТЕЫЕОЙС НПЦОП ВХДЕФ ЪБРЙУБФШ, ЛБЛ π/4+πn , πk .
Как решать уравнения в программе maple
Для решения уравнений в Maple существует универсальная команда solve(eq,x) , где eq – уравнение, x – переменная, относительно которой уравнение надо разрешить. В результате выполнения этой команды в строке вывода появится выражение, которое является решением данного уравнения. Например:
Если уравнение имеет несколько решений, которые вам понадобятся для дальнейших расчетов, то команде solve следует присвоить какое-нибудь имя name . Обращение к какому-либо k –ому решению данного уравнения производится указанием его имени с номером решения k в квадратных скобках: name[k] . Например:
Решение систем уравнений.
Системы уравнений решаются с помощью такой же команды solve( , ) , только теперь в параметрах команды следует указывать в первых фигурных скобках через запятую уравнения, а во вторых фигурных скобках перечисляются через запятую переменные, относительно которых требуется решить систему. Если вам будет необходимо для дальнейших вычислений использовать полученные решения уравнений, то команде solve следует присвоить какое-нибудь имя name . Затем выполняется присвоения команда assign(name) . После этого над решениями можно будет производить математические операции. Например:
Численное решение уравнений.
Для численного решения уравнений, в тех случаях, когда трансцендентные уравнения не имеют аналитических решений, используется специальная команда fsolve(eq,x) , параметры которой такие же, как и команды solve . Например:
Решение рекуррентных и функциональных уравнений.
Команда rsolve(eq,f) позволяет решить рекуррентное уравнение eq для целой функции f . Можно задать некоторое начальное условие для функции f(n) , тогда получиться частное решение данного рекуррентного уравнения. Например:
Универсальная команда solve позволяет решать функциональные уравнения, например:
F := proc ( x ) RootOf(_ Z ^2 — 3*_ Z + 2* x ) end
В результате получается решение в неявном виде. Однако Maple может работать с такими решениями. Неявное решение функционального уравнения можно попытаться преобразовать в какую-либо элементарную функцию с помощью команды convert . Продолжая приведенный выше пример, можно получить решение в явном виде:
Решение тригонометрических уравнений.
Команда solve , примененная для решения тригонометрического уравнения, выдает только главные решения, то есть решения в интервале [0,2 p ]. Для того, чтобы получить все решения, следует предварительно ввести дополнительную команду _EnvAllSolutions:=true. Например:
В Maple символ _ Z
обозначает константу целого типа, поэтому решение данного уравнения в привычной форме имеет вид , где n – целые числа.
Решение трансцендентных уравнений.
При решении трансцендентных уравнений для получения решения в явном виде перед командой solve следует ввести дополнительную команду _EnvExplicit:=true . Пример решения сложной системы трансцендентных уравнений и упрощения вида решений:
Как решать уравнения в программе maple
уМЕДХАЭБС: task2, рТЕДЩДХЭБС: Top, чЧЕТИ: Top
1 уЙУФЕНЩ ЛПНРШАФЕТОПК БМЗЕВТЩ
Maple – УРЕГЙБМЙЪЙТПЧБООЩК НБФЕНБФЙЮЕУЛЙК РБЛЕФ, ЛПФПТЩН РПМШЪХАФУС РТПЖЕУУЙПОБМШОЩЕ НБФЕНБФЙЛЙ ЧП ЧУЕН НЙТЕ. рПДПВОЩЕ РБЛЕФЩ ФБЛЦЕ ОБЪЩЧБАФУС УЙУФЕНБНЙ ЛПНРШАФЕТОПК БМЗЕВТЩ. йЪ НОПЦЕУФЧБ РПДПВОЩИ УЙУФЕН (Maple, Matlab, Mathcad, Mathematica, Macsyma, Derive, Axiom, MuPAD) Maple СЧМСЕФУС РТЙЪОБООЩН МЙДЕТПН Ч ПВМБУФЙ УЙНЧПМШОЩИ ЧЩЮЙУМЕОЙК (ФП ЕУФШ Ч РТЕПВТБЪПЧБОЙЙ ЧЩТБЦЕОЙК У ЙУРПМШЪПЧБОЙЕН РЕТЕНЕООЩИ, НОПЗПЮМЕОПЧ, ЖХОЛГЙК Й Ф.Д.). рПНЙНП ЬФПЗП Ч Maple ЧИПДСФ НПДХМЙ, ПВМЕЗЮБАЭЙЕ ТБВПФХ Ч ФБЛЙИ ТБЪДЕМБИ НБФЕНБФЙЛЙ, ЛБЛ ЧЩУЫБС БМЗЕВТБ, МЙОЕКОБС БМЗЕВТБ, БОБМЙФЙЮЕУЛБС ЗЕПНЕФТЙС, ФЕПТЙС ЮЙУЕМ, НБФЕНБФЙЮЕУЛЙК БОБМЙЪ, ДЙЖЖЕТЕОГЙБМШОЩЕ ХТБЧОЕОЙС, ЛПНВЙОБФПТОЩК БОБМЙЪ, ФЕПТЙС ЧЕТПСФОПУФЕК, УФБФЙУФЙЛБ Й НОПЗЙИ ДТХЗЙИ.
дМС РПМХЮЕОЙС УРТБЧЛЙ РП ФПК ЙМЙ ЙОПК ЛПНБОДЕ ОЕПВИПДЙНП Ч ПЛОЕ Maple ЧЧЕУФЙ ?command (ЪБНЕОЙЧ command ОБ ЙНС ЛПНБОДЩ).
Maple ЛБЛ УХРЕТЛБМШЛХМСФПТ
ч ТБВПЮЕН МЙУФЕ (worksheet) УЙУФЕНЩ Maple НПЦОП ЧЧПДЙФШ ЛПНБОДЩ РПУМЕ РТЙЗМБЫЕОЙС » > «. лПНБОДБ ДПМЦОБ ЪБЧЕТЫБФШУС УЙНЧПМПН » ; «, ЕЕ ТЕЪХМШФБФ ОЕНЕДМЕООП ЧЩЧПДЙФУС ОБ ЬЛТБО. еУМЙ ЧНЕУФП » ; » РПУФБЧЙФШ » : «, ФП ЛПНБОДБ ВХДЕФ ЧЩРПМОЕОБ, ОП ТЕЪХМШФБФ ЕЕ ТБВПФЩ ОЕ ВХДЕФ ОБРЕЮБФБО. оБРТЙНЕТ:
лБЛ НЩ ЧЙДЙН, Maple ЧЩДБЕФ ПФЧЕФ Ч ФПЮОПН ЧЙДЕ Ч ЧЙДЕ ТБГЙПОБМШОПЗП ЧЩТБЦЕОЙС. еУМЙ ИПЮЕФУС РТЕДУФБЧЙФШ ЕЗП Ч ЧЙДЕ ДЕУСФЙЮОПК ДТПВЙ (У ОЕЛПФПТПК ФПЮОПУФША) ЧПУРПМШЪХКФЕУШ ЖХОЛГЙЕК evalf . еЕ РЕТЧЩК ПВСЪБФЕМШОЩК РБТБНЕФТ – ЧЩЮЙУМСЕНПЕ ЧЩТБЦЕОЙЕ, ЧФПТПК (ОЕПВСЪБФЕМШОЩК) – ЛПМЙЮЕУФЧП ЪОБЮБЭЙИ ДЕУСФЙЮОЩИ ЪОБЛПЧ (ХЮФЙФЕ, ЮФП РТЙ ЬФПН ЧЩТБЦЕОЙЕ ПЛТХЗМСЕФУС ДМС ЧЩЧПДБ УППФЧЕФУФЧХАЭЕЗП ЛПМЙЮЕУФЧБ ЪОБЛПЧ):
уЙНЧПМ % ПВПЪОБЮБЕФУС РПУМЕДОЕЕ ЧЩЮЙУМЕООПЕ Maple ЧЩТБЦЕОЙЕ, %% – РТЕДРПУМЕДОЕЕ, %%% — РТЕДРТЕДРПУМЕДОЕЕ (Б ЧПФ ПВПЪОБЮЕОЙС %%%% ХЦЕ ОЕ УХЭЕУФЧХЕФ).
юЙУМБ Й ЛПОУФБОФЩ
еУМЙ Ч ЧЩТБЦЕОЙЙ ЧУФТЕЮБЕФУС ЮЙУМП, ЪБРЙУБООПЕ У РМБЧБАЭЕК ФПЮЛПК (ОБРТЙНЕТ, 3.14 ЙМЙ 5.6e-17 ), ФП ЧУЕ ЧЩЮЙУМЕОЙС ЧЩРПМОСАФУС РТЙВМЙЦЕООП, Ч РТПФЙЧОПН УМХЮБЕ ЧЩЮЙУМЕОЙС РТПЧПДСФУС ФПЮОП. ч Maple ЕУФШ УМЕДХАЭЙЕ ЛПОУФБОФЩ: Pi юЙУМП РЙ
I нОЙНБС ЕДЙОЙГБ i
exp(1) пУОПЧБОЙЕ ОБФХТБМШОЩИ МПЗБТЙЖНПЧ e
infinity вЕУЛПОЕЮОПУФШ
true мПЗЙЮЕУЛБС ЙУФЙОБ
false мПЗЙЮЕУЛБС МПЦШ
чЩЮЙУМЕОЙС У ХЮБУФЙЕН ЛПОУФБОФ ЧЩРПМОСАФУС ФПЮОП (ЕУМЙ ФПМШЛП ЙИ ЪОБЮЕОЙЕ ОЕ ВХДЕФ РЕТЕЧЕДЕОП Л ДЕКУФЧЙФЕМШОПНХ ЪОБЮЕОЙА), ОБРТЙНЕТ
пРЕТБФПТЩ
ч Maple УХЭЕУФЧХАФ УМЕДХАЭЙЕ ПРЕТБФПТЩ:
бТЙЖНЕФЙЮЕУЛЙЕ: + , — , * , / , ^ (ЧПЪЧЕДЕОЙЕ Ч УФЕРЕОШ), ! (ЖБЛФПТЙБМ).
мПЗЙЮЕУЛЙЕ: , > , >= , , = (ТБЧОП), <> (ОЕ ТБЧОП).
рЕТЕНЕООЩЕ
рЕТЕНЕООПК СЧМСЕФУС МАВПК ЙДЕОФЙЖЙЛБФПТ (УПУФПСЭЙК ЙЪ МБФЙОУЛЙИ ВХЛЧ Й ГЙЖТ, ОБЮЙОБАЭЙКУС У ГЙЖТЩ). рЕТЕНЕООПК НПЦЕФ ВЩФШ РТЙУЧПЕОП МАВПЕ ЪОБЮЕОЙЕ РТЙ РПНПЭЙ ПРЕТБФПТБ РТЙУЧБЙЧБОЙС := . рЕТЕНЕООБС, ЛПФПТПК ОЕ РТЙУЧПЕОП ОЙЛБЛПЕ ЪОБЮЕОЙЕ УЮЙФБЕФУС УЧПВПДОПК РЕТЕНЕООПК Й ЕЕ ЙНС УПИТБОСЕФУС Ч БТЙЖНЕФЙЮЕУЛЙИ ЧЩЮЙУМЕОЙСИ. оБРТЙНЕТ:
уФБОДБТФОЩЕ ЖХОЛГЙЙ
ъОБЛ x (ЧПЪЧТБЭБЕФ 1, -1 ЙМЙ 0) – sign(x)
фТЙЗПОПНЕФТЙЮЕУЛЙЕ ЖХОЛГЙЙ: sin(x) , cos(x) , tan(x) , cot(x)
пВТБФОЩЕ ФТЙЗПОПНЕФТЙЮЕУЛЙЕ: arcsin(x) , arccos(x) , arctan(x) , arccot(x)
оБФХТБМШОЩК, ДЕУСФЙЮОЩК МПЗБТЙЖН Й МПЗБТЙЖН РП ДБООПНХ ПУОПЧБОЙА: ln(x) , log10(x) , log[a](x)
рТЕПВТБЪПЧБОЙЕ НБФЕНБФЙЮЕУЛЙИ ЧЩТБЦЕОЙК
ч ЧЩТБЦЕОЙЕ НПЗХФ ЧИПДЙФШ ЛПОУФБОФЩ, УЧПВПДОЩЕ РЕТЕНЕООЩЕ, НБФЕНБФЙЮЕУЛЙЕ ЖХОЛГЙЙ. рТЙНЕТ ЧЩТБЦЕОЙС:
дПЧПМШОП ЮБУФП Ч ЛБЮЕУФЧЕ ЧЩТБЦЕОЙК ЧЩУФХРБАФ НОПЗПЮМЕОЩ ПФ ПДОПК ЙМЙ ОЕУЛПМШЛЙИ РЕТЕНЕООЩИ ЙМЙ ТБГЙПОБМШОЩЕ ЧЩТБЦЕОЙС. Maple УПДЕТЦЙФ ТБЪМЙЮОЩЕ ЖХОЛГЙЙ ДМС РТЕПВТБЪПЧБОЙС ФБЛЙИ ЧЩТБЦЕОЙК.
жХОЛГЙС factor(eq) ТБЪМБЗБЕФ ЧЩТБЦЕОЙЕ eq ОБ НОПЦЙФЕМЙ.
жХОЛГЙС expand(eq) ТБУЛТЩЧБЕФ УЛПВЛЙ Ч ЧЩТБЦЕОЙЙ. еУМЙ ХЛБЪБФШ ПДЙО ЙМЙ ОЕУЛПМШЛП ДПРПМОЙФЕМШОЩИ РБТБНЕФТПЧ Ч ЧЙДЕ expand(eq,a,b,c) , ФП ЧЩТБЦЕОЙС a , b , c ТБУЛТЩЧБФШУС ОЕ ВХДХФ. ьФП РПМЕЪОП, ЕУМЙ ОЕПВИПДЙНП ЛБЦДПЕ УМБЗБЕНПЕ ХНОПЦЙФШ ОБ ЛБЛПЕ-ФП ЧЩТБЦЕОЙЕ.
дМС РТЙЧЕДЕОЙС ДТПВЕК Л ПВЭЕНХ ЪОБНЕОБФЕМА У РПУМЕДХАЭЙН УПЛТБЭЕОЙЕН ЙУРПМШЪХЕФУС ЖХОЛГЙС normal(eq) .
жХОЛГЙС simplify(eq) ХРТПЭБЕФ ЧЩТБЦЕОЙЕ eq . ч ЛБЮЕУФЧЕ ЧФПТПЗП (ОЕПВСЪБФЕМШОПЗП) РБТБНЕФТБ, ЕК НПЦОП ХЛБЪБФШ, ЛБЛЙЕ ЧЩТБЦЕОЙС РТЕПВТБЪПЧЩЧБФШ: trig – ФТЙЗПОПНЕФТЙЮЕУЛЙЕ, power – УФЕРЕООЩЕ, radical – ТБДЙЛБМЩ, exp – ЬЛУРПОЕОФЩ, ln – МПЗБТЙЖНЩ.
тЕЫЕОЙЕ ХТБЧОЕОЙК
пВЩЛОПЧЕООЩЕ ХТБЧОЕОЙС
дМС ТЕЫЕОЙС ХТБЧОЕОЙК ЙУРПМШЪХЕФУС ЖХОЛГЙС solve(eq,x) , ЗДЕ eq – ТЕЫБЕНПЕ ХТБЧОЕОЙЕ, x – ЙНС РЕТЕНЕООПК, ПФОПУЙФЕМШОП ЛПФПТПК ТБЪТЕЫБЕФУС ХТБЧОЕОЙЕ. рТЙНЕТ:
еУМЙ ХТБЧОЕОЙЕ ЙНЕЕФ ОЕУЛПМШЛП ТЕЫЕОЙК, ФП ТЕЫЕОЙЕ ХТБЧОЕОЙС НПЦОП РТЙУЧПЙФШ ОЕЛПФПТПК РЕТЕНЕООПК, ОБРТЙНЕТ p . дБМЕЕ НПЦОП ЙУРПМШЪПЧБФШ k -Е ТЕЫЕОЙЕ ХТБЧОЕОЙС Ч ЧЙДЕ p[k] :
уЙУФЕНЩ ХТБЧОЕОЙК
уЙУФЕНЩ ХТБЧОЕОЙК ТЕЫБАФУС У РПНПЭША ФБЛПК ЦЕ ЖХОЛГЙЙ solve( , ) , ФПМШЛП ФЕРЕТШ Ч РБТБНЕФТБИ ЖХОЛГЙЙ УМЕДХЕФ ХЛБЪЩЧБФШ Ч РЕТЧЩИ ЖЙЗХТОЩИ УЛПВЛБИ ЮЕТЕЪ ЪБРСФХА ХТБЧОЕОЙС, Б ЧП ЧФПТЩИ ЖЙЗХТОЩИ УЛПВЛБИ РЕТЕЮЙУМСАФУС ЮЕТЕЪ ЪБРСФХА РЕТЕНЕООЩЕ, ПФОПУЙФЕМШОП ЛПФПТЩИ ФТЕВХЕФУС ТЕЫЙФШ УЙУФЕНХ. еУМЙ ОЕПВИПДЙНП ЙУРПМШЪПЧБФШ РПМХЮЕООЩЕ ТЕЫЕОЙС ХТБЧОЕОЙК ДМС ДБМШОЕКЫЙИ ЧЩЮЙУМЕОЙК, ФП ОЕПВИПДЙНП ТЕЪХМШФБФ, ЧПЪЧТБЭБЕНЩК ЖХОЛГЙЕК solve РТЙУЧПЙФШ ЛБЛПК-ОЙВХДШ РЕТЕНЕООПК, ОБРТЙНЕТ, p , Б ЪБФЕН ЧЩРПМОЙФШ ЛПНБОДХ assign(p) . рТЙНЕТ:
юЙУМЕООПЕ ТЕЫЕОЙЕ ХТБЧОЕОЙК
рПРТПВХЕН ТЕЫЙФШ ХТБЧОЕОЙЕ: x 6 -2x+1=0. йУРПМШЪПЧБОЙЕ ЖХОЛГЙЙ solve ДБУФ ОБН ПДЙО ЛПТЕОШ -1 Й ЕЭЕ ОБВПТ ЧЩТБЦЕОЙК ЧЙДБ RootOf(_Z^5+_Z^4+_Z^3+_Z^2+_Z-1,index = 1) . дЕМП Ч ФПН, ЮФП РТПЙЪЧПМШОПЕ ХТБЧОЕОЙЕ УФЕРЕОЙ ЧЩЫЕ 4 У ТБГЙПОБМШОЩНЙ ЛПЬЖЖЙГЙЕОФБНЙ НПЦЕФ ОЕ ЙНЕФШ ЛПТОЕК, ЧЩТБЪЙНЩИ Ч ЧЙДЕ ТБДЙЛБМПЧ ОБД ТБГЙПОБМШОЩНЙ ЮЙУМБНЙ. тЕЫЕОЙС ЧУЕЧПЪНПЦОЩИ ФБЛЙИ ХТБЧОЕОЙК ОБЪЩЧБАФУС БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ. дБООПЕ ХТБЧОЕОЙЕ ФБЛЦЕ ОЕТБЪТЕЫЙНП Ч ТБДЙЛБМБИ, Й Maple ОБЫМБ ОБН ЕДЙОУФЧЕООЩК ЛПТЕОШ, ЧЩТБЪЙНЩК Ч ТБДЙЛБМБИ (1) Й УППВЭЙМБ, ЮФП ПУФБЧЫЙЕУС ЛПТОЙ СЧМСАФУС БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ: ЛПТОСНЙ НОПЗПЮМЕОБ z 5 +z 4 +z 3 +z 2 +z-1=0 (ЙНЕООП ЬФПФ НОПЗПЮМЕО ХЛБЪБО Ч БТЗХНЕОФЕ ЖХОЛГЙЙ RootOf ). Maple ХНЕЕФ ТБВПФБФШ У БМЗЕВТБЙЮЕУЛЙНЙ ЮЙУМБНЙ, ОП НПЦОП ФБЛЦЕ ОБКФЙ РТЙВМЙЦЕООПЕ ЮЙУМЕООПЕ ТЕЫЕОЙЕ РТЙ РПНПЭЙ ЖХОЛГЙЙ fsolve :
йОПЗДБ Maple РТЙ ТЕЫЕОЙЙ ФТБОУГЕОДЕОФОЩИ ХТБЧОЕОЙК ОЕ ЧЩЧПДЙФ УМПЦОЩЕ ЧЩТБЦЕОЙС Ч ЧЙДЕ ТБДЙЛБМПЧ, Б ПУФБЧМСЕФ ЙИ Ч ЖПТНЕ RootOf. юФПВЩ ЪБУФБЧЙФШ Maple ЧЩЧПДЙФШ ЧУЕ ТЕЫЕОЙС Ч ЧЙДЕ ТБДЙЛБМПЧ (ЕУФЕУФЧЕООП, ЕУМЙ ПОЙ РТЕДУФБЧЙНЩ Ч ФБЛПК ЖПТНЕ), ОЕПВИПДЙНП РТЙУЧПЙФШ ЪОБЮЕОЙЕ true УЙУФЕНОПК РЕТЕНЕООПК _EnvExplicit ( _EnvExplicit:=true ).
тЕЫЕОЙЕ ФТЙЗПОПНЕФТЙЮЕУЛЙИ ХТБЧОЕОЙК
лПНБОДБ solve , РТЙНЕОСЕНБС ДМС ТЕЫЕОЙС ФТЙЗПОПНЕФТЙЮЕУЛЙИ ХТБЧОЕОЙК, ОБИПДЙФ ФПМШЛП ЗМБЧОЩЕ ТЕЫЕОЙС, ФП ЕУФШ ЧЩЧПДЙФ ФПМШЛП ПДОП ТЕЫЕОЙЕ ЙЪ УЕТЙЙ РЕТЙПДЙЮЕУЛЙИ ТЕЫЕОЙК:
дМС ФПЗП, ЮФПВЩ Maple ОБИПДЙМБ ЧУЕ ТЕЫЕОЙС, ОЕПВИПДЙНП РТЕДЧБТЙФЕМШОП РТЙУЧПЙФШ ЪОБЮЕОЙЕ true УЙУФЕНОПК РЕТЕНЕООПК _EnvAllSolutions . фПЗДБ НЩ РПМХЮЙН ТЕЪХМШФБФ Ч ДТХЗПН ЧЙДЕ, Ч ЛПФПТПН ВХДХФ ЖЙЗХТЙТПЧБФШ РЕТЕНЕООЩЕ Z1
. ьФЙ РЕТЕНЕООЩЕ ПВПЪОБЮБАФ РТПЙЪЧПМШОХА ЛПОУФБОФХ ГЕМПЗП ФЙРБ, Ч ВПМЕЕ РТЙЧЩЮОПН ЧЙДЕ ТЕЫЕОЙС НПЦОП ВХДЕФ ЪБРЙУБФШ, ЛБЛ π/4+πn , πk .
Решение уравнений
Методы нахождения корней полиномов, решения уравнений, содержащих элементарные и специальные функции и систем сложных уравнений

Уравнения с одной переменной
Для решения таких уравнений в Maple предусмотрены две команды: solve для символьного решения и fsolve для решения с ответом в численном виде. Например, формула для квадратного уравнения:
Синтаксис solve выглядит так: solve(equation,variable) . Параметры записаны через запятую. Если задать численные коэффициенты, то система попытается дать численные ответы:
Maple знает формулы для кубического уравнения:
но они сложны, неприятны по внешнему виду, и их почти никогда не применяют.
Используем численные коэффициенты, чтобы ответ был численным:
Этот результат – правильный, но поскольку Maple «думает» символами, то они не выглядят слишком пригодными. Для получения чисел с плавающей запятой следует применять уже известную команду evalf :
или вводить коэффициенты уравнения с десятичной точкой:
Команда solve с полиномами работает по-умному: она знает фундаментальную теорему алгебры о том, что полином n-го порядка имеет n корней. Например, если спросить о корнях уравнения x 6 + 1:
в ответе должны быть все шесть.
RootOf часто встречается при решении уравнений в Maple. В этой задаче задается полином с целыми коэффициентами, что для Maple означает попытку решить уравнение в радикалах (квадратных, кубических корнях и т. п.). Это создает проблему, и в результате он не может дать в решение ничего иного, кроме корня –1. Но если нужны только числа, либо используйте evalf , либо изменяйте коэффициенты на числа с плавающей точкой, и вы получите все шесть корней:
Maple может решать более сложные уравнения вроде cos(x) – x/10:
Снова RootOf , поэтому такой же подход к решению: чтобы получить хотя бы один корень, замените 10 на 10. или используйте evalf(s7)
При решении сложных уравнений надо проявлять осторожность, поскольку возможно более одного ответа, и Maple не даст все. Попробуем нарисовать функцию cos(x) – x/10 и увидим, как много у нее нулей, т. е. столько корней придется искать.
Maple на самом деле не обманывает: 1.427551779 есть решение, но не все.
Важно: прежде чем искать решение, постройте график, тогда будете знать, сколько корней надо найти.
Как заставить Maple выдать все корни? Поскольку они ищутся численно, применяется команда fsolve , которой надо задать уравнение, переменную и диапазон значений для поиска корней. Например, на рисунке видно, что корни находятся вблизи –9.6, –9.2, –4, –2, 1.5, 5 и 7. Это надо указать в fsolve , задавая диапазон поиска решений (x1..x2):
Посмотрите, что произойдет, если указать диапазон, где нет корней:
По общему правилу, когда Maple без вычислений возвращает то, что ему задали, это означает, что либо он не может найти ответ, либо вы ошиблись. Ищите, где ошибка.
Учтите, что вместо диапазона можно просто задать одно угаданное решение:
Здесь надо быть осторожным. Если для fsolve подсказано начальное значение, причем оно расположено близко к максимуму функции, нули которой ищутся, то fsolve может ошибиться или может найти решение не в том месте, где начальная подсказка. Посмотрим на примере метода секущих, почему так происходит:
Еще один способ контроля за решениями – опция avoid в fsolve .
Ищем решения уравнения cos(x) + x/3. Чтобы узнать, где искать корни, нарисуем функцию и увидим рядом с 3 два близко расположенных корня. Команда найдет один из них:
а вам нужен второй, и возникает проблема: как указать команде на него или как задать начальное значение. Можно так: ищи один корень вблизи 3, но не ищи s1:
Найдите все действительные или комплексные корни следующих полиномов. Используйте для этого команды solve и fsolve .
| (a) x 4 – 1, | (b) x 3 + x 2 + x + 1. |
solve дает комплексные величины, а fsolve – нет. Это можно исправить, указав fsolve , что нужно искать комплексные решения: fsolve(x^2+1=0, x,complex) .
Посмотрите, что случается при использовании команды factor(f,complex) , где f – полином, который надо разложить.
(a) Найдите все решения уравнения e x = 10sin(x) между –5 и 20.
(b) Найдите все решения уравнения e (–x) = x, используйте solve и fsolve и сравните ответы.
(с) Найдите все корни функции для x между 0 и 10.
(d) Найдите все корни производной функции Бесселя между 0 и 100 и занесите их в вектор-столбец a n .
Эту задачу можно решить очень компактно с помощью команды seq с командой fsolve внутри нее.
Решение разбейте на части:
Шаг 1. Нарисуйте функцию между 0 и 100, затем несколько раз обновите диапазон графика, чтобы узнать, где первый и второй корни и как далеко они друг от друга (вы обнаружите, что они на расстоянии порядка π).
Шаг 2. Чтобы применить полученную информацию, используйте команду seq , чтобы генерировать все корни.
Команда seq , вроде такой: seq(n^2,n=0..20) , генерирует список чисел; затем учтите, что первый аргумент seq , который генерирует зависящее от n число, может быть чем угодно, даже результатом fsolve .
Вот пример построения последовательности нулей косинуса с помощью seq и fsolve , который основан на догадке, что начинать надо с 1.4 и расстояние между нулями π: seq(fsolve(cos(x)=0,x=1.4+n*Pi),n=0..20);
Шаг 3. Все, что вам теперь нужно сделать, – загрузить эти числа в вектор-столбец. Если команда seq не дала первый корень при x=0 , догадайтесь, как это сделать вручную.
Что такое уравнение? Как решать уравнения?
Уравнение — одно из краеугольных понятий всей математики. Как школьной, так и высшей. Имеет смысл разобраться, правда? Тем более, что это очень простое понятие. Ниже сами убедитесь. 🙂 Так что же такое уравнение?
То, что это слово однокоренное со словами «равный», «равенство», возражений, думаю, ни у кого не вызывает.
Уравнение — это два математических выражения, соединённых между собой знаком » font-size:17px;»> Но… не каких попало. А таких, в которых (хотя бы в одном) содержится неизвестная величина. Или, по-другому, переменная величина. Или, сокращённо, просто «переменная». Которая обычно обозначается буквой «х».
Переменных может быть одна, может быть несколько. В школьной математике чаще всего рассматриваются уравнения с одной переменной. И мы тоже пока что будем рассматривать уравнения с одной переменной. С двумя переменными или более — в специальных уроках.
Что значит решить уравнение?
Переменная, входящая в уравнение, может принимать любые допустимые математикой значения. На то она и переменная. 🙂 При каких-то значениях переменной получается верное числовое равенство, а при каких-то — нет.
Решить уравнение означает найти ВСЕ такие значения переменной, при подстановке которых в исходное уравнение получается верное равенство. Или, более научно, верное тождество. Или доказать, что таких значений переменной не существует.
Что такое верное равенство? Это равенство, не вызывающее сомнений даже у человека, абсолютно не отягощённого глубокими математическими познаниями. Например, 5=5, 0=0, -10=-10. И так далее. 🙂
Значения переменной, при подстановке которых достигается это самое верное равенство, называются очень красиво и научно — корни уравнения.
Корень может быть один, может быть несколько. А может быть и бесконечно много корней — целый интервал или даже вообще вся числовая прямая от –∞ до +∞. Да, такое тоже бывает! Всё от конкретного уравнения зависит.)
А бывает и такое, что нельзя найти такие иксы, которые давали бы нам верное равенство. Принципиально нельзя. По определённым причинам. Нету таких иксов…
В таких случаях обычно говорят, что уравнение не имеет корней.
Для чего нужны уравнения?
Вопрос смешной. Для жизни! В школе, как правило, уравнения нужны для решения текстовых задач. Это, напоминаю, задачи на движение, на работу, на проценты и многие другие.
А во взрослой жизни без уравнений невозможны было бы ответить даже на самые обычные, но жизненно важные вопросы повседневности: какая будет погода завтра, выдержит ли заданную нагрузку здание. Или лифт. Или самолёт. Куда попадёт ракета… И не было бы сейчас среди нас ни синоптиков, ни инженеров, ни бухгалтеров, ни экономистов, ни программистов… За ненадобностью. Внушает?)
Почему это так? А потому, что уравнениями описываются почти все известные человеку природные явления и процессы. Изменение давления и температуры воздуха с высотой, закон всемирного тяготения, размножение бактерий, радиоактивный распад, химические реакции, электричество, спрос и предложение — в основе всего этого лежат математические уравнения! Простые, сложные — всякие. Какое явление или ситуация, такое и уравнение.)
Уравнения — очень мощный и универсальный инструмент для решения самых разных прикладных задач.
А какие бывают уравнения?
Уравнений в математике несметное количество. Самых разных видов. Но всё многообразие уравнений можно условно разделить всего на 4 категории:
3. Дробные (или дробно-рациональные),
Разные категории уравнений требуют и разного подхода к их решению: линейные уравнения решаются одним способом, квадратные — другим, дробные — третьим, тригонометрические, логарифмические, показательные и прочие — тоже решаются своими методами.
Прочих уравнений, разумеется, больше всего, да…) Это и иррациональные, и тригонометрические, и показательные, и логарифмические, и многие другие уравнения. И даже дифференциальные уравнения (для студентов), где роль неизвестного играет не число, а функция. Или даже семейство функций. 🙂
В соответствующих уроках мы подробно разберём все эти типы уравнений. А здесь у нас — базовые приёмы и правила.
Называются эти правила — тождественные (или — равносильные) преобразования уравнений. Их всего два. И нигде их не обойти. Так что знакомимся!
Как решать уравнения? Тождественные (равносильные) преобразования уравнений.
Решение любого уравнения заключается в поэтапном преобразовании входящих в него выражений. Но преобразований не абы каких, а таких, чтобы от шага к шагу суть всего уравнения не менялась. Несмотря на то, что после каждого преобразования уравнение будет видоизменяться и, в конечном счёте, станет совсем не похоже на исходное.
Такие преобразования в математике называются равносильными или тождественными. Их довольно много, но среди всего многообразия тождественных преобразований уравнений выделяется два базовых. О них и пойдёт речь в этом уроке. Да-да, всего два! Но — крайне важных! И каждое из них заслуживает отдельного внимания.
Применение этих двух тождественных преобразований в том или ином порядке гарантирует успех в решении 99% уравнений математики. Заманчиво, правда?
Первое тождественное преобразование:
К обеим частям уравнения можно прибавить (или отнять) любое (но одинаковое!) число или выражение (в том числе и с переменной). Суть уравнения от этого не изменится.
Это преобразование вы применяете всюду, наивно думая, что переносите какие-то члены из одной части уравнения в другую, меняя знаки. 🙂
Например, такое крутое уравнение:

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

А что же происходит в действительности? А на самом деле вы… прибавляете к обеим частям уравнения тройку!
Вот что у вас происходит:

И результат получается тем же самым:

Вот и всё. Слева остаётся чистый икс (чего мы, собственно, и добиваемся), а справа — что уж получится. Но самое главное то, что от прибавления тройки к обеим частям суть всего уравнения не изменилась!
Дело в том, что привычный нам перенос слагаемых из одной части в другую со сменой знака — это просто сокращённый вариант первого тождественного преобразования.
И зачем нам так глубоко копать? В уравнениях — незачем. Переносите себе спокойно и не парьтесь. Только знаки менять не забывайте.) А вот в неравенствах привычка к переносу может и слегка обескуражить, да…
Это было первое тождественное преобразование. Переходим ко второму.
Второе тождественное преобразование:
Обе части уравнения можно умножить (разделить) на одно и то же отличное от нуля число или выражение.
Это тождественное преобразование мы вы постоянно применяете, когда решаете что-нибудь совсем уж жуткое типа:

Тут каждому ясно, что х=3. А вот как вы получили этот ответ? Подобрали? Угадали?
Чтобы не подбирать и не гадать (мы с вами математики, а не гадалки), нужно понять, что вы просто поделили обе части уравнения на четвёрку. Которая нам и мешает.

Эта палка с делением означает, что на четвёрку делятся обе части нашего уравнения. Через дроби эта процедура выглядит так:

Слева четвёрки благополучно сокращаются, остаётся икс в гордом одиночестве. А справа при делении 12 на 4 получается, понятное дело, тройка. 🙂
Звучит невероятно, но эти два (всего два!) простых преобразования лежат в основе решения всех уравнений математики! Да-да, именно всех, я нисколько не преувеличиваю! От линейных и квадратных в школе до дифференциальных в ВУЗе.)
Ну что, посмотрим на тождественные преобразования уравнений в действии?
Применение тождественных преобразований к решению уравнений.
Начнём с первого тождественного преобразования. Переноса вправо-влево.
Пример для новичков:
Дело нехитрое. Это линейное уравнение. Работаем прямо по заклинанию: «С иксами влево, без иксов — вправо».
Эта мантра — универсальная инструкция по применению первого тождественного преобразования. Вот и смотрим на уравнение. Какое слагаемое с иксом у нас справа? Что? 2х? Не-а!) Справа у нас -2х (минус два икс)! Поэтому при переносе в левую часть минус поменяется на плюс:
1 — х +2х = 3
Полдела сделано, иксы собрали слева. Осталось все числа собрать справа. Слева в уравнении стоит единичка. Опять вопрос — с каким знаком? Ответ «с никаким» не катит.) Слева перед единицей и вправду ничего не написано. А это значит, что перед ней стоит знак «плюс». Так уж в математике повелось: ничего не написано — значит, плюс.)
И поэтому вправо единичка перенесётся уже с минусом:
-х + 2х = 3 — 1
Вот почти и всё. Слева приводим подобные, а справа — считаем. И получаем:
Это было совсем примитивное уравнение.
Теперь пример покруче, для старшеклассников:

Уравнение логарифмическое. Ну и что? Какая разница? Всё равно первым шагом делаем базовое тождественное преобразование («С иксами влево ….»). Для этого слагаемое с иксом (то есть, —log3x) переносим влево. Со сменой знака:

А числовое выражение (log34) переносим вправо. Также со сменой знака, разумеется:

Вот и всё. Справа получилась чистая формула. Кто дружит с логарифмами, тот в уме дорешает уравнение и получит:
Что? Хотите синусы? Пожалуйста, вот вам синусы:

И снова всё то же самое! Выполняем первое тождественное преобразование — переносим sin x влево (с минусом), а -0,25 переносим вправо (с плюсом):

Получили простейшее тригонометрическое уравнение с синусом, решить которое (для знающих) также не составляет никакого труда.
Видите, насколько универсально первое равносильное преобразование! Встречается везде и всюду и не обойти его никак… Именно поэтому так важно уметь его делать на автомате и без ошибок.
Собственно, ошибиться здесь можно лишь в одном — забыть сменить знак при переносе. Что и происходит сплошь и рядом. Внимательность никто не отменял, да…)
Ну что, продолжаем наши игры? Развлекаемся теперь со вторым преобразованием!)
Крутяк, прямо скажем.) Ладно, это эмоции…
Смотрим и соображаем: что нам мешает в этом уравнении? Что-что… Да семёрка мешает! Хорошо бы от неё избавиться. Да так, чтобы исходное уравнение не испортить.)
Но как? Перенести вправо? Ээээ… Стоп! Нельзя.) Семёрка с иксом умножением связана. Коэффициент, видите ли.) Нельзя её оторвать от икса и вправо перенести. Вот всё выражение 7х целиком — пожалуйста (вопрос — зачем?). А семёрку отдельно — никак нет.
Самое время про умножение/деление вспомнить! Нам ведь в ответе чистый икс нужен, не так ли? А семёрка — мешает. Вот и делим левую часть на семь. «Очищаем» икс от коэффициента. Так нам надо. Но тогда и правую часть тоже надо поделить на семь: этого уже математика требует. Что уж там получится, то и получится. Но пример хороший. Я старался.) 28 на 7 замечательно делится. Получится 4.
Или такое уравнение:

Что здесь нам мешает? Дробь 1/6, не так ли? Вот давайте и избавимся от неё. Безопасно для уравнения.) Как? Ну, можно поступить аналогично — поделить обе части на эту самую 1/6. Но в уме это не очень удобно. Кое-кто и запутается…
Но мы же не только делить, мы ещё и умножать умеем!) Вспоминаем из младших классов, после какого действия у нас пропадает дробь? Правильно! Дробь у нас пропадает при умножении на число, равное (или кратное) её знаменателю. Вот и умножим обе части нашего уравнения на 6. Слева всё равно чистый икс получится, а умножение правой части на 6 — не самая трудная работа.)

Вот и всё.) Умножение обеих частей уравнения на нужное число позволяет сразу избавляться от дробей, минуя промежуточные выкладки, в которых, между прочим, запросто можно и ошибок наляпать. Короче дорога — меньше ошибок!
Теперь снова на машину времени и — в старшие классы:

Чтобы добраться до икса и тем самым решить это крутое тригонометрическое уравнение, нам надо сначала получить слева чистый косинус, безо всяких коэффициентов. А двойка мешает. 🙂 Вот и делим на 2 всю левую часть:

Но тогда и правую часть тоже придётся разделить на двойку: это уже МАТЕМАТИКЕ надо. Делим:

Получили справа табличное значение косинуса. И теперь уравнение решается за милую душу.)

Вот и вся премудрость. Как видите, тождественные преобразования уравнений — штука полезная. И при этом не самая сложная. Перенос да умножение/деление. Однако далеко не у всех они получаются с первого раза и без ошибок, ох не у всех… Основные проблемы здесь две.
Проблема первая (для малоопытных):
Иногда ученик думает, что упрощение уравнений делается по одному, раз и навсегда установленному правилу. И никак не может уловить и понять это правило: в каких-то примерах начинают с домножения (или деления), в каких-то — с переноса. Где-то три раза переносят и ни разу не домножают…
Например, такое линейное уравнение:
С чего начинать? Можно начать с переноса:
А можно сначала поделить обе части на пятёрку, а затем уж переносить. Тогда сразу числа попроще станут:

Как видим, и так и сяк решать можно. И это — в примитивном примере! Вот и возникает у неопытных учеников вопрос: «Как правильно?»
По-всякому правильно! Кому как удобнее. 🙂 Универсального рецепта здесь нет и быть не может. Математика предлагает вам на выбор два вида преобразований уравнений. А порядок этих самых преобразований зависит исключительно от исходного уравнения, а также от личных предпочтений и привычек решающего.
Проблема вторая (для всех…ну… почти):
Ошибки в вычислениях. В преобразованиях постоянно приходится перемножать скобки. Заключать выражения в скобки и раскрывать скобки. Умножать и делить дроби. Работать со степенями… Короче, в наличии весь набор элементарных действий математики. Со всеми вытекающими…
Обе эти проблемы устраняются только одним способом — практикой. Исчезают сомнения и ошибки. Примеры становятся проще, задания — легче. И в итоге не математика командует вами, а вы — математикой. 🙂
Как решать уравнения в python
Что такое SymPy ? Это библиотека символьной математики языка Python. Она является реальной альтернативой таким математическим пакетам как Mathematica или Maple и обладает очень простым и легко расширяемым кодом. SymPy написана исключительно на языке Python и не требует никаких сторонних библиотек.
Документацию и исходный код этой библиотеки можно найти на ее официальной странице.
Первые шаги с SymPy
Используем SymPy как обычный калькулятор
В библиотеке SymPy есть три встроенных численных типа данных: Real , Rational и Integer . С Real и Integer все понятно, а класс Rational представляет рациональное число как пару чисел: числитель и знаменатель рациональной дроби. Таким образом, Rational(1, 2) представляет собой 1/2 , а, например, Rational(5, 2) — соответственно 5/2 .
Библиотека SymPy использует библиотеку mpmath , что позволяет производить вычисления с произвольной точностью. Таким образом, ряд констант (например, пи, e), которые в данной библиотеке рассматриваются как символы, могут быть вычислены с любой точностью.
Как можно заметить, функция evalf() дает на выходе число с плавающей точкой.
В SymPy есть также класс, представляющий такое понятие в математике, как бесконечность. Он обозначается следующим образом: oo .
Символы
В отличие от ряда других систем компьютерной алгебры, в SymPy можно в явном виде задавать символьные переменные. Это происходит следующим образом:
После их задания, с ними можно производить различные манипуляции.
С символами можно производить преобразования с использованием некоторых операторов языка Python. А именно, арифметических ( + , -` , «* , ** ) и логических ( & , | ,
Библиотека SymPy позволяет задавать форму вывода результатов на экран. Обычно мы используем формат такого вида:
Алгебраические преобразования
SymPy способна на сложные алгебраические преобразования. Здесь мы рассмотрим наиболее востребованные из них, а именно раскрытие скобок и упрощение выражений.
Раскрытие скобок
Чтобы раскрыть скобки в алгебраических выражениях, используйте следующий синтаксис:
При помощи ключевого слова можно добавить поддержку работы с комплексными переменными, а также раскрытие скобок в тригонометрических функциях.
Упрощение выражений
Если вы хотите привести выражение к более простому виду (возможно, сократить какие-то члены), то используйте функцию simplify .
Также надо сказать, что для определенных видов математических функций существуют альтернативные, более конкретные функции для упрощения выражений. Так, для упрощения степенных функций есть функция powsimp , для тригонометрических — trigsimp , а для логарифмических — logcombine , radsimp .
Вычисления
Вычисления пределов
Для вычисления пределов в SymPy предусмотрен очень простой синтаксис, а именно limit(function, variable, point) . Например, если вы хотите вычислить предел функции f(x) , где x -> 0 , то надо написать limit(f(x), x, 0) .
Также можно вычислять пределы, которые стремятся к бесконечности.
Дифференцирование
Для дифференцирования выражений в SymPy есть функция diff(func, var) . Ниже даны примеры ее работы.
Проверим результат последней функции при помощи определения производной через предел.
tan 2 ()+1 Результат тот же.
Также при помощи этой же функции могут быть вычислены производные более высоких порядков. Синтаксис функции будет следующим: diff(func, var, n) . Ниже приведено несколько примеров.
Разложение в ряд
Для разложения выражения в ряд Тейлора используется следующий синтаксис: series(expr, var) .
Интегрирование
В SymPy реализована поддержка определенных и неопределенных интегралов при помощи функции integrate() . Интегрировать можно элементарные, трансцендентные и специальные функции. Интегрирование осуществляется с помощью расширенного алгоритма Риша-Нормана. Также используются различные эвристики и шаблоны. Вот примеры интегрирования элементарных функций:
Также несложно посчитать интеграл и от специальных функций. Возьмем, например, функцию Гаусса:
Результат вычисления можете посмотреть сами. Вот примеры вычисления определенных интегралов.
Также можно вычислять определенные интегралы с бесконечными пределами интегрирования (несобственные интегралы).
Решение уравнений
При помощи SymPy можно решать алгебраические уравнения с одной или несколькими переменными. Для этого используется функция solveset() .
Как можно заметить, первое выражение функции solveset() приравнивается к 0 и решается относительно х . Также возможно решать некоторые уравнения с трансцендентными функциями.
Системы линейных уравнений
SymPy способна решать широкий класс полиномиальных уравнений. Также при помощи данной библиотеки можно решать и системы уравнений. При этом переменные, относительно которых должна быть разрешена система, передаются в виде кортежа во втором аргументе функции solve() , которая используется для таких задач.
Факторизация
Другим мощным методом исследования полиномиальных уравнений является факторизация многочленов (то есть представление многочлена в виде произведения многочленов меньших степеней). Для этого в SymPy предусмотрена функция factor() , которая способна производить факторизацию очень широкого класса полиномов.
Булевы уравнения
Также в SymPy реализована возможность решения булевых уравнений, что по сути означает проверку булевого выражения на истинность. Для этого используется функция satisfiable() .
Данный результат говорит нам о том, что выражение (x & y) будет истинным тогда и только тогда, когда x и y истинны. Если выражение не может быть истинным ни при каких значениях переменных, то функция вернет результат False .
Линейная алгебра
Матрицы
Матрицы в SymPy создаются как экземпляры класса Matrix :
В отличие от NumPy , мы можем использовать в матрицах символьные переменные:
И производить с ними разные манипуляции:
Дифференциальные уравнения
При помощи библиотеки SymPy можно решать некоторые обыкновенные дифференциальные уравнения. Для этого используется функция dsolve() . Для начала нам надо задать неопределенную функцию. Это можно сделать, передав параметр cls=Function в функцию symbols() .
Теперь f и g заданы как неопределенные функции. мы можем в этом убедиться, просто вызвав f(x) .
Теперь решим следующее дифференциальное уравнение:
Чтобы улучшить решаемость и помочь этой функции в поиске решения, можно передавать в нее определенные ключевые аргументы. Например, если мы видим, что это уравнение с разделяемыми переменными, то мы можем передать в функцию аргумент hint=’separable’ .
Бесплатные кодинг марафоны с ревью кода
Наш телеграм канал проводит бесплатные марафоны по написанию кода на Python с ревью кода от преподавателя
Математическая библиотека Python SymPy
SymPy — это библиотека Python для выполнения символьных вычислений. Это система компьютерной алгебры, которая может выступать как отдельное приложение, так и в качестве библиотеки для других приложений. Поработать с ней онлайн можно на https://live.sympy.org/. Поскольку это чистая библиотека Python, ее можно использовать даже в интерактивном режиме.
В SymPy есть разные функции, которые применяются в сфере символьных вычислений, математического анализа, алгебры, дискретной математики, квантовой физики и так далее. SymPy может представлять результат в разных форматах: LaTeX, MathML и так далее. Распространяется библиотека по лицензии New BSD. Первыми эту библиотеку выпустили разработчики Ondřej Čertík и Aaron Meurer в 2007 году. Текущая актуальная версия библиотеки — 1.6.2.
Вот где применяется SymPy:
- Многочлены
- Математический анализ
- Дискретная математика
- Матрицы
- Геометрия
- Построение графиков
- Физика
- Статистика
- Комбинаторика
Установка SymPy
Для работы SymPy требуется одна важная библиотека под названием mpmath . Она используется для вещественной и комплексной арифметики с числами с плавающей точкой произвольной точности. Однако pip установит ее автоматически при загрузке самой SymPy:
Такие дистрибутивы, как Anaconda, Enthough, Canopy и другие, заранее включают SymPy. Чтобы убедиться в этом, достаточно ввести в интерактивном режиме команду:
Исходный код можно найти на GitHub.
Символьные вычисления в SymPy
Символьные вычисления — это разработка алгоритмов для управления математическими выражениями и другими объектами. Такие вычисления объединяют математику и компьютерные науки для решения математических выражений с помощью математических символов.
Система компьютерной алгебры же, такая как SymPy, оценивает алгебраические выражения с помощью тех же символов, которые используются в традиционных ручных методах. Например, квадратный корень числа с помощью модуля math в Python вычисляется вот так:
Как можно увидеть, квадратный корень числа 7 вычисляется приблизительно. Но в SymPy квадратные корни чисел, которые не являются идеальными квадратами, просто не вычисляются:
Вот каким будет вывод этого кода: sqrt(7) .
Это можно упростить и показать результат выражения символически таким вот образом:
В случае с модулем math вернется число, а вот в SymPy — формула.
Для рендеринга математических символов в формате LaTeX код SymPy, используйте Jupyter notebook:
Если выполнить эту команду в IDLE, то получится следующий результат:

Квадратный корень неидеального корня также может быть представлен в формате LaTeX с помощью привычных символов:

Символьные вычисления с помощью таких систем, как SymPy, помогают выполнять вычисления самого разного рода (производные, интегралы, пределы, решение уравнений, работа с матрицами) в символьном виде.
В пакете SymPy есть разные модули, которые помогают строить графики, выводить результат (LaTeX), заниматься физикой, статистикой, комбинаторикой, числовой теорией, геометрией, логикой и так далее.
Числа
Основной модуль в SymPy включает класс Number , представляющий атомарные числа. У него есть пара подклассов: Float и Rational . В Rational также входит Integer .
Класс Float
Float представляет числа с плавающей точкой произвольной точности:
SymPy может конвертировать целое число или строку в число с плавающей точкой:
При конвертации к числу с плавающей точкой, также можно указать количество цифр для точности:
Представить число дробью можно с помощью объекта класса Rational , где знаменатель — не 0:

Если число с плавающей точкой передать в конструктор Rational() , то он вернет дробь:

Для упрощения можно указать ограничение знаменателя:
Выведется дробь 1/5 вместо 3602879701896397/18014398509481984.
Если же в конструктор передать строку, то вернется рациональное число произвольной точности:

Также рациональное число можно получить, если в качестве аргументов передать два числа. Числитель и знаменатель доступны в виде свойств:
Класс Integer
Класс Integer в SymPy представляет целое число любого размера. Конструктор принимает рациональные и числа с плавающей точкой. В результате он откидывает дробную часть:
Также есть класс RealNumber , который является алиасом для Float . В SymPy есть классы-одиночки Zero и One , доступные через S.Zero и S.One соответственно.
Другие числовые объекты-одиночки — Half , NaN , Infinity и ImaginaryUnit .
Бесконечность представлена в виде объекта-символа oo или как S.Infinity :

ImaginaryUnit можно импортировать как символ I , а получить к нему доступ — через S.ImaginaryUnit .

Символы
Symbol — самый важный класс в библиотеке SymPy. Как уже упоминалось ранее, символьные вычисления выполняются с помощью символов. И переменные SymPy являются объектами класса Symbol .
Аргумент функции Symbol() — это строка, содержащая символ, который можно присвоить переменной.
Код выше является эквивалентом этого выражения:

Символ может включать больше одной буквы:
Также в SymPy есть функция Symbols() , с помощью которой можно определить несколько символов за раз. Строка содержит названия переменных, разделенные запятыми или пробелами.
В модуле abc можно найти элементы латинского и греческого алфавитов в виде символов. Таким образом вместо создания экземпляра Symbol можно использовать метод:
Однако C, O, S, I, N, E и Q являются заранее определенными символами. Также символы с более чем одной буквы не определены в abc. Для них нужно использовать объект Symbol . Модуль abs определяет специальные имена, которые могут обнаружить определения в пространстве имен SymPy по умолчанию. сlash1 содержит однобуквенные символы, а clash2 — целые слова.
Индексированные символы (последовательность слов с цифрами) можно определить с помощью синтаксиса, напоминающего функцию range() . Диапазоны обозначаются двоеточием. Тип диапазона определяется символом справа от двоеточия. Если это цифра, то все смежные цифры слева воспринимаются как неотрицательное начальное значение.
Смежные цифры справа берутся на 1 больше конечного значения.
Подстановка параметров
Одна из базовых операций в математических выражениях — подстановка. Функция subs() заменяет все случаи первого параметра на второй.
Этот код даст вывод, эквивалентный такому выражению.

А кодом expr.subs(x,a) мы получим туже формулу, но с a вместо x .
Эта функция полезна, когда требуется вычислить определенное выражение. Например, нужно посчитать значения выражения, заменив a на 5 :

Также функция используется для замены подвыражения другим подвыражением. В следующем примере b заменяется на a+b .
Это дает такой вывод:

Функция simplify()
Функция simplify() используется для преобразования любого произвольного выражения, чтобы его можно было использовать как выражение SymPy. Обычные объекты Python, такие как целые числа, конвертируются в SymPy.Integer и так далее. Строки также конвертируются в выражения SymPy:
Любой объект Python можно конвертировать в объект SymPy. Однако учитывая то, что при преобразовании используется функция eval() , не стоит использовать некорректные выражения, иначе возникнет ошибка SimplifyError .
Функция simplify() принимает следующий аргумент: strict=False . Если установить True , то преобразованы будут только те типы, для которых определено явное преобразование. В противном случае также возникнет ошибка SimplifyError . Если же поставить False , то арифметические выражения и операторы будут конвертированы в их эквиваленты SumPy без вычисления выражения.

Функция evalf()
Функция вычисляет данное числовое выражение с точностью до 100 цифр после плавающей точки. Она также принимает параметр subs , как объект словаря с числовыми значениями для символов. Например такое выражение:
Даст такой результат: ?? 2
Вычислим выражение с помощью evalf() и заменим r на 5:
По умолчанию точность после плавающей точки — 15, но это значение можно перезаписать до 100. Следующее выражение вычисляет, используя вплоть до 20 цифр точности:
Функция lambdify()
Функция lambdify() переводит выражения SymPy в функции Python. Если выражение, которое нужно вычислить, затрагивает диапазон значений, то функция evalf() становится неэффективной. Функция lambdify действует как лямбда-функция с тем исключением, что она конвертирует SymPy в имена данной числовой библиотеки, обычно NumPy. По умолчанию же она реализована на основе стандартной библиотеки math.
У выражения может быть больше одной переменной. В таком случае первым аргументом функции является список переменных, а после него — само выражение:
Но чтобы использовать numpy в качестве основной библиотеки, ее нужно передать в качестве аргумента функции lambdify() .
В этой функции использовались два массива numpy: a и b . В случае с ними выполнение гораздо быстрее:
Логические выражения
Булевы функции расположены в модуле sympy.basic.booleanarg . Их можно создать и с помощью стандартных операторов Python: & (And), | (Or),
(Not), а также >> и . Булевы выражения наследуются от класса Basic .
BooleanTrue.
Эта функция является эквивалентом True из Python. Она возвращает объект-одиночку, доступ к которому можно получить и с помощью S.true .
BooleanFalse.
А эта функция является эквивалентом False . Ее можно достать с помощью S.False .
And.
Функция логического AND оценивает два аргумента и возвращает False , если хотя бы один из них является False . Эта функция заменяет оператор & .
Or.
Оценивает два выражения и возвращает True , если хотя бы одно из них является True . Это же поведение можно получить с помощью оператора | .
Not.
Результат этой функции — отрицание булево аргумента. True, если аргумент является False , и False в противном случае. В Python за это отвечает оператор
Xor.
Логический XOR (исключающий OR) возвращает True, если нечетное количество аргументов равняется True , а остальные — False . False же вернется в том случае, если четное количество аргументов True , а остальные — False . То же поведение работает в случае оператора ^ .
В предыдущем примере один(нечетное число) аргумент является True , поэтому Xor вернет True . Если же количество истинных аргументов будет четным, результатом будет False , как показано дальше.
Nand.
Выполняет логическую операцию NAND. Оценивает аргументы и возвращает True , если хотя бы один из них равен False , и False — если они истинные.
Nor.
Выполняет логическую операцию NOR. Оценивает аргументы и возвращает False , если один из них True , или же True , если все — False .
Хотя SymPy и предлагает операторы ^ для Xor ,
для Not , | для Or и & для And ради удобства, в Python они используются в качестве побитовых. Поэтому если операнды будут целыми числами, результаты будут отличаться.
Equivalent.
Эта функция возвращает отношение эквивалентности. Equivalent(A, B) будет равно True тогда и только тогда, когда A и B оба будут True или False . Функция вернет True , если все аргументы являются логически эквивалентными. В противном случае — False .
Запросы
Модуль assumptions в SymPy включает инструменты для получения информации о выражениях. Для этого используется функция ask() .
Следующие свойства предоставляют полезную информацию о выражении:
algebraic(x)
Чтобы быть алгебраическим, число должно быть корнем ненулевого полиномиального уравнения с рациональными коэффициентами. √2, потому что √2 — это решение x2 − 2 = 0. Следовательно, это выражения является алгебраическим.
complex(x)
Предикат комплексного числа. Является истиной тогда и только тогда, когда x принадлежит множеству комплексных чисел.
composite(x)
Предикат составного числа, возвращаемый ask(Q.composite(x)) является истиной тогда и только тогда, когда x — это положительное число, имеющее как минимум один положительный делитель, кроме 1 и самого числа.
even, odd
ask() возвращает True , если x находится в множестве четных и нечетных чисел соответственно.
imaginary
Свойство представляет предикат мнимого числа. Является истиной, если x можно записать как действительное число, умноженное на мнимую единицу.
integer
Это свойство, возвращаемое Q.integer(x) , будет истинным только в том случае, если x принадлежит множеству четных чисел.
rational, irrational
Q.irrational(x) истинно тогда и только тогда, когда x — это любое реальное число, которое нельзя представить как отношение целых чисел. Например, pi — это иррациональное число.
positive, negative
Предикаты для проверки того, является ли число положительным или отрицательным.
zero, nonzero
Предикат для проверки того, является ли число нулем или нет.
Квадратное уравнение
Программа, позволяющая находить корни квадратного уравнения, – это один из примеров простых программ, которые можно написать на Python 3. Она хорошо подойдет для начинающих изучать этот язык программирования.
Постановка задачи
Уравнение, которое будем решать, выглядит следующим образом: a·x²+b·x+c=0. Пользователю предлагается ввести значения a, b и с в терминале. После этого программа посчитает дискриминант. На его основе найдем решения уравнения – значения x, для которых будет выполняться равенство.
Вот пример работы программы, которая будет написана.

Программа
Для решения квадратных уравнений на Python 3 напишем код, приведенный ниже. Разберем некоторые моменты, которые мы использовали в этой простой программе:
- print — эта функция выводит на экран информацию.
- input — выводит информацию и предлагает пользователю ввести данные.
- b**2 — это возведение в степень, в данном случае переменная b возводится в квадрат.
- str — эта функция приводит данные к строковому виду.
- if-elif-else — это условные операторы в языке Python. Исходя из значения discriminant мы определяем количество корней квадратного уравнения.
- discriminant ** 0.5 — с помощью такого способа извлекаем квадратный корень. В Python есть несколько способов извлечения корней, например, с помощью функции sqrt из библиотеки math. Про способы извлечения корней в Python описано в отдельной статье.
Запустим программу и введём нужные коэффициенты.
Все посчитано, найдены два корня, которые будут являться решением квадратного уравнения.
Дополнительно
Хотелось бы уделить внимание ещё одному моменту. Если дискриминант отрицательный, то действительных корней нет. Но будут комплексные корни. Если мы хотим их обрабатывать, то следует изменить конструкцию условных операторов следующим образом:
Тогда пример решения уравнения будет выглядеть следующим образом:
Как видим, получили два комплексных корня.
Этот простой код написанный на Python 3 можно для обучения программированию немного усложнить:
- Предлагать запрос в конце программы «Решить ещё одно уравнение (y/n): ». И если пользователь введет «y», то заново запросить коэффициенты. Это нужно делать в цикле. Подробнее о циклах в Python можно прочитать здесь.
- Сделать проверку корректности ввода. Ведь пользователь вместо числа может ввести какую-нибудь строку, которая не будет корректно обработана. Про проверку на число описано в отдельной статье.