Реферат: Разложение рациональной дроби на простейшие.

Федеральное агентствопо образованию

Государственноеобщеобразовательное учреждение

высшегопрофессионального образования

БашкирскийГосударственный Университет

Нефтекамский филиал

Кафедра МиПОВМ

Курсовая работа

Тема: Разложение рациональной дроби на простейшие.

                                                                                           

                                                                                    Выполнилстудент

                                                                      группыМ-31

                                                                              Остапов А. Б.

                                                            Принял:

ВильдановА. Н.

Нефтекамск2006

<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">
Содержание.

·<span Times New Roman"">       

Введение.

·<span Times New Roman"">       

Часть 1. “Теоретическаячасть к курсовой работе”.

·<span Times New Roman"">       

Часть 2. “Практическаячасть к курсовой работе”.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

§ “Реализацияметода простых коэффициентов в Maple”.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

§ “Реализацияметода простых коэффициентов на Delphi”.

·<span Times New Roman"">       

Заключение.

·<span Times New Roman"">       

Список литературы.

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Verdana",«sans-serif»">

<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">
Введение.

Этотвопрос уже много раз изучен и рассмотрен. Казалось бы, что может быть проще длясовременного математика, чем разложить рациональную дробь на простейшие, развечто элементарные алгебраические операции. Однако, применение этого методасущественно облегчает жизнь – не будь метода – некоторые задачи было бы оченьпроблематично решить, а некоторые вообще не решались.

Основныеоперации, в которых я применял этот метод, были:

а)Разложение рациональной дроби на простейшие с целью дальнейшего интегрированияполучившихся элементарных дробей (Матем. анализ);

б)Разложение рациональной дроби на простейшие для использования в процессепреобразования Лапласа, что иногда серьезно ускоряет нахождение решенияразличных уравнений и систем уравнений в частных производных (Курс уравнениймат. физики).

Разложение– это необходимость. Без нее нельзя обходиться, тем более на современном этаперазвития математической мысли. Об этом и пойдет речь в моей курсовой работе.

<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">
<span Times New Roman",«serif»">Часть 1.

“Теоретическаячасть к курсовой работе”.

Рациональнойдробью назовем отношение двух алгебраических многочленов с вещественнымикоэффициентами:

<img src="/cache/referats/23994/image001.gif" v:shapes="_x0000_i1025">

Дробь называется правильной,если степень P(x) меньше степени Q(x), и неправильной впротивном случае. Простейшей называется правильная дробь,знаменатель которой представляет собой неприводимый (значит не имеющий корней)над некоторым полем (в нашем случае — поле действительных чисел) многочлен.

Для простых(правильных) дробей с действительными коэффициентами справедлива следующаятеорема о разложении на сумму простейших:

Пусть (1) —правильная рациональная дробь с действительными коэффициентами, знаменателькоторой имеет вид:

<img src="/cache/referats/23994/image002.gif" v:shapes="_x0000_i1026">

тогда для этой дроби справедливо следующее разложение на сумму простейшихдробей:

<img src="/cache/referats/23994/image003.gif" v:shapes="_x0000_i1027">

гдеиндексированные переменные B,M, N — некоторые вещественные постоянные (может быть, равные нулю).

Для определения конкретных значений сих коэффициентовследует привести равенство к общему знаменателю и сравнить коэффициенты приодинаковых степенях x в числителе. Т.е. по сути дела решить систему линейныхуравнений. Используется эта конструкция по большей части при вычисленииинтегралов, т.к. таким образом интеграл произвольной рациональной функциисводится, по сути дела, к сумме табличных интегралов.

Рациональнойдробью R(x)называетсядробь, числителем и знаменателем которой являются многочлены, т. Е. всякаядробь вида:

<img src="/cache/referats/23994/image005.gif" v:shapes="_x0000_i1028">

Если степень многочлена в числителе больше или равнастепени многочлена в знаменателе (n≥m), то дробь называется неправильной. Если степень многочлена в числителе меньше степенимногочлена в знаменателе (n≤m), то дробь называется правильной.

Всякую неправильную рациональную дробь можнопредставить в виде суммы многочлена (целой части) и правильной рациональнойдроби (это представление достигается путем деления числителя на знаменатель поправилу деления многочленов):

<img src="/cache/referats/23994/image007.gif" v:shapes="_x0000_i1029">

