Mathematica для нематематика: учебное пособие для вузов [Н А Вавилов] (pdf) читать постранично, страница - 31

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

же пытается вывести осмысленную часть выражения, по
которой можно составить хотя бы самое общее впечатление о виде всего
остального.
В общем случае (например, если количество уравнений меньше, чем количество неизвестных) решить систему относительно всех неизвестных не
удастся, в этом случае следует явно указывать те неизвестные, которые мы
хотим выразить через остальные.
◦ В следующей задаче мы просим Mathematica выразить в системе
x + y + z = 1,

x2 + y 2 + z 2 = 1,

неизвестные x, y через неизвестную z, которая в этом случае трактуется
как параметр:
In[53]:=Solve[{x+y+z==1,x^2+y^2+z^2==1},{x,y}]
Out[53]={{x->1/2*(1-z-Sqrt[1+2*z-3*z^2]),
y->1/2*(1-z+Sqrt[1+2*z-3*z^2])},
{x->1/2*(1-z+Sqrt[1+2*z-3*z^2]),
y->1/2*(1-z-Sqrt[1+2*z-3*z^2])}}
Если попытаться решить систему относительно всех трех неизвестных, скажем, так:
In[54]:=Solve[{x+y+z==1,x^2+y^2+z^2==1},{x,y,z}]
то результатом будет уже знакомое нам сообщение об ошибке:

73
Solve: Equations may not give solutions for all
"solve" variables.
Тем не менее, Mathematica снова вернет те же самые формулы, что и в
предыдущем случае. Кстати, как Вы думаете, почему она и в этом случае выражает x и y через z? Ну это, как раз, совершенно понятно. Она
пытается решить систему в первую очередь относительно тех переменных,
которые перечислены в списке первыми. В ответ на
In[55]:=Solve[{x+y+z==1,x^2+y^2+z^2==1},{z,y,x}]
она выдаст то же сообщение об ошибке и выразит z и y (в таком порядке!)
через x.
• Исключение неизвестных. В тех случаях, когда уравнений недостаточно, чтобы найти все неизвестные, часто полезно просто свести исходную систему уравнений к системе от меньшего количества неизвестных. В
случае алгебраических уравнений основной командой для этого в языке Mathematica является Eliminate. Для исключения неизвестной z из системы
алгебраических уравнений
f1 (x, y, z) = g1 (x, y, z), . . . , fn (x, y, z) = gn (x, y, z)
команда Eliminate вызывается в формате
Eliminate[{f1[x,y,z]==g1[x,y,z],...,fn[x,y,z]==gn[x,y,z]},z]
функции двух аргументов, первым из которых является список уравнений,
а вторым — исключаемая неизвестная (или список неизвестных, если их
несколько). Для получения более симметричного ответа, как всегда, рекомендуется применять поверх команды Eliminate команду Simplify. Вот
пара простейших примеров:
In[56]:=Simplify[Eliminate[{x+y+z==1,x*y*z==1},y]]
Out[56]=x*z*(-1+x+z)==-1
In[57]:=Simplify[Eliminate[{x+y+z==1,x^2+y^2+z^2==1},y]]
Out[57]=x^2+x*z+z^2==x+z
Если нам нужно одновременно исключить несколько неизвестных, то эти
неизвестные тоже должны задаваться в виде списка. Вот пример, где мы
ищем соотношение между суммами степеней, для чего требуется исключить
сразу две неизвестных:
In[58]:=Simplify[Eliminate[{u==x^5+y^5,v==x^3+y^3,w==x^2+y^2},
{x,y}]]
Out[58]=2*u^3+30*u*v^2*w^2+5*v*w^6==
v^5+15*u^2*v*w+15*v^3*w^3+6*u*w^5
Ясно, что уже в подобном примере выполнение исключения вручную требует известного присутствия духа и уверенности в своих технических возможностях.

74
При применении команды Eliminate система пытается известными ей
методами исключать и неизвестные из трансцендентных уравнений, конечно, не всегда одинаково успешно.
• Решение неравенств. Естественно, Mathematica может решать не
только уравнения, но и неравенства. В § 1 мы уже видели, что неравенство
записывается обычным образом:
◦ Строгое неравенство x>y Greater или x=y GreaterEqual или xTrue, в следующем формате:
In[61]:=Reduce[x^2+(x-1)/(x^2+x+1)>1,x,Cubics->True]
Out[61]=x1
Разумеется, неравенство совсем не обязано с самого начала иметь полиномиальный вид. С тем же успехом система решает любые неравенства,
сводящиеся к алгебраическим, скажем, неравенства, содержащие абсолютные величины, квадратные корни и пр. Вот пример, основанный на задаче,
фактически предлагавшейся на вступительном экзамене на экономический
факультет МГУ:
In[62]:=Simplify[Reduce[Abs[y]+x-Sqrt[x^2+y^2-1]>=1,{x,y}]]
Out[62]=Element[y,Reals]&&
(x==0&&(y==-1||y==1)||
0AbsoluteThickness[1],
MaxRecursion -> 10,
PlotLabel->"Рис. 15: Abs[x]+Abs[y]>1&&x^2+x*y+y^2