Использование модуля LinAlg и LinearAlgebra для решения основных задач аналитической геометрии

Общие сведения о пакетах, помогающих решать задачи линейной алгебры. Характеристика пакета Linalg, его главные функции и принципы применения. Аналитическая геометрия на плоскости, построение графиков функций. Порядок решения систем линейных уравнений.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.01.2014
Размер файла 231,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

Факультет Естественных наук, Нанотехнологий и Радиоэлектроники

Кафедра Высшей и Прикладной Математики

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

по программированию

«Использование модуля LinAlg и LinearAlgebra для решения основных задач аналитической геометрии»

Пенза 2010

Содержание

Введение

1. Общие сведения о пакетах, помогающих решать задачи линейной алгебры

2. Пакет Linalg

3. Аналитическая геометрия на плоскости

4. Построение графиков функций

5. Пакет LinearAlgebra

6. Решение систем линейных уравнений (СЛУ)

Заключение

Список используемой литературы

linalg плоскость линейный алгебра

Введение

Системы компьютерной алгебры (СКА) находят все более широкое применение во многих областях науки: таких как математика, физика, химия, информатика и т.д., техники, технологии, образовании и т.д. СКА типа Maple, Mathematica, MuPAD, Macsyma, Reduce, Axiom и Magma становятся все более популярными для решения задач преподавания математически ориентированных дисциплин, как в научных исследованиях, так и в промышленности. Данные системы являются мощными инструментами для ученых, инженеров и педагогов. Исследования на основе СКА-технологии, как правило, сочетают алгебраические методы с продвинутыми вычислительными методами. В этом смысле СКА - междисциплинарная область между математикой и информатикой, в которой исследования сосредотачиваются как на разработке алгоритмов для символьных (алгебраических) вычислений и обработки на компьютерах, так и на создании языков программирования и программной среды для реализации подобных алгоритмов и базирующихся на них проблем различного назначения.

Исследователи используют пакет Maple как важный инструмент при решении задач, связанных с их исследованиями. Пакет идеален (по нынешним понятиям) для формулировки, решения и исследований различных математических моделей. Его алгебраические средства существенно расширяют диапазон проблем, которые могут быть решены на качественном уровне. Педагоги в средних школах, колледжах и университетах обновляют традиционные учебные планы, вводя задачи и упражнения, которые используют диалоговую математику и физику Maple. Тогда как студенты могут сконцентрироваться на важных концепциях, а не на утомительных алгебраических вычислениях и преобразованиях. Наконец, инженеры и специалисты в промышленности используют Maple как эффективный инструмент, заменяющий много традиционных ресурсов типа справочников, калькуляторов, редакторов, крупноформатных таблиц и языков программирования. Эти пользователи легко решают весьма широкий диапазон математически ориентированных задач, разрабатывая проекты и объединяя результаты (как числовые, так и графические) их вычислений в профессиональные отчеты довольно высокого качества.

Наконец, Maple имеет по ряду показателей более развитые инструментальные средства (например, для решения дифференциальных уравнений в частных производных, предоставления используемого алгоритма решения задачи, настройки графического интерфейса пользователя на конкретные приложения и др.), а также весьма широкий спектр бесплатных приложений во многих фундаментальных и прикладных областях современного естествознания. Пакет Maple воплощает новейшую технологию символьных вычислений, числовых вычислений с произвольной точностью, наличие инновационных Web-компонент, расширяемой технологии пользовательского интерфейса (Maplets), и весьма развитых математических алгоритмов для решения сложных математических задач.

1. Общие сведения о пакетах, помогающих решать задачи линейной алгебры

Небольшая часть команд для решения задач линейной алгебры содержится в стандартной библиотеке и пакете Student, большая же часть находится в пакетах Linalg и LinearAlgebra.

В состав предыдущих версий Maple входил только пакет Linalg, который состоит более чем из сотни команд, реализующих основные операции линейной алгебры. Несмотря на эффективность реализованных в нем алгоритмов, этот пакет обладает несколькими недостатками: для выполнения матричных операций нужно использовать или команду evalm, или специальные команды, а самое главное - ограниченные возможности работы с числовыми матрицами большого порядка. В пакете LinearAlgebra эти недостатки были удалены.

В состав предыдущих версий Maple входил только пакет Linalg, который состоит более чем из сотни команд, реализующих основные операции линейной алгебры. Несмотря на эффективность реализованных в нем алгоритмов, этот пакет обладает несколькими недостатками: для выполнения матричных операций нужно использовать или команду evalm, или специальные команды, а самое главное - ограниченные возможности работы с числовыми матрицами большого порядка. В пакете LinearAlgebra эти недостатки были удалены.

