Решение уравнений, неравенств и их систем
Решение уравнений, неравенств и их систем
Кафедра: Информационные Технологии Лабораторная Работа На тему: РЕШЕНИЕ УРАВНЕНИЙ, НЕРАВЕНСТВ И ИХ СИСТЕМ. Москва, 2008 год РЕШЕНИЕ УРАВНЕНИЙ, НЕРАВЕНСТВ И ИХ СИСТЕМ Цели работы: знать команды, используемые при решении уравнений и их систем, неравенств и их систем в системе аналитических вычислений Maple; уметь применять указанные команды для решения математических задач. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ 1. Введение Система аналитических вычислений Maple обладает возможностью решения алгебраических уравнений, неравенств и их систем как в аналитическом так и в численном виде. Для начала несколько подробнее остановимся на самих уравнениях и неравенствах. Два выражения, соединенные знаком равенства (=), представляют самостоятельный тип данных Maple - уравнение(equation). Уравнения можно присваивать обычным переменным Maple, с уравнениями можно осуществлять преобразования, используя обычные арифметические действия, которые выполняются отдельно для левой и правой частей уравнений. Эти действия позволяют преобразовать уравнения к виду, удобному для использования, а иногда и облегчающему Maple поиск решения. Некоторые преобразования, которые можно осуществлять с уравнениями в системе Maple, приведены в примере 1. Пример 1. Допустимые операции с уравнениями. > 3*x^3+7=2*x+x^5; > whattype(%); > d:=3*x^3+7=2*x+x^5; > whattype(d); > d-(x^4=x^4); > d+(x^4=x^4); При проверке типа переменной, значением которой является уравнение, с помощью команды whattype () результатом является равенство =, означающее, что тип проверяемой переменной является уравнением. Как и при задании уравнений два выражения, соединенные знаками >= (больше или равно), <= (меньше или равно), > (больше) или (меньше), представляют новый тип - неравенство (inequation). Пример 2. Неравенства. > a<b; > whattype(%); > d:=a>b; > whattype(d); > d-(h>4); > d-(h<4); При проверке типа объекта, представляющего неравенство, в области вывода отображается либо <>, либо <, либо <=. Дело в том, что Maple “понимает” только эти три типа. Неравенства противоположного знака приводятся к ним перестановкой левой и правой частей с заменой знаков на противоположные. 2. Команда: solve ( ) Команда solve() позволяет решать уравнения и системы уравнений, неравенства и системы неравенств. Эта команда всегда пытается найти замкнутое решение в аналитической форме. Ее синтаксис достаточно прост: solve (ypaвнение, переменная); solve ({уравнение l, уравнение 2, ... }, {переменная l, переменная 2, …}); Первая форма команды предназначена для решения одного уравнения относительно заданной переменной. Вторая форма позволяет решать системы уравнений относительно переменных, заданных вторым параметром. Заметим, что система уравнений и ее неизвестные переменные задаются в виде множеств, результатом в этом случае является также множество значений неизвестных в виде уравнений. В случае задания одного уравнения результатом будет выражение (в случае одного корня уравнения) или последовательность выражений (в случае нескольких корней). Если не задана переменная/переменные, относительно которых следует решать уравнение/систему уравнений, то Maple выдаст все решения относительно всех неопределенных переменных в исходных уравнениях. Если вместо уравнения задано выражение с неизвестными, то оно рассматривается как левая часть уравнения, тогда как правая часть предполагается равной 0. Некоторые из перечисленных ситуаций иллюстрирует пример 3. Пример 3. Решение уравнений и систем уравнений. > a:=x^2+7*x+y^3=0; > solve(a,x); > solve({a},x); > a1:=2*x+y=0; > solve({a,a1},{x,y}); > solve(a1); В некоторых случаях команда solve() возвращает пустую последовательность NULL. Это означает, что решения или не существует, или Maple не удалось его найти. Если не удалось найти все решения, то глобальная переменная _SolutionsMayBeLost устанавливается равной true. Последнее уравнение из примера 3. решалось без указания переменной, относительно которой следовало бы решать уравнение. Maple решил их относительно всех неизвестных величин, входящих в уравнение. Причем он выбрал неизвестную х в качестве параметра (х = х), а неизвестную переменную у выразил через введенный параметр х. Чтобы получить решение, следует параметру х присвоить произвольное значение, тогда значение неизвестной у будет определено однозначно. В общем случае полиномиальное уравнение степени выше 4 может не иметь решения, выраженного с помощью радикалов. В этом случае для представления результатов Maple использует специальную функцию RootOf(), которая применяется для обозначения любого корня выражения, заданного в качестве ее параметра: > eq:=x^5+x^4+x^3+8=0; > d:=solve(eq,x); > evalf(d[1]); > solve(x=-2*cos(x)); В этом примере функция RootOf (_Z + 2 cos(_Z)) представляет любое решение уравнения _Z + 2 cos(_Z) =0. Переменная _Z - это системная переменная, сгенерированная Maple, которая всего лишь заменяет переменную х нашего уравнения. Опция index со значением, равным целому числу, служит для нумерации и упорядочивания корней уравнения. Заметим, что с помощью функции evalf ( ) можно получить приближенные числовые значения функции RootOf. С помощью команды solve() можно решать и тригонометрические уравнения. По умолчанию Maple решает их на промежутке [-, ]. Для получения всех решений тригонометрических уравнений следует задать значение глобальной переменной _EnvAllSolutions равным true. Использование глобальной переменной _EnvAllSolutions показано на следующем примере: > b:=sin(x)^2-2*sin(x)-1=0; > s:=solve(b,x); > _EnvAllSolutions:=true; > s:=solve(b,x); > about(_Z1); Originally _Z1, renamed _Z1~: is assumed to be: integer > about(_B1); Originally _B1, renamed _B1~: is assumed to be: OrProp(0,1) Как видно, в случае _EnvAllSolutions:=true Maple действительно строит все решения тригонометрического уравнения с использованием целочисленной системной переменной _Z1~. Знак тильда (~) означает, что на значения переменной наложены некоторые ограничения. В данном случае эта переменная может принимать только целочисленные значения. (В этом можно убедиться, выполнив команду about(_Z1).) Подобные переменные используются Maple для представления всех решений тригонометрических уравнений. Префикс _Z в имени переменной, сгенерированной Марlе, служит указанием того, что эта переменная может принимать только целые значения. Кроме указанных переменных также используются переменные с префиксом _NN, принимающие неотрицательные целые значения, и префиксом _B, для представления переменных с двоичной областью значении (0 или 1). Для систем аналитических вычислений решение любого трансцендентного уравнения, в том числе и тригонометрического, достаточно сложная и серьезная проблема. Бывает, что простое трансцендентное уравнение может и не решаться в Maple. Здесь следует помнить о том, что Maple использует алгоритмический подход для решения уравнений, и, возможно, ему следует помочь, сделав кое-какие не стандартные преобразования уравнения, приведя его к другому виду. Обычно, решив уравнение или систему уравнений, мы осуществляем проверку полученного решения, подставляя его в исходное уравнение или систему. Точно также следует поступать и при работе в Maple. Для проверки решений можно использовать функцию eval( ): > fs:={x+2*y=3,y+1/x=2}; > answ:=solve(fs,{x,y}); > eval(fs,answ[1]); > eval(fs,answ[2]); Из примера видно, что последовательность множеств, представляющих два полученных решения, сохранена в переменной answ. Для проверки правильности полученных решений, подставляем эти решения в исходную систему и вычисляем полученные выражения с помощью команды eval(). В результате вычисления системы уравнений на двух полученных решениях мы получили тождества, что говорит о правильности наших решений. Если для дальнейших вычислений необходимо иметь значения первого решения в виде отдельных переменных, то той же самой командой eval () можно извлечь их, вычислив, соответственно, неизвестную х и у на первом решении: > x1:=eval(x,answ[1]); > y1:=eval(y,answ[1]); Для проверки решения можно использовать функцию mар() вместе с функцией subs(), которая за одну операцию проверит все решения. Это удобно, когда решений очень много и для каждого из них пришлось бы выполнять команду eval(), если использовать предыдущий подход. Для решения нашей системы вызов команды mар() выглядит так: > map(subs,[answ],fs); Команда solve () может решать неопределенные системы уравнений, в которых количество уравнений меньше числа неизвестных. В этом случае система Maple сама решает, какие из неизвестных принять за параметры, а какие за неизвестные, относительно которых следует строить решение: > fs1:=x+3*y+4*z+5*t=50; > fs2:=3*x+3*y+2*z+t=30; > answ1:=solve({fs1,fs1}); Здесь решение получено в параметрической форме относительно неизвестных y, t и z, которые выбраны системой. Можно явно указать, относительно каких неизвестных следует решать систему уравнений, тогда оставшиеся будут рассматриваться как параметры: > answ2:=solve({fs1,fs1},{y,z}); В этом решении явно указаны неизвестные у и z, и полученное решение зависит от двух параметров х и t. С помощью функции eval () можно вычислить значения решения при конкретных значениях параметров: > eval(answ2,{x=1,z=1,t=1}); Бывает, что при решении систем уравнений ответ получается в виде множества уравнений, в которых левая часть является неизвестной переменной. Чтобы присвоить найденные значения переменным, относительно которых решалась система, следует применять команду assign(). Эта команда присваивает переменным, стоящим в левой части уравнений из множества решений, значения, равные правым частям. Можно сказать, что эта команда заменяет знак равенства (=) на знак операции присваивания (:=) во множестве, состоящем из уравнений, в которых левые части представлены неизвестными: > {q=a+b,w=g+p}; > assign(%);q;w; > eq:=x*a+y*b=c; > s:=solve({eq,x+y=1},{x,y}); > assign(s);x;y; Если решение получено в виде последовательности выражений, то получить значение соответствующего решения можно с помощью индекса. > fs:=y^4+2*y^2+2=0; > d:=solve(fs); > y1:=d[1];y1; Напомним, что в приведенном примере I означает комплексную мнимую единицу, равную . 3. Команда: fsolve ( ) По умолчанию Maple пытается найти аналитическое выражение для корней уравнения. Если это не удается, то, как отмечалось выше, в области вывода ничего не печатается. В подобных случаях (если корни действительно существуют) можно воспользоваться командой fsolve(), которая находит численное решение уравнения или системы уравнений. Формат команды отличается от формата команды solve() наличием третьего параметра опция: fsolve (уравнения, переменные, опция); Задание первых двух параметров соответствует заданию аналогичных параметров в команде solve(), а параметр опция может принимать значения из таблицы 1. Таблица 1. Значения параметра опцuя команды fsolve ( ) |
Значение | Смысл | | complex | Разыскиваются комплексные корни (только для полиномов) | | Fulldigits | Используется арифметика с максимальной мантиссой | | Maxsols=n | Разыскивается n решений (только для полиномов) | | а.. b или x=a..b | Задан промежуток [а, b], на котором разыскивается решение (во второй форме задания этой опции х обозначает имя неизвестной переменной в уравнении) | | |
Для произвольного уравнения по умолчанию эта функция находит одно решение, но для полиномов определяются все действительные корни. Для нахождения всех корней полинома, включая комплексные, следует задать опцию complex. В примере 4 показано использование команды численного решения уравнений. Пример 4. Численное решение уравнений. > eq:=x^4+2*x^2-2=0; > s:=fsolve(eq,x); > s:=fsolve(eq,x,complex); > fsolve(ln(sin(x))=0,x); > fsolve(ln(sin(x))=0,x,x=2..infinity); > fsolve(ln(sin(x))=0,x,x=15..infinity); Здесь также показано, как можно последовательно находить корни произвольного уравнения, задавая интервал изменения неизвестной величины с учетом полученного решения на предыдущем шаге нахождения корня (последние три команды). 4. Другие команды решения уравнений Кроме универсальных команд solve () и fsolve () решения уравнений и систем уравнений, система Maple содержит специализированные команды, предназначенные либо для решения определенного класса уравнений, либо нахождения решений в заданном числовом поле. Здесь эти команды описаны предельно кратко для того, чтобы читатель знал об их существовании. Более подробно об этих командах можно узнать в справочной системе Maple, выполнив команду ?имя_команды, где вместо параметра имя_команды следует подставить ее действительное имя. Команда isolve () ищет все целые решения уравнений. Если в уравнении задано несколько неизвестных, то строится решение относительно всех заданных неизвестных. Пример 5. Целочисленное решение уравнений. > isolve({(x+1)*(x-1/2)*(x-2)=0}); > isolve({5*x+6*y=1}); В решении последнего уравнения примера 5 использована целочисленная переменная _Z1 сгенерированная Maple. Команда msolve () также ищет целочисленные решения уравнения, но только по модулю, заданному вторым параметром. Пример 6. Целочисленное решение уравнений по заданному целому модулю. > solve({3*x-4*y=1,7*x+y=2}); > msolve({3*x-4*y=1,7*x+y=2},11); > msolve({3^n=4},11); Команда rsolve () строит общее решение рекуррентного уравнения, используя начальные значения, если они заданы, или через их символьные обозначения, если они не заданы. Пример 7. Решение рекуррентных уравнений. > rsolve({F(n+2)=F(n+1)+F(n)},F(n)); # Без начальных условий > rsolve({F(n+2)=F(n+1)+F(n),F(0)=1,F(1)=1},{F(n)}); # Используя заданные начальные условия 5. Решение неравенств Команда solve () используется для решения неравенств и систем неравенств в области вещественных чисел точно так же, как и для решения уравнений и систем уравнений. Ответ выражается либо в виде множества неравенств, либо через функции RealRange () и Open (). Первая определяет замкнутый отрезок действительных чисел, а вторая используется для указания того, что граничная точка не входит в построенное решение. Для задания решения в виде множества, следует задать в виде множества либо само неравенство, либо неизвестную, относительно которой ищется решение. Если этого не сделать, то ответ будет получен с использованием указанных функций определения действительных отрезков. Пример 8. Решение неравенств. > solve((x+3)/(4-x)>4,x); > solve((x+3)/(4-x)>4,{x}); > solve(log[1/2](log[2](x^2-8))>=-1); > solve({log[1/2](log[2](x^2-8))>=-1}); В примере 8 решены два неравенства, для каждого из которых построено решение в виде множества и в форме действительных интервалов. Литература 1. Говорухин В.Н., Цибулин В.Г. Введение в Maple. Математический пакет для всех. - М.: Мир, 1997. - 208 с. 2. Дьяконов В.П. Математическая система Maple V. - М.: Издательство “Солон”,1998. 3. Двайт Г.Б. Таблицы интегралов и другие математические формулы. - М.: Наука. Главная редакция физико-математической литературы, 1983. - 176 с. 4. Матросов А.В. Maple 6. Решение задач высшей математики и механики. - СПб.:БХВ - Петербург, 2001.- 528 с. 5. Манзон Б.М. Maple V Power Edition - М.: Информационно-издательский дом “Филинъ”,1998г.
|