где R(x)–многочлен-частное (целая часть) дроби <img src="/cache/referats/23994/image009.gif" v:shapes="_x0000_i1030">Pn(x)– остаток(многочлен степени n < m).

Интегрирование простейших дробей. Простейшей дробью называется правильная рациональнаядробь одного из следующих четырех типов:

1) <img src="/cache/referats/23994/image011.gif" v:shapes="_x0000_i1031">

2) <img src="/cache/referats/23994/image013.gif" v:shapes="_x0000_i1032"> (n≥2);

3) <img src="/cache/referats/23994/image015.gif" v:shapes="_x0000_i1033">

4) <img src="/cache/referats/23994/image017.gif" v:shapes="_x0000_i1034"> (n≥2).

Здесь А, a, p, q, M, N–действительные числа, а трехчлен не имеет действительных корней, т. е. p2/4-q< 0.

Простейшие дроби первого и второго типов интегрируютсянепосредственно с помощью основных правил интегрального исчисления:

<img src="/cache/referats/23994/image019.gif" v:shapes="_x0000_i1035">

<img src="/cache/referats/23994/image021.gif" v:shapes="_x0000_i1036">

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

<img src="/cache/referats/23994/image023.gif" v:shapes="_x0000_i1037">

<img src="/cache/referats/23994/image025.gif" v:shapes="_x0000_i1038">

<img src="/cache/referats/23994/image027.gif" v:shapes="_x0000_i1039">

Интегрирование рациональных дробей.

Разложениерациональной дроби на простейшие дроби. Всякую правильную рациональную дробь <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1040"> можно представить ввиде суммы конечного числа простейших рациональных дробей первого – четвертоготипов. Для разложения <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1041"> на простейшие дробинеобходимо разложить знаменатель Qm(x)налинейные и квадратные множители, для чего надо решить уравнение:

<img src="/cache/referats/23994/image031.gif" v:shapes="_x0000_i1042">  — (5)

Теорема.Правильную рациональную дробь<img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1043">где <img src="/cache/referats/23994/image034.gif" v:shapes="_x0000_i1044">можно единственнымобразом разложить на сумму простейших дробей:

<img src="/cache/referats/23994/image036.gif" v:shapes="_x0000_i1045">

<img src="/cache/referats/23994/image038.gif" v:shapes="_x0000_i1046">  — (6)

(A1, A2, …, Ak, B1, B2, …, B1, M1, N1, M2, M2, …, Ms, Ns– некоторыедействительные числа).

Методнеопределенных коэффициентов. Сутьметода неопределенных коэффициентов состоит в следующем. Пусть дано разложениеправильной рациональной дроби <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1047"> по формуле (6) напростейшие дроби с неопределенными коэффициентами. Приведем простейшие дроби кобщему знаменателю Qm(x) и приравняеммногочлен, получившийся в числителе, многочлену Pn(x).

Методчастных значений.При нахождениинеопределенных коэффициентов вместо того, чтобы сравнивать коэффициенты приодинаковых степенях х, можно датьпеременной х несколько частныхзначений (по числу неопределенных коэффициентов) и получить таким образомсистему уравнений относительно неопределенных коэффициентов. Особенно выгодноприменять этот метод в случае, корни знаменателя рациональной дроби <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1048"> просты идействительны. Тогда оказывается удобным последовательно полагать равнымкаждому из корней знаменателя.

 

    Правило интегрирования рациональных дробей.Для того чтобы проинтегрировать рациональнуюдробь, необходимо выполнить следующие действия:

1)<span Times New Roman"">                    

если рассматриваемая рациональная дробь <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1049">  — неправильная (k≥m),представить ее в виде суммы многочлена и правильной рациональной дроби:

<img src="/cache/referats/23994/image040.gif" v:shapes="_x0000_i1050">

где n< m; R(x) –многочлен;

2)<span Times New Roman"">                    

если рассматриваемая рациональная дробь <img src="/cache/referats/23994/image029.gif" v:shapes="_x0000_i1051">  — правильная (n< m),представить ее в виде суммы простейших рациональных дробей по формуле (6);

3)<span Times New Roman"">                    

интеграл от рациональной дроби представить в видесуммы интегралов от целой части и от соответствующих простейших дробей ивычислить эти интегралы.

Интегрированиедробно-рациональных функций.

Пусть <img src="/cache/referats/23994/image041.gif" v:shapes="_x0000_i1052">и <img src="/cache/referats/23994/image042.gif" v:shapes="_x0000_i1053">некоторые полиномы степени m и n