Возможности пакетов во многом перекрываются, хотя можно сказать, что пакет Linalg удобен для проведения выкладок линейной алгебры в символьном виде, а LinearAlgebra - для вычислений. Однако в каждом из пакетов существуют возможности, не имеющие аналогов в другом пакете.

Как уже было сказано, основными объектами, с которыми работают команды этих пакетов, являются матрицы, однако, следует отметить, что матрицы одного пакета не эквивалентны матрицам другого. В пакете Linalg используются матрицы, построенные на основе массива, создаваемого командой array ( ), тогда как в пакете LinearAlgebra применяются векторы и матрицы, построенные на основе новой структуры r - таблицы (r - table) и создаваемые специальными конструкторами Vector ( ) и Matrix ( ) или с использованием краткой нотации <a, b, c>. Матрицы в пакете Linalg вычисляются только до уровня своих имен, поэтому в нем невозможно вычислить операции поэлементного суммирования или вычитания, используя простые операции над идентификаторами матриц, поэтому нам и приходится пользоваться командой evalm ( ). В пакете LinearAlgebra матрицы вычисляются до уровня своих элементов, поэтому простое задание имени матрицы в области ввода рабочего листа приводит к отображению ее элементов, а не имени матрицы, как в случае с пакетом Linalg. Кроме того, в пакете LinearAlgebra матрицы могут задаваться в качестве операндов сложения и вычитания, что приводит к поэлементному выполнению указанных операций без использования дополнительных синтаксических конструкций. Итак:

Модуль Linalg полезен при выполнении абстрактных вычислений над матрицами и векторами.

Модуль LinearAlgebra обладает более дружественным интерфейсом, работает с числовыми матрицами и особенно эффективен при работе с числовыми матрицами больших размеров из-за возможности обращения к откомпилированным программам пакета численных расчетов NAG.

Рассмотрим более подробно эти модули.

2. Пакет Linalg

Пакет линейной алгебры Linalg содержит команды создания матриц и векторов, предлагает большой набор функций для работы со структурой этих объектов, для выполнения матричных и векторных операций и непосредственно для решения задач линейной алгебры: решение систем линейных алгебраических уравнений, нахождение собственных векторов и собственных векторов матрицы, приведение матриц к специальным формам. И все эти действия можно проводить с матрицами и векторами, элементы которых могут быть общими алгебраическими выражениями, получая результаты также виде алгебраических выражений.

Все команды пакета линейной алгебры работают с матрицами и векторами. В Maple матрицей считается двумерный массив, индексы которого изменяются от единицы. Аналогично, вектор - это одномерный массив с изменяющимся от единицы индексом. Определить матрицу или вектор в Maple можно двумя способами: либо с помощью команды array ( ) стандартной библиотеки, или командами matrix ( ) и vector ( ) пакета Linalg.

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

array (диапазоны, список опции);

Все параметры необязательны и могут создаваться в произвольном порядке. Параметр диапазоны представляет собой целочисленные диапазоны изменения индексов массивов, задаваемых через запятую, - размерность массива равна количеству заданных диапазонов. Значения элементов массива задаются параметром список в виде списка для одномерных массивов или списка списков для многомерных массивов. В качестве значений параметра опции можно применять symmetric, antisymmetric, indentity, diagonal. Они используются для задания массивов специального вида. Для задания векторов и матриц с помощью этой функции следует указать диапазоны изменения индексов, начинающиеся с единицы:

> with(linalg):

> vec:=array(1..13,[1,2,3,4,5,6,7,8,9,0,11,12,13]);

> matr:=array(1..3,1..3,[[1,2,5],[10,15,0],[3,6,7]]);

приведем более простой пример задания матриц и векторов:

> with(linalg):

> vec:=vector(13,[1,2,3,4,5,6,7,8,9,0,11,12,13]);

> matr:=matrix(3,3,[[1,2,5],[10,15,0],[3,6,7]]);

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

Выяснить размерности матрицы помогут соответственно команды rowdim ( ) и coldim ( ), а определить количество элементов вектора можно командой vecdim ( ).

> with(linalg):

> vec:=vector(13,[1,2,3,4,5,6,7,8,9,0,11,12,13]);

> matr:=matrix(3,3,[[1,2,5],[10,15,0],[3,6,7]]);

> vectdim(vec);

> coldim(matr);

Иногда необходимо удалять или добавлять в матрицу строки и столбцы. Удалить строки или столбцы с номерами от i до j из матрицы А можно командами delrows(A,i..j) и delcols(A,i..j). Для удаления одной строки или одного столбца следует использовать диапазон i..i . Добавить строки или столбцы в матрицу А можно командой extend (A, rows, cols, expr), в которой параметры rows и cols являются целыми числами, включая 0, Параметр expr - выражение, значение которого используется в качестве значений добавляемых элементов строк и столбцов.

> A:=matrix(3,3,[5,3,4,2,7,8,9,8,7]);

