Читать реферат по математике: "Разложение рациональной дроби на простейшие" Страница 5

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

определение степени знаменателя без учета кратности . А дальше, в зависимости от этого формируется числитель степени на единицу меньшей. За что люблю Maple, так это за (б) и (в) . Ну где вы видели, чтоб вот так “на ходу” можно было “собрать” переменную? А здесь возможно и такое. Естественно, использовав очередной индекс, необходимо увеличить значение счетчика.

Итак, нечто весьма похожее на разложение, приведенное в теореме, мы получили. Теперь дело за малым — нужно вычислить эти самые A k -ые. Сделаем это так: приведем полученное разложение к общему знаменателю, разберемся с подобными и соберем коэффициенты перед x i , где 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 как раз и повыносит за скобки x i . В переменные (не массив!) cundef i выделим с помощью функции coeff (третий параметр — степень переменной, остальные два очевидны) эти самые коэффициенты. Их количество будет равно степени f плюс один (нулевая). Зачем это надо? А что у нас во fracpart? Именно — то же самое, но коэффициенты определенные. Что делаем? Составляем систему линейных уравнений и решаем относительно наших A k -ых. Единственность решения такой системы доказана до нас, посему спокойно пишем дальше:> b:= collect(fracpart, x):

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

> cdef[i]:= coeff(b, x, i):

> od:Снова собрали в cdef i коэффициенты при x i , но уже из fracpart (определенные). Внимание на (а) — их должно быть столько же, сколько и в первом наборе, иначе система не получится. Сформируем набор переменных ( A k- ые), относительно которых будем решать нашу систему и ее саму:> vars:= {seq(A[k], k=1..lastvar-1)}:

> eqns:= {seq(cundef[i]=cdef[i], i=0.. degree(f, x))}:

> assign(solve(eqns, vars));

Последняя строка заставит Maple пошевелить мозгами, решить нашу систему относительно наших переменных. Функция solve требует два параметра: первый — это набор уравнений, второй — набор переменных. Результат работы будет представлен в виде опять же набора равенств. На этом этапе присвоения переменным, относительно которых решалась система, вычисленных значений не происходит. Чтобы это все-таки сделать, воспользуемся функцией assign в качестве параметра, которой передается набор равенств. Таким образом вычислены наши неопределенные A k -ые. Так как rxn через них выражается, то на результат можно посмотреть так (см. рисунок): > zpart + rxn;Это и есть разложение нашей rfun на сумму простейших дробей. > simplify(zpart + rxn — rfun); осуществит проверку тождественности (функция simplify как можно дальше упростит выражение), возвратив 0. Другого и не должно быть, в противном случае алгоритм сработал некорректно, чего я от него никак не жду.

Приведенный пример лишний раз доказывает, что система Maple никак не является просто символьным калькулятором. В отличие от MathCad, где возможности программирования представлены не на высшем уровне, она позволяет реализовывать самые буйные фантазии по части построения сложнейших алгоритмов.

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

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Spin, StdCtrls, Grids, MatUtilits;

type

signs = -1..1;

polinom = array of real;

fpolinoms = array of polinom;

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Edit1: TEdit;

StringGrid2: TStringGrid;

Edit2: TEdit;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Button1:


Интересная статья: Основы написания курсовой работы