<img src="/cache/referats/23994/image043.gif" v:shapes="_x0000_i1054">

<img src="/cache/referats/23994/image044.gif" v:shapes="_x0000_i1055">

Функция вида

<img src="/cache/referats/23994/image045.gif" v:shapes="_x0000_i1056">

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

При m<n эта рациональная дробьназывается правильной.

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

Случай 1Подынтегральная функция имеет вид

<img src="/cache/referats/23994/image046.gif" v:shapes="_x0000_i1057">,

где все <img src="/cache/referats/23994/image047.gif" v:shapes="_x0000_i1058">различны и m<n, т.е. рациональная дробь является правильной.

Основной результат который мы приведём бездоказательства, утверждает, что f(x) в этом случае можно представить в виде:

<img src="/cache/referats/23994/image048.gif" v:shapes="_x0000_i1059">

Слагаемые вида <img src="/cache/referats/23994/image049.gif" v:shapes="_x0000_i1060">называются простейшими, а само приведённое разложение называется“разложением рациональной дроби на простейшие”.

Рассмотрим вопрос о нахождениикоэффициентов <img src="/cache/referats/23994/image050.gif" v:shapes="_x0000_i1061">. Рассмотрим, например, вычисления <img src="/cache/referats/23994/image051.gif" v:shapes="_x0000_i1062">. Для этого

а) Умножим обе части разложения напростейшие на <img src="/cache/referats/23994/image052.gif" v:shapes="_x0000_i1063">

<img src="/cache/referats/23994/image053.gif" v:shapes="_x0000_i1064">

б) И положим x=b1. Так как при этом(x-b1)=0, то получи

<img src="/cache/referats/23994/image054.gif" v:shapes="_x0000_i1065">

(символ <img src="/cache/referats/23994/image055.gif" v:shapes="_x0000_i1066">означает, что в написанном слева выражении надо положить <img src="/cache/referats/23994/image056.gif" v:shapes="_x0000_i1067">)

Аналогично можно найти и все остальные <img src="/cache/referats/23994/image050.gif" v:shapes="_x0000_i1068">. Этот метод получил название “метода вычёркивания “. Онформулируется так: чтобы вычислить коэффициент <img src="/cache/referats/23994/image050.gif" v:shapes="_x0000_i1069">нужно

а) в выражении для f(x) вычеркнутьсомножитель <img src="/cache/referats/23994/image057.gif" v:shapes="_x0000_i1070">

б) в оставшемся выражении положить <img src="/cache/referats/23994/image058.gif" v:shapes="_x0000_i1071">.

Если все <img src="/cache/referats/23994/image059.gif" v:shapes="_x0000_i1072">найдены, то дальнейшее очень просто

<img src="/cache/referats/23994/image060.gif" v:shapes="_x0000_i1073">и получившиеся интегралы 1 типа легко вычисляются

Пример:Вычислить

<img src="/cache/referats/23994/image061.gif" v:shapes="_x0000_i1074">

а) Разложим подынтегральную функцию напростейшие. Имеем

<img src="/cache/referats/23994/image062.gif" v:shapes="_x0000_i1075">

<img src="/cache/referats/23994/image063.gif" v:shapes="_x0000_i1076">

<img src="/cache/referats/23994/image064.gif" v:shapes="_x0000_i1077">

<img src="/cache/referats/23994/image065.gif" v:shapes="_x0000_i1078">

Поэтому <img src="/cache/referats/23994/image066.gif" v:shapes="_x0000_i1079">

б)Интегрируем

<img src="/cache/referats/23994/image067.gif" v:shapes="_x0000_i1080"> 

Случай 2.Подынтегральная функцияимеет вид

<img src="/cache/referats/23994/image068.gif" v:shapes="_x0000_i1081">

<img src="/cache/referats/23994/image069.gif" v:shapes="_x0000_i1082">т.е. сомножитель вида <img src="/cache/referats/23994/image070.gif" v:shapes="_x0000_i1083">даёт группу слагаемых вида

<img src="/cache/referats/23994/image071.gif" v:shapes="_x0000_i1084">

Если теперь найти все коэффициенты Bij , то метод разложения приведёт к интегралам 1и 2 типов которые легко вычисляются.

Для нахождения коэффициентов Bijможно использовать такназываемый метод неопределённых коэффициентов.