> delcols(A,2..2);

> delcols(A,1..1);

> F:=extend(A,1,0,1);

Большая группа команд позволяет выделять из матрицы подструктуры: столбцы, строки, подматрицы и миноры. Для выделения строки с заданным номером следует применять команду row(A,i), а чтобы получить нужный столбец можно использовать команду col(A,j). Формирование подматрицы, состоящей из элементов столбцов с номерами от i1 до i2 и строк с номерами от j1 до j2, осуществляется командой submatrix(A,i1..i2,j1..j2) или аналогичная команда subvector(vec,i1..i2). Матрица минора элемента получается при помощи команды minor(A, i ,j), где i - строки, j - столбцы.

> F:=matrix(3,3,[1,2,3,4,5,6,7,8,9]);

> row(F,2);

> F1:=submatrix(F,1..3,1..3);

> F2:=minor(F,3,2);

Пакет Linalg содержит ряд команд, предназначенных для выполнения линейных преобразований над строками и столбцами исходной матрицы. Команда addcol(A, j1, j2, expr) создает новую матрицу из матрицы А путем прибавления к столбцу j1 столбца j2, умноженного на значение expr. Команда addrow (A, i1, i2, expr) выполняет те же действия только со строками. Умножить столбец с номером j на значение выражения expr можно командой mulcol (A, j, expr), а то же самое действие для строки выполняется с помощью команды mulrow (A, i, expr). Для перестановки местами двух строк или столбцов используют команды swaprow (A, i1, i2) или swapcol (A, j1, j2).

Сложить две матрицы одинаковой размерности можно либо командой evalm(A+B), либо командой add(A,B). Умножение матрицы на матрицу (или вектор) выполняется командой multiply(A,B) или evalm(A&*B). Возвести матрицу в степень n можно при помощи команды evalm(A^n). Для вычисления обратной матрицы используют команду inverse (A), либо evalm (1/M). Транспонированная матрица вычисляется при помощи команды transpose (A). Определитель и ранг матрицы можно получить при помощи команд det (A) и rank (A). Для вычисления собственных чисел и векторов числовой квадратной матрицы можно воспользоваться командой Eigenvals (A,V), где A - матрица, для которой вычисляются собственные числа, а V - необязательный параметр. Для получения результата применения этой команды следует использовать команду evalf ( ).

> A:=matrix(3,3,[1,2,3,4,5,6,7,8,9]);

> evalf(Eigenvals (A,V));

> evalm(V);

Для получения собственных чисел символьных матриц и векторов следует использовать команды eigenvals(A) и eigenvects(A)

> A:=matrix(3,3,[1,2,3,4,5,6,7,8,9]);

> eigenvals(A);

> eigenvects(A);

В пакете Linalg есть специальная команда linsolve() решения систем линейных алгебраических уравнений. Эта команда решает матричное уравнение Аx=b.

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

> A:=matrix([[1,2],[1,3]]);

> b:=vector([1,-2]);

> linsolve(A,b);

Таким образом, пакет Linalg содержит более ста полезных команд выполнения матричных операций, а также структурных преобразований матриц.

3. Аналитическая геометрия на плоскости

Пусть уравнение одной из сторон квадрата х+3у-5=0. Необходимо составить уравнения трех остальных сторон квадрата, если точка с координатами (-1,0) является точкой пересечения его диагоналей.

Будем строить решение задачи с помощью векторов Maple, определяемых командой vector(). Этими объектами можно представлять не только векторы на плоскости и в пространстве, но и точки этих пространств.

Прежде всего, определим одну известную сторону квадрата (linel) и точку пересечения его диагоналей (center_point), являющуюся центром квадрата

> with(linalg):

> linel:=x+3*y-5=0;

> center_point:=vector(2,[-1,0]);

Расстояние от точки пересечения диагоналей квадрата до любой его стороны равно половине длины стороны квадрата. Один из способов его определения заключается в определении точки пересечения стороны квадрата с перпендикуляром, опущенном из точки пересечения диагоналей. Для задания

прямой линии на плоскости необходимо знать направление перпендикулярного к ней вектора (а) и некоторую точку (Р0), через которого она проходит. Тогда уравнение прямой может быть записано в виде:

(Р-Р0, a)=0,

где Р радиус-вектор текущей точки прямой, а через (.. , ..) обозначено скалярное произведение двух векторов.

Вектор, перпендикулярный прямой, проходящей через центр квадрата и перпендикулярный заданной его стороне, определяется через уравнение этой стороны.

Вектор [1,3] перпендикулярен стороне квадрата, а значит вектор [3,-1] перпендикулярен нашей искомой прямой:

> перпендикулярный_вектор1:=vector(2,[1,3]);

перпендикулярный_вектор1:=[1,3]