Его алгоритм следующий.

а) пишут разложение рациональной дроби напростейшие с неопределёнными коэффициентами ;

б) написанное разложение на простейшиеприводят к общему знаменателю и вновь сворачивают в правильную рациональнуюдробь ;

в) приравнивают коэффициенты приодинаковых степенях  x в числителяхисходной дроби и получившейся дроби;

г) решают полученную систему линейныхуравнений и определяют Bij.

Продемонстрируем этот метод на примере .

Пример.Вычислить.

<img src="/cache/referats/23994/image072.gif" v:shapes="_x0000_i1085">

продемонстрируем алгоритм по пунктам

а) пишем разложение на простейшие снеопределёнными коэффициентами

<img src="/cache/referats/23994/image073.gif" v:shapes="_x0000_i1086"><img src="/cache/referats/23994/image074.gif" v:shapes="_x0000_i1087">

б) приводим разложение на простейшие кобщему знаменателю.

<img src="/cache/referats/23994/image075.gif" v:shapes="_x0000_i1088">

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

<img src="/cache/referats/23994/image076.gif" v:shapes="_x0000_i1089">

в) сравнивая коэффициенты при одинаковыхстепенях x  y исходной функции иполучившегося выражения, получим

<img src="/cache/referats/23994/image077.gif" v:shapes="_x0000_i1090">

Решая эту систему, получим

A=2 B=3 C=-1 D=2

так что

<img src="/cache/referats/23994/image078.gif" v:shapes="_x0000_i1091">

г) интегрируем

<img src="/cache/referats/23994/image079.gif" v:shapes="_x0000_i1092">

<img src="/cache/referats/23994/image080.gif" v:shapes="_x0000_i1093">

Комбинированный метод

Метод неопределённых коэффициентовдостаточно трудоёмок.Однако заметим что коэффициенты при старших степенях <img src="/cache/referats/23994/image081.gif" v:shapes="_x0000_i1094">, т.е. при <img src="/cache/referats/23994/image082.gif" v:shapes="_x0000_i1095">можно определять методом вычёркивания.

Поэтому реально комбинируют оба этих метода: коэффициенты при <img src="/cache/referats/23994/image082.gif" v:shapes="_x0000_i1096">определяют методом вычёркивания, а оставшиеся – методомнеопределённых коэффициентов.

Пример. В том же самом примере

<img src="/cache/referats/23994/image083.gif" v:shapes="_x0000_i1097">

находим

<img src="/cache/referats/23994/image084.gif" v:shapes="_x0000_i1098">

<img src="/cache/referats/23994/image085.gif" v:shapes="_x0000_i1099">

так что

<img src="/cache/referats/23994/image086.gif" v:shapes="_x0000_i1100">,

приводя к общему знаменателю получим

<img src="/cache/referats/23994/image087.gif" v:shapes="_x0000_i1101">

<img src="/cache/referats/23994/image088.gif" v:shapes="_x0000_i1102">.

Случай 3.Подынтегральная функция имеет вид

<img src="/cache/referats/23994/image089.gif" v:shapes="_x0000_i1103">

 Разложениеэтой функции на простейшие имеет вид.

<img src="/cache/referats/23994/image090.gif" v:shapes="_x0000_i1104"><img src="/cache/referats/23994/image091.gif" v:shapes="_x0000_i1105">

т.е. от сомножителя <img src="/cache/referats/23994/image092.gif" v:shapes="_x0000_i1106">идёт слагаемое вида <img src="/cache/referats/23994/image093.gif" v:shapes="_x0000_i1107">. Оно при интегрировании даст интеграл третьего типа.

Коэффициенты при старших степенях <img src="/cache/referats/23994/image094.gif" v:shapes="_x0000_i1108">, т.е. при <img src="/cache/referats/23994/image095.gif" v:shapes="_x0000_i1109">находятся методом вычёркивания, остальные – методом неопределённыхкоэффициентов.

Пример. Вычислить

<img src="/cache/referats/23994/image096.gif" v:shapes="_x0000_i1110">

Так как <img src="/cache/referats/23994/image097.gif" v:shapes="_x0000_i1111">, то <img src="/cache/referats/23994/image098.gif" v:shapes="_x0000_i1112">

<img src="/cache/referats/23994/image099.gif" v:shapes="_x0000_i1113">находим методом вычёркивания

<img src="/cache/referats/23994/image100.gif" v:shapes="_x0000_i1114">

N и M находим методом неопределённыхкоэффициентов

<img src="/cache/referats/23994/image101.gif" v:shapes="_x0000_i1115">

Так как это должно быть равно <img src="/cache/referats/23994/image102.gif" v:shapes="_x0000_i1116">то имеем

<img src="/cache/referats/23994/image103.gif" v:shapes="_x0000_i1117">при <img src="/cache/referats/23994/image104.gif" v:shapes="_x0000_i1118">и при <img src="/cache/referats/23994/image105.gif" v:shapes="_x0000_i1119">)

Отсюда <img src="/cache/referats/23994/image106.gif" v:shapes="_x0000_i1120">

<img src="/cache/referats/23994/image107.gif" v:shapes="_x0000_i1121">(В последнем интеграле N=2, M=1, p=1, q=1).

Общий случай правильной рациональной дробимы рассматривать не будем.

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

Пример.Вычислить <img src="/cache/referats/23994/image108.gif" v:shapes="_x0000_i1122">

Решение. Делим полиномы друг на друга

<img src="/cache/referats/23994/image109.gif" v:shapes="_x0000_i1123">

<img src="/cache/referats/23994/image110.gif" v:shapes="_x0000_i1124"><img src="/cache/referats/23994/image111.gif" v:shapes="_x0000_i1125"><img src="/cache/referats/23994/image112.gif" v:shapes="_x0000_i1126">

<img src="/cache/referats/23994/image113.gif" v:shapes="_x0000_i1127"><img src="/cache/referats/23994/image114.gif" v:shapes="_x0000_i1128">

<img src="/cache/referats/23994/image115.gif" v:shapes="_x0000_i1129"><img src="/cache/referats/23994/image116.gif" v:shapes="_x0000_i1130">

<img src="/cache/referats/23994/image117.gif" v:shapes="_x0000_i1131"><img src="/cache/referats/23994/image118.gif" v:shapes="_x0000_i1132">

<img src="/cache/referats/23994/image117.gif" v:shapes="_x0000_i1133"><img src="/cache/referats/23994/image119.gif" v:shapes="_x0000_i1134">

1

Таким образом

<img src="/cache/referats/23994/image120.gif" v:shapes="_x0000_i1135">

и поэтому <img src="/cache/referats/23994/image121.gif" v:shapes="_x0000_i1136">

Последний интеграл уже вычислен выше.

<span Times New Roman",«serif»"><span Times New Roman",«serif»; mso-bidi-font-family:Arial">Часть 2.

“Практическая часть к курсовой работе”.

§  “Реализация метода простых коэффициентов в Maple”.

Дляопределения конкретных значений сих коэффициентов следует привести равенство кобщему знаменателю и сравнить коэффициенты при одинаковых степенях xв числителе. Т.е. по сути дела решить системулинейных уравнений. Используется эта конструкция по большей части привычислении интегралов, т.к. таким образом интеграл произвольной рациональнойфункции сводится, по сути дела, к сумме табличных интегралов. Этакая лекция помат. анализу получилась.

Сразускажу тем, кому вообще лень что-то делать по этому поводу. Mapleделает все, что мы сейчас напишем, одной операцией:

> сonvert(rfun, parfrac, x);

Ивсе. Спросите:зачем этот велосипед? Цель — не конечный результат, а идея и методы еереализации на Maple. Гораздо интереснееполучается посмотреть на целую программу, реально работающий универсальныйалгоритм, делающий конкретно нечто, чем просто читать обрывки help-ов под каждую команду языка на английском, не понимаяв принципе, как это все связать воедино. Ясное дело, профессионалу,прочувствовавшему Maple, будет неинтересно читатьподробные объяснения по поводу использованных функций языка, однако дляизучающего систему “не совсем новичка”-математика это будет крайне полезно.Постараюсь в процессе показать читателю свое разумение философии пакета.

Каквсегда первый вопрос: с чем работаем? Действительно, для отладки алгоритманеобходимо создать хоть несколько рациональных дробей. Руками писать неудобно,поэтому даже этот этап “сгрузим” на машину.

> restart:

> readlib(randomize):

(а) > randomize():

(б) > d1:= rand(1..3):

> d2:= rand(2..7):

(в) > px:= randpoly(x,degree=21, coeffs=rand(-7..7), terms = 9):