> перпендикулярный_вектор:=vector(2,[3,-1]); перпендикулярный_вектор:=[3,-1]

> with(linalg):

> dotprod(перпендикулярный_вектор1,перпендикулярный_вектор);

Для проверки перпендикулярности двух векторов мы использовали то, что скалярное произведение при перпендикулярности должно равняться нулю.

Команда dotprod( ) пакета linalg вычисляет скалярное произведение двух векторов.

Зададим радиус - вектор текущей точки прямой как вектор с координатами [x,y]

> point_line:=vector(2,[x,y]);

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

> line:=dotprod((point_line-centre_point),перпендикулярный_вектор)=0;

Точку пересечения cross_point перпендикуляра line со стороной квадрата linel1 получим из совместного решения уравнений этих прямых

> s:=solve({line,line1},{x,y});

> cross_point:=vector(2,[eval(x,s),eval(y,s)]);

Для дальнейших построений нам необходимо вычислить расстояние между двумя точками плоскости.

Для выполнения этого действия пришлось написать следующую часть.

> with(linalg):v11:=vector(2,[eval(x,s),eval(y,s)]);

> v22:=vector(2,[-1,0]);

> s:=0;v33:=vectdim(v11);for i from 1 to v33 do s:=s+(v11[i]-v22[i])^2;end do;

d:=simplify(sqrt(s));

Эта величина равна половине длины стороны квадрата, а так как точка cross point как раз и делит сторону квадрата пополам. Теперь мы легко можем определить две вершины квадрата v1 и v2 как точки прямой заданной стороны квадрата и расположенные по обе стороны от точки cross point на расстоянии d

> zero:=vector(2,[0,0]);перпендикулярный_вектор:=vector(2,[3,-1]);перпендикулярный_вектор1:=vector(2,[1,3]);

перпендикулярный_вектор:=[3,-1]

перпендикулярный_вектор1:=[1,-3]

> v11:=vector(2,[0,0]);v22:=vector(2,[3,-1]);s:=0;v33:=vectdim(v11);for i from 1 to v33 do s:=s+(v11[i]-v22[i])^2;end do;

d1:=simplify(sqrt(s));

>v1:=vector(2,[cross_point[1]+перпендикулярный_вектор[1]/d1*d,

cross_point[2]+перпендикулярный_вектор[2]/d1*d]);

> v2:=vector(2,[cross_point[1]-перпендикулярный_вектор[1]/d1*d,

cross_point[2]-перпендикулярный_вектор[2]/d1*d]);

При вычислении вершин квадрата нам пришлось использовать единичный направляющий вектор прямой linel1, построенный из вектора перпендикулярный_вектор (он параллелен стороне квадрата) делением его координат на модуль этого вектора, который вычисляется как расстояние от точки, представленной координатами вектора, до начала координат (zero).

Теперь, зная координаты двух вершин квадрата, можно построить уравнения еще двух сторон (line2 и line4), а также вычислить координаты остальных двух вершин (v4 и v3), смещаясь вдоль построенных прямых сторон квадрата от соответствующих вершин (v1 и v2) на расстоянии 2d, равное длине стороны квадрата:

> line2:=dotprod((point_line-v1),перпендикулярный_вектор)=0;

> line4:=dotprod((point_line-v2),перпендикулярный_вектор)=0;

>v11:=vector(2,[0,0]);v22:=vector(2,[1,3]);s:=0;v33:=vectdim(v11);for i from 1 to v33 do s:=s+(v11[i]-v22[i])^2;end do;

d1:=simplify(sqrt(s));

> v4:=vector(2,[v1[1]-перпендикулярный_вектор1[1]/d1*2*d,v1[2]-перпендикулярный_вектор1[2]/d1*d*2]);

> v3:=vector(2,[v2[1]-перпендикулярный_вектор1[1]/d1*2*d,v2[2]-перпендикулярный_вектор1[2]/d1*d*2]);

Получить уравнение последней стороны квадрата достаточно просто. Для этого достаточно построить уравнение прямой, проходящей через точку v4 и параллельной заданной стороне квадрата

> line3:=dotprod((point_line-v4),перпендикулярный_вектор1)=0;

Для проверки построенных уравнений сторон квадрата можно начертить прямые линии сторон и точку центра квадрата, чтобы убедиться в правильности построенного решения

> with(plots):

>f:=plot({rhs(isolate(linel,y)),rhs(isolate(line2,y)),rhs(isolate(line3,y)),rhs(isolate(line4,y))},x=-4..4,y=-4..4,color=black,scaling=CONSTRAINED,thickness=2):g:=plot([[center_point[1],center_point[2]]],x=-

4..4,style=POINT,color=black):t:=textplot([1,2,"line1"],color=red,align={LEFT}):display({f,g,t},axes=BOXED);