(г) > for i from 1 to 3 do

> q[i]:= randpoly(x,degree=1, coeffs=rand(-7..7))^d1():

> q[i+3]:= (x^2 + x +d2())^d1():

> od:

(д) > rfun:=px/product(q[k], k=1..6);

Разберемся,что тут мы с вами наворотили. Итак, сначала подробно остановимся на генерациислучайных целых чисел в системе Maple. (а) —здесь мы заставляем генератор случайных чисел привязаться к системному времени.Если этого не сделать, то генерируемая последовательность будет каждый разодинаковой. Вызов просто функции rand() безаргументов возвратит двенадцатизначное случайное натуральное число. Вбольшинстве случаев это ну совсем неудобно. Можно это дело исправить, передаваяфункции один аргумент: rand(n), что приведет к генерации числа из полуинтервала[0, n). Зачастую и этого недостаточно для решенияпоставленной задачи. Можно еще более сузить “область значений” — (б). Только вэтом случае в d1 вернется отнюдь не число, ассылка на процедуру, вызов которой приведет к генерации случайного числа иззаданного отрезка. Произвольный полином максимальной степени 21 степени скоэффициентами из отрезка [-7,7] и девятью членами получим в (в). Дальшеинтереснее — нужно изготовить знаменатель. “Сделаем” его в виде произведениятрех многочленов первой, и трех — второй степени. Причем по определениюмногочлены второй степени не должны иметь действительных корней. Реализующаяэту задачу конструкция (г) очевидна и в пояснениях не нуждается. И наконец,собрав числитель и знаменатель в одно целое, в (д) получим нашу рациональнуюдробь. Выражение product(q[k], k=1..6); является формальным переводом на язык Mapleзаписи:

<span Verdana",«sans-serif»"><img src="/cache/referats/23994/image122.gif" v:shapes="_x0000_i1137">

Знаменательполученной функции таким образом уже будет разложен на множители. Для тогочтобы задача приняла более правдоподобный характер, вместо (д) можнореализовать следующее:

> rfun:=px/expand(product(q[k], k=1..6), x);

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

Еслизапустить все написанное, исключив строку (а) (генератор случайных чисел будетстандартно инициализирован), получится в точности:

<span Verdana",«sans-serif»"><img src="/cache/referats/23994/image123.gif" v:shapes="_x0000_i1138">

Заметили?В знаменателе появилась “не заказанная” шестая степень. И вместо шестимножителей получилось только пять. Ну и что? Просто два “произвольных”многочлена полностью совпали (и по степеням тоже). На что только ни способенгенератор случайных чисел в Maple! Результатраскрытия можно посмотреть на рисунке — там он выглядит куда меньше.

Второйэтап работы заключается в определении характера правильности дроби и выделениицелой части (если нужно), т.е. представлению ее в виде:

<span Verdana",«sans-serif»"><img src="/cache/referats/23994/image124.gif" v:shapes="_x0000_i1139">

гдеZ(x) — целаячасть, а R(x) не делится на Q(x). Сделаем этоследующим образом:

>fracpart:= rem(numer(rfun), denom(rfun), x, 'zpart');

Заведемпеременную fracpartи zpartсоответственно для дробной и для целой части рациональной дроби.Процедура-функция remвозвращает остаток от делениямногочленов как основной результат. Третий (необязательный) параметр — имяпеременной, “в которую будет вычислена” целая часть. Совершенно аналогичнодействует функция quo, где основным результатомявляется целая часть от деления. Здесь функции numerи denomсоответственно дают доступ к числителю и знаменателю дроби.

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

>denomx:= factor(denom(rfun));

<span Verdana",«sans-serif»"><img src="/cache/referats/23994/image125.gif" v:shapes="_x0000_i1140">

Разделимтекущую подзадачу на два этапа: “изготовление” списка знаменателей будущихпростейших дробей и запись самого разложения. Для реализации первого этапа нам понадобитсянаписать процедуру-функцию, которая бы занималась преобразованием выражениявида Anвупорядоченный список вида [A, A2, A3, ..., An].

(а) > transpol:= proc (p:polynom) local j;

(б) > if degree(p, x) <=1 then

> p;

> else

(в) > if not type(op(2, p),numeric) then

> p;

> else

(г) > seq(op(1, p)^p, j=1…op(2, p));

> fi;

> fi;

> end:

В(а) объявим имя функции, тип и количество передаваемых параметров, а такжелокальные переменные в поле local.Результатом работы функции будет результат последней выполненной операции.Теперь опишем сам алгоритм. Если была передана константа либо многочлен первойстепени, то вернется он же — (б). Дальше получим и проанализируем тип объекта op(2, p). Здесь яобращаюсь к многочлену pкак к списку. Mapleпозволяет работать почти с любым из своих объектовкак со списком. После проверки (б) у нас останется лишь три варианта для p: (x2 +bx+c), (x2 +bx+c) n, (ax+b) n. Их op(2, p) будет соответственно равен x2, n, n. В первом случае (наш “op” — не число) придется возвратить параметр впервозданном виде — это просто квадратный неприводимый трехчлен, а в остальных— осуществляем разложение (г) — формируем нужную последовательность. Далееприготовим список знаменателей будущих простейших дробей, используя только чтонаписанное:

> ds:= [seq(transpol(op(k,denomx)), k=1… nops(denomx))];

Внашем конкретном случае результат с точностью до расположения элементов спискабудет выглядеть следующим образом:

ds:= [2, 2x+3, 5x-4, 4x-1,(4x-1) 2, (4x-1) 3, x 2 +x+2, x 2 +x+4, (x 2 +x+4) 2, ...,(x 2 +x+4) 6 ]

Записатьразложение с неопределенными коэффициентами, имея такую прелесть, ничего нестоит:

> rxn:= 0:

> lastvar:= 1:

> for i from 1 to nops(ds)do

(а) > if degree(op(1, op(i,ds)), x) = 1 then

(б) > rxn:= rxn +(A[lastvar])/op(i, ds);

> else

(в) > rxn:= rxn +(A[lastvar]*x+A[lastvar + 1])/op(i, ds);

> lastvar:= lastvar + 1;

> fi;

> lastvar:= lastvar + 1;

>od:

Теперьвсе сначала и по порядку. Заведем переменную rxn, в которую после запишем разложение. Счетчик lastvarуже использованных индексов коэффициентов установим взначение 1 (следующий, не использованный индекс). Далее, пробегая по списку dsзнаменателей будущих простейших дробей, анализируемих степень. Собственно сама реализация такого анализа (а) может показатьсядовольно странной. Со встроенной функцией degreeвсе понятно — она возвратит степень многочленаотносительно переменной, переданной в качестве второго параметра. Что же значитзапись op(1, op(i, ds))? Так каквариантов здесь только два, то их и рассмотрим. Если op(i, ds) — выражение вида (x2 +bx+c) nлибо (x+d) n, то op(1, op(i, ds)) вернет то, что находится в скобках. В другом случае— x2 +bx+cлибо x+d(скобок нет) — такая композиция возвратит высший членмногочлена (он записан в лексикографическом виде). Таким образом реализуетсяопределение степени знаменателя без учета кратности. А дальше, в зависимостиот этого формируется числитель степени на единицу меньшей. За что люблю Maple, так это за (б) и (в). Ну где вы видели, чтоб воттак “на ходу” можно было “собрать” переменную? А здесь возможно и такое.Естественно, использовав очередной индекс, необходимо увеличить значениесчетчика.

Итак,нечто весьма похожее на разложение, приведенное в теореме, мы получили. Теперьдело за малым — нужно вычислить эти самые Ak-ые. Сделаемэто так: приведем полученное разложение к общему знаменателю, разберемся сподобными и соберем коэффициенты перед xi, где i= 0… 21 (в нашем случае) в числителе:

>f:= collect(numer(rxn), x):

> for i from 0 to degree(f,x) do

> cundef[i]:= coeff(f, x,i):

>od:

Функцияnumer, вернув числитель, “по дороге” приведет rxnк общему знаменателю, collectкак раз и повыносит за скобки xi. Впеременные (не массив!) cundefiвыделим с помощью функции coeff(третий параметр — степень переменной, остальные дваочевидны) эти самые коэффициенты. Их количество будет равно степени fплюс один (нулевая). Зачем это надо? А что у нас во fracpart? Именно — то же самое, но коэффициенты определенные.Что делаем? Составляем систему линейных уравнений и решаем относительно наших Ak-ых.Единственность решения такой системы доказана до нас, посему спокойно пишемдальше:

> b:= collect(fracpart, x):

(а) > for i from 0 todegree(f, x) do<

еще рефераты
Еще работы по математике