Рис. 1

Если немного уменьшить масштаб, то можно более наглядно рассмотреть получившуюся фигуру.

>f:=plot({rhs(isolate(linel,y)),rhs(isolate(line2,y)),rhs(isolate(line3,y)),rhs(isolate(line4,y))},x=-10..10,y=-10..10,color=black,scaling=CONSTRAINED,thickness=2):g:=plot([[center_point[1],center_point[2]]],x=-4..4,style=POINT,color=black):t:=textplot([1,2,"line1"],color=red,align={LEFT}):display({f,g,t},axes=BOXED)

Рис. 2

4. Построение графиков функций

Построение графика явной функции y=f(x)

График функции y=f(x) на отрезке [a, b] можно построить с помощью функции plot(f(x), x=a..b, y=c..d, опции). Опции не обязательны, однако, для изменения свойств графика нужно задавать опции. Параметр у=c..d можно не задавать, тогда высота графика выбирается по умолчанию. Построим график функции y=sinx на отрезке [-р, р].

> plot(sin(x), x= -Pi. .Pi); plot(sin(x), x= -Pi. .Pi,y= -2..2);

Результаты приведены на рис. 3 и 4.

Рассмотрим некоторые опции.

color='цвет' задает цвет графика. В качестве параметра 'цвет' могут быть: black- черный, blue - голубой, brown - коричневый, green - зеленый, red - красный, yellow - желтый и т.д.

scaling=CONSTRAINED - задает одинаковый масштаб по осям x и y. По умолчанию UNCONSTRAINED.

style='тип линии' задает вид линии графика. В качестве параметра 'тип линии' могут быть: LINE - рисование непрерывной линией, POINT - рисование точками.

symbol='тип точки' задает тип точки при рисовании точками (т.е. когда задана опция style=POINT). Параметром 'тип точки' могут быть: BOX - рисование квадратиками, CROSS - рисование крестиками, CIRCLE - рисование кружочками, POINT - рисование точками, DIAMOND - рисование ромбиками.

thicrness=n задает толщину непрерывной линии (n = 1..15).

> plot(sin(x),x=-Pi..Pi, color=blue, style=POINT, symbol=circle);

> plot(sin(x), x=-Pi..Pi, color=blue, thickness=3, scaling=CONSTRAINED);

Построение графика функции в параметрической форме

Пусть функция y=y(x) задана параметрически: x=g(t), y=h(t), t=a..b. Для по-строения графика этой функции нужно задать команду

plot([g(t), h(t), t=a..b], опции).

Пример. Построить график функции, заданной параметрически x=2cost, y=sint, -р ? t ? р.

Решение. > plot([2*cos(t), sin(t), t=-Pi..Pi], color=blue,thickness=2, scaling=CONSTRAINED);

Результат на рис. 7.

Построение графиков нескольких функций

Задача. Построить графики трех функций y=sinx, y=cosx, y=x2/5 -1 на отрезке [-р, р].

Решение.

> plot([sin(x), cos(x), x^2/5-1], x=-Pi..Pi, y=-1.5..1.5, color=[red, blue, green], style=

[point, line, line], scaling=CONSTRAINED);

Результат приведен на рис. 8.

Построение кривой, заданной уравнением

Кривую на плоскости, заданную уравнением f(x, y)=0 можно начертить с помощью функции implicitplot из пакета расширения plots. Эта функция задается в виде implicitplot(f(x,y)=0, x=a..b, y=c..d, опции).

Задача. Начертить кривую, заданную уравнением x2+y2+xy+4x-2y+1=0.

Решение.

> with(plots): - присоединение пакета plots.

> ur:=x^2+y^2+x*y+4*x-2*y+1=0; - заданному уравнению присвоено имя ur.

> implicitplot(ur, x = -7. .0, y=-1. .6, color=blue, thickness=2,

scaling=constrained);

Результат приведен на рис. 9. Кривой оказался эллипс. Отрезки [-7, 0] и [-1, 6] изменения x и y подобраны “методом проб”.

Построение кривых в полярной системе координат

Для построения графика в полярных координатах нужно задать изменение значений полярного радиуса и полярного угла. Пусть r = r(f) (a ? f ? b) зависимость полярного радиуса r от полярного угла f. Тогда график этой функции в полярных координатах можно построить, задав у функции plot опцию coords=polar.

Задача. Построить в полярных координатах график функции

r = 3(1-cos?), 0 ? ? < 2р.

Решение.

> plot(3*(1-cos(f)), f=0. .2*Pi, coords=polar, thickness=2);

Результат приведен на рис. 10 (эта кривая называется кардиоидой).

Задача. Построить в полярных координатах графики трех функций r = 6cos?, r=?, r=2sin?, 0 ? ? < 2р.

Решение.

> plot( [6*cos(f), f, 2*sin(f)], f=0. .2*Pi, coords = polar, thickness=2, color=[blue, red, green], scaling=CONSTRAINED);

Результат приведен на рис. 11

Рис. 11

5. Пакет LinearAlgebra

Все команды данного пакета можно вызывать непосредственно по имени, предварительно подключив все его команды функцией

> with(LinearAlgebra):

или отдельную команду с использованием синтаксиса

> with(LinearAlgebra, имя_команды):

Пакет LinearAlgebra реализован в виде модуля, новой языковой конструкции Maple, реализующей элементы объектно-ориентированного программирования. Каждая команда является методом объекта LinearAlgebra, а поэтому ее можно вызывать, используя специальную операцию :- обращения к методу объекта:

> LinearAlgebra:- имя_команды (параметры);

Данный пакет используется также для действий над матрицами. Рассмотрим некоторые из них более подробно.

Зададим произвольную матрицу, без задания элементов какой либо строки и посмотрим на результат:

> F:=matrix(3,3,[[1,2,3],[],[4,5,6]]);

Элементы второй строки не были определены, и Maple заполнил их переменными по умолчанию.

> fun:=(i,j)->x^i/y^j:K:=matrix(2,2,fun);

Данный пример показывает возможность задания матриц в виде элементов дроби, при этом в первой строке коэффициенты числителя не изменяются, а коэффициенты знаменателя возводятся в степень соответствующую номеру столбца. Числитель элементов второй строки возводится же в степень на единицу большую, чем элементы первой строки, т.е. степень соответствует номеру строки. Приведем пример для размерности 3 на 3:

> fun:=(i,j)->x^i/y^j:K:=matrix(3,3,fun);

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

> F:=array(1..3,1..3,antisymmetric):eval(F);

Знаки вопроса означают, что соответствующие элементы не заданы.

> F[1,3]:=1:op(F);

Попробуем привести некоторые примеры действий над матрицами с помощью команд описанных ранее.

Введем две произвольные матрицы:

> C:=matrix(3,3,[1,2,3,4,5,6,7,8,9]);

> F:=matrix(3,3,[9,8,7,6,5,4,3,2,1]);

Вычислим определитель матрицы F:

> linalg[det](F);

Определитель матрицы равен 0, сложим две матрицы и отнимем одну от другой.

> evalm(C+F);

> evalm(C-F);

Выполним транспонирование матрицы F

> Z:=linalg[transpose](F);

Вычислим ранг полученной матрицы Z

> linalg[rank](Z);

Возведем матрицу Z в квадрат.

> evalm(Z^2);

Приведем более наглядный пример возведения матрицу в степень

> C:=matrix(3,3,[1,2,3,4,5,6,a,b,c]);

> evalm(C^2);

6. Решение систем линейных уравнений (СЛУ)

Как известно, одной из первых задач решаемых в курсе линейной алгебры, является задача решения систем линейных алгебраических уравнений. Существует много способов ее решения, но классическими являются два - метод Крамера и метод исключения Гаусса. Первый в настоящее время практически не используется из-за накопления ошибок округления при реальных вычислениях на подмножестве вещественных чисел с ограниченной мантиссой, хотя, справедливости ради следует заметить, что при вычислениях в Maple подобной проблемы не возникает, так как пользователь всегда может увеличить количество цифр в мантиссе используемых чисел, присвоив системной переменой Digits требуемое значение. Именно поэтому мы и приведем оба варианта решения систем линейных уравнений и методом Крамера и Гаусса.

Метод Крамера.

Данная программа реализует классический метод решения систем линейных уравнений методом Крамера и выполняет проверку. Программа способна решать системы уравнений с n - неизвестными. > restart;

Подключим пакет Linalg о котором мы уже не раз говорили ранее.

with(linalg):

Введем размерность матрицы системы

n:=3;

Введем коэффициенты основной матрицы, и вычислим их определитель.

A:=matrix(n,n,[1,1,-4,2,-1,1,3,5,6]);

opredelitA:=det(A);

Введем коэффициенты свободных членов

B:=matrix(n,1,[-15,9,1]);

Для превращения программы в программу для общего случая, необходимо использовать цикл, с помощью цикла нам удалось автоматически подставлять вектор столбец свободных членов сначала на место первого столбца, затем на место второго и т.д. в зависимости от размерности матрицы системы. И соответственно вычислять определители данных матриц и значения х1, х2, и т.д.

for m from 1 to n do

r:=eval(m-1);

p:=eval(m+1);

F[m]:=concat(submatrix(A,1..n,1..r),B,submatrix(A,1..n,p..n));

opredelitF[m]:=det(F[m]);

x[m]:=evalf(opredelitF[m]/opredelitA); od;

Получив все необходимые данные, а именно значения неизвестных переменных - х, необходимо провести проверку.

Для наглядности выведем значении полученных неизвестных коэффициентов:

> for m from 1 to n do X[m]=x[m]; od;

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

> for m from 1 to n do W[m]:=submatrix(A,1..n,m..m);od;

for m from 1 to n do W[m]:=evalm(W[m]*x[m]); od;

Сложим полученные значения

> Q:=evalm(W[1]+W[2]+W[3]);

> C:=matrix(B);

Очевидно, что полученный вектор столбец равен вектору столбцу, введенному ранее - столбцу свободных членов, значит решение данной системы верно, и полученные неизвестные коэффициенты действительно являются решениями данной системы.

Метод Гаусса.

Пусть в условии задачи нам дана некоторая система линейных алгебраических уравнений

3*x1 + 2*x2 + x3 = 5

2*x1 + 3*x2 + x3 = 1

2*x1 + x2 + 3*x3 = 11

Необходимо доказать ее совместимость и решить методом Гаусса.

Неоднородная квадратная система линейных уравнений совместна при любом векторе правой части, если определитель не равен нулю.

> A:=matrix(3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);

> B:=vector(3,[5,1,11]);

Вычислить определитель в Maple можно обратившись к команде det( ).

> A:=matrix(3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);

opredelit:=linalg [det](A);

Мы должны получить решение с помощью метода исключения Гаусса. В Maple нет специальной команды решения системы линейных уравнений этим методом, поэтому нам придется создать собственную идею вычисления:

> with(linalg):A:=matrix(3,3,[[2,1,0],[-3,4,0],[-2,1,2]]);

> B:=vector(3,[5,1,11]);

> m:=rowdim(A);

> c:=matrix(A);

> c:=concat(c,B);

> x:=vector(m);

> for i from 1 to m do r:=1/c[i,i];c:=mulrow(c,i,r); if i<>m then for j from i+1 to m do r:=-c[j,i];c:=addrow(c,i,j,r);end do;end if; end do;

> x[m]:=c[m,m+1]; for i from m-1 to 1 by -1 do x[i]:=c[i,m+1]-sum(x[k]*c[i,k],k=(i+1)..m); end do; sol:=eval(x);

Здесь мы получили значения х1, х2, х3, проверим правильность нашего решения с помощью сравнения вектора свободных членов, с нашей матрицей A помноженной на соответственные значения полученных иксов

> evalm(A&*sol);evalm(B);

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

В прямом ходе метода расширенная матрица системы приводится к верхнему треугольному виду с единицами на главной диагонали. В обратном ходе в векторе х процедуры вычисляется вектор решения системы, который и является ее обратным значением. При приведении матрицы к верхнему треугольному виду в двойном цикле используется команда addrow принадлежащая пакету linalg, а при последовательном вычислении элементов вектора решения - команда sum. Эти команды реализуют циклы.

Заключение

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

В ходе выполнения курсовой работы мы овладели навыками работы c программной средой Maple в целом и её применением к решению задач, к примеру, таких как: действия над матрицами и как следствие решение СЛАУ методам Гаусса и Крамера, действия над векторами, аналитическая геометрия на плоскости и в пространстве.

Список использованной литературы

1. Беклемишев Д.В. “Линейная геометрия и линейная алгебра”. - М.: Наука 1980

2. Воеводин В.В. Линейная алгебра. - М.: Наука 1980

3. Говорухин В.Н., Цибулин В.Г. Введение в Maple V. Математический пакет для всех. М.:

4. Дьяконов В.П. Maple V -- мощь и интеллект компьютерной алгебры

5. Прохоров Г.В. и др. Пакет символьных вычислений Maple V / Г.В. Прохоров, М.А. Леденев, В.В. Колбеев. - М.: Изд-во “Петит”, 1997.

6. Аладьев В.З., Бойко В.К., Ровба Е.А. Программирование и разработка приложений в Maple.

Размещено на Allbest.ru

...

Подобные документы

  • Возможности математического пакета MathCad в среде Windows 98 для использования матричной алгебры и решения системы линейных алгебраических уравнений. Методы решения систем линейных алгебраических уравнений. Сравнение метода Гаусса с методом MathCad.

    практическая работа [62,6 K], добавлен 05.12.2009

  • Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.

    лабораторная работа [23,5 K], добавлен 23.09.2014

  • Разработка программного продукта для решения систем линейных алгебраических уравнений методом Гаусса с помощью ЭВМ. Математическое описание объекта моделирования, начальные и граничные условия. Алгоритм реализации задачи. Использование модуля CRT.

    курсовая работа [269,6 K], добавлен 07.01.2016

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

    курсовая работа [4,2 M], добавлен 22.05.2014

  • Построение и использование математических и алгоритмических моделей для решения линейных оптимизационных задач. Освоение основных приемов работы с инструментом "Поиск решения" среды Microsoft Excel. Ввод системы ограничений и условий оптимизации.

    лабораторная работа [354,7 K], добавлен 21.07.2012

  • Метод Гаусса-Зейделя как модификация метода Якоби, его сущность и применение. Разработка программы решения системы линейных алгебраических уравнений на языке VB, проверка правильности работы программы в MS Excel и математических пакетах MathCad и MatLab.

    курсовая работа [325,5 K], добавлен 27.10.2013

  • Численные методы решения нелинейных уравнений, систем линейных и нелинейных алгебраических уравнений, дифференциальных уравнений, определенных интегралов. Методы аппроксимации дискретных функций и методы решения задач линейного программирования.

    методичка [185,7 K], добавлен 18.12.2014

  • Численные методы решения задач. Решение алгебраических и трансцендентных уравнений. Уточнение корня по методу половинного деления. Решение систем линейных уравнений методом итераций. Методы решения дифференциальных уравнений. Решение транспортной задачи.

    курсовая работа [149,7 K], добавлен 16.11.2008

  • Методика и основные этапы построения ранжированных переменных, сферы и особенности их практического применения. Порядок построения графиков в декартовой системе. Приведение примеров решение нелинейных уравнений и их систем при помощи решающего блока.

    контрольная работа [364,4 K], добавлен 27.03.2011

  • Системы линейных алгебраических уравнений. Матричный метод решения систем линейных уравнений. Решение задачи математическим методом. Блок-схема алгоритма и листинг программы. Расчет трудоемкости разработки программы. Расчет себестоимости и цены программы.

    дипломная работа [144,8 K], добавлен 25.04.2012

  • Рассмотрение двух способов решения систем линейных алгебраических уравнений: точечные и приближенные. Использование при программировании метода Гаусса с выбором главного элемента в матрице и принципа Зейделя. Применение простой итерации решения уравнения.

    курсовая работа [879,8 K], добавлен 05.06.2012

  • Метод решения математической модели на примере решения задач аналитической геометрии. Описание согласно заданному варианту методов решения задачи. Разработка математической модели на основе описанных методов. Параметры окружности минимального радиуса.

    лабораторная работа [310,6 K], добавлен 13.02.2009

  • Изучение систем линейных алгебраических уравнений (СЛАУ) с использованием табличного процессора MS Excel 2007. Пример решения системы линейных алгебраических уравнений методом Крамера. Прикладное программное обеспечение, применяемое для решения СЛАУ.

    курсовая работа [184,5 K], добавлен 20.11.2013

  • Использование информационных технологий для решения транспортных задач. Составление программ и решение задачи средствами Pascal10; алгоритм решения. Работа со средствами пакета Microsoft Excel18 и MathCad. Таблица исходных данных, построение диаграммы.

    курсовая работа [749,1 K], добавлен 13.08.2012

  • Программный продукт для решения систем линейных уравнений методом Гаусса. Алгоритм для проведения вычислений. Цель разработки и область ее применения. Схема информационных потоков. Метод Гаусса: исключение неизвестных. Проектирование удобного интерфейса.

    курсовая работа [340,0 K], добавлен 02.07.2010

  • Использование MS Excel для математических расчетов. Описание численных методов решения системы линейных алгебраических уравнений. Решение систем линейных алгебраических уравнений с методами Крамера и Зейделя и с помощью табличного процессора MS Excel.

    курсовая работа [1,6 M], добавлен 14.02.2021

  • Численные методы линейной алгебры. Матричный метод. Методы Крамера и Гаусса. Интерации линейных систем. Интерации Якоби и Гаусса - Зейделя. Листинг программы. Численные методы в электронных таблицах Excel и программе MathCAD, Microsoft Visual Basic

    курсовая работа [1,2 M], добавлен 01.06.2008

  • Практические навыки моделирования структурных схем в среде SIMULINK пакета MATLAB. Построение графиков функций в декартовой системе координат. Решение систем линейных и нелинейных уравнений. Работа с блоками Sum, Algebraic Constraint, Gain, Product.

    лабораторная работа [159,2 K], добавлен 19.04.2009

  • Назначение и возможности пакета MATLAB. Цель интерполирования. Компьютерная реализация решения инженерной задачи по интерполяции табличной функции различными методами: кусочно-линейной интерполяцией и кубическим сплайном, а также построение их графиков.

    контрольная работа [388,3 K], добавлен 25.10.2012

  • Характеристика и возможности графической программы Advanced Grapher. Решение систем уравнений и неравенств. Теория пределов. Дифференцирование функций одной переменной. Аналитическая геометрия на плоскости. Теория вероятностей и математическая статистика.

    курсовая работа [2,7 M], добавлен 21.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.