Многомерные массивы

Автор работы: Пользователь скрыл имя, 15 Февраля 2013 в 11:13, курсовая работа

Описание

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

Содержание

1. Введение
2. Постановка задачи
3. Метод решения задачи
4. Теоретическая часть
5. Практическая часть
6. Технические требования
7. Тестирование программы
8. Результат работы программы
9. Заключение
10. Список использованной литературы
11. Приложения

Работа состоит из  1 файл

Курсовая MAPLE.doc

— 1.99 Мб (Скачать документ)

  

 

 

Защита идентификаторов  констант

Имена встроенных констант (как и имена функций) защищены специальным атрибутом protected. Поэтому (без его снятия) константам нельзя присваивать какие-либо значения:

Стоит упомянуть о  такой экзотической возможности, как  задание в Maple 7 собственных констант путем описания алгоритма генерации  входящих в константу цифр (это  позволяет получать в представлении константы любое число цифр). Большинство пользователей довольствуется применением вместо таких констант обычных переменных подходящего типа. Зато истинные математики соревнуются друг с другом в создании все новых и новых констант и алгоритмов их вычислений. Примеры этого творчества можно найти на сайте фирмы Wateloo Maple.

 

Переменные

Типы переменных

Как следует из самого названия, переменные — это объекты, значения которых могут меняться по ходу выполнения документа. Пока мы рассматриваем лишь глобальные переменные, доступные для модификации значений в любом месте документа. Тип переменной в системе Maple 7 определяется присвоенным ей значением — это могут быть целочисленные (integer), рациональные (rational), вещественные (real), комплексные (complex) или строчные (string) переменные и т. д. Переменные могут также быть символьного типа (их значением является математическое выражение) или типа списка (см. далее). Для явного указания типа переменных используется конструкция:

name::type

где name — имя (идентификатор) переменной, type — тип переменной, например целочисленный (integer), вещественный с плавающей точкой (float), с неотрицательным значением (nonneg), комплексный (complex) и т. д.

Идентификаторы (имена) переменных

Переменные задаются своим именем — идентификатором, который должен начинаться с буквы и быть уникальным. Это значит, что ключевые слова языка Maple нельзя использовать в качестве имен переменных. Хотя имена ряда команд и функций можно использовать в качестве идентификаторов переменных, делать это крайне нежелательно. Ограничений на длину идентификатора практически нет — точнее, она не должна превышать 524 275 символов! Так что сложностей с подбором идентификаторов для переменных у вас не будет.

Имена переменных могут  содержать одну букву (например, х, Y или Z) либо ряд букв (Xmin или Хmах). В любом случае имя переменной надо начинать с буквы. Некоторые символы, например знак _, могут использоваться в именах (например, Var_l, Var_2). Нельзя, однако, вводить в имена переменных знаки, обозначающие операторы, — например,а/b или а-b будет истолковано как деление а на b или вычитание из переменной а переменной b.

Имена могут задаваться в обратных апострофах. При этом они просто тождественны именам без  апострофов:

Строчные и прописные  буквы в идентификаторах различаются, так что Varl и varl — это разные переменные.

Для проверки предполагаемого  имени на уникальность достаточно выполнить  команду ?name, где name — выбранное имя. Если при этом откроется окно справки с этим именем, значит, оно уже использовано в Maple. Лучше воздержаться от его применения, так как связанная с этим именем команда или функция перестает работать, как только это имя закрепляется за какой-либо переменной.

Присваивание  переменным значений

Поскольку Maple 7 прежде всего система символьной математики, то по умолчанию любые переменные рассматриваются как объекты символьного типа. Благодаря этому такие переменные могут фигурировать в математических выражениях (таких, как sia(x)/x) без их предварительного объявления. В отличие от обычных языков программирования такое использование переменных не влечет за собой появления сообщений об ошибках и является более естественным. Для присваивания переменным конкретных значений используется комбинированный символ присваивания «:=», например: 

  • n:=1 — переменной n присваивается, целочисленное значение 1; 
  • х:=123.456 - переменной х присваивается вещественное значение 123.456; 
  • у:=17/19 — переменной у присваивается рациональное значение 17/18; 
  • name:='Piter' — переменной name присваивается строковое значение "Piter"; 
  • expr:=2*Pi/3 — переменной ехрг присваивается значение выражения 2л/3; 
  • V:=[1.2,3] - переменной V присваивается значение списка чисел [1,2,3];
  • М:=[[1,2.3].[4,5.б]] - переменной М присваивается значение двумерного массива;  
  • f :=х->х^2 - переменной f присваивается значение функции пользователя f(x)=x^2.

Правая часть выражения  присваивания определяет тип переменной. Например, она может быть целочисленной, действительной, строковой, индексированной (элемент массива) и т. д.

Отмена операции присваивания и команда restart

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

Здесь не удалось вычислить  интеграл с подынтегральной функцией х"2 из-за того, что переменная х уже определена ранее как целочисленная переменная со значением 10, тогда как для вычисления интеграла она должна быть необъявленной или строковой (убедитесь в этом сами).

Для отмены присваивания надо использовать следующее выражение:

Итак, заключение имени  переменной в прямые апострофы ликвидирует  присваивание. Так что запись х:='х' означает, что переменной х возвращается статус неопределенной переменной. Теперь можно вычислить интеграл:

Можно сделать переменную х неопределенной и с помощью выражения вида x:=evaln(x). Это поясняет следующий пример:

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

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

Важно отметить, что Maple сохраняет  в памяти все определения и  присваивания, которые были сделаны  во всех загруженных в систему  документах. Поэтому результаты вычислений в текущем документе могут зависеть от определений в других документах. Команда restart позволяет исключить эту зависимость.

Придание переменным статуса предполагаемых

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

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

Обратите внимание, что  в этом примере переменная х помечена как положительная и при выводе сопровождается знаком тильды -, как бы предупреждающим нас о ее особом статусе. Это не означает, что она не может принять отрицательное значение. Однако с помощью функции is можно убедиться в ее особом статусе и при необходимости программным путем исключить вычисления для  х <0. Кроме того, о свойствах переменной можно узнать с помощью функции about (name).

Иногда к уже имеющимся  признакам надо добавить новые. Для  этого используется функция additionally:

В этом примере переменной а вначале задан признак положительности, а затем а<=0. Оба признака удовлетворяются только при a= 0, что и подтверждает вывод информации о статусе этой переменной функцией about (а).

Предполагаемую переменную можно также изменить путем присваивания ей нового значения, противоречащего ее статусу:

Для отмены переменным статуса  предполагаемых используются те же приемы, что и при отмене присвоенного значения. Например, запись х:=' х' отменяет статус предполагаемой для переменной х.

 

Векторная алгебра

Основная часть команд для решения задач линейной алгебры содержится в библиотеке linalg. Поэтому перед решением задач с матрицами и векторами следует загрузить эту библиотеку командой with(linalg). 

 

Способы задания  векторов.

Для определения вектора  в Maple используется команда vector([x1,x2,…,xn]), где в квадратных скобках через запятую указываются координаты вектора. Например:

> x:=vector([1,0,0]);

x:=[1, 0, 0]

Координату уже определенного  вектора x можно получить в строке вывода, если ввести команду x[i] , где i - номер координаты. Например, первую координату заданного в предыдущем примере вектора можно вывести так:

> x[1];

1

Вектор можно преобразовать в список и, наоборот, с помощью команды convert(vector, list) или convert(list, vector). 

 

Сложение  векторов.

Сложить два вектора a и b можно с помощью двух команд:

1) evalm(a+b);

2) matadd(a,b).

Команда add позволяет вычислять линейную комбинацию векторов a и b:  , где   - скалярные величины, если использовать формат: matadd(a,b,alpha,beta)

 

Скалярное, векторное произведение векторов и  угол между векторами.

Скалярное произведение двух векторов   вычисляется командой dotprod(a,b).

Векторное произведение двух векторов   вычисляется командой crossprod(a,b).

Угол между двумя  векторами a и b вычисляется с помощью команды angle(a,b). 

 

Норма вектора.

Норму (длину) вектора  , которая равна  , можно вычислить с помощью командыnorm(а,2).

Можно нормировать вектор а с помощью команды normalize(a), в результате выполнения которой будет получен вектор единичной длины  . 

 

Нахождение  базиса системы векторов. Ортогонализация  системы векторов по процедуре Грамма-Шмидта.

Если имеется система n векторов  , то с помощью команды basis([a1,a2,…,an]) можно найти базис этой системы.

При помощи команды GramSchmidt([a1,a2,…,an]) можно ортогонализовать систему линейно-независимых векторов  .

Задание 1.

1. Даны два вектора:   и  . Найти   и угол между a и b. Для решения этой задачи наберите:

> with(linalg):

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

a:=[2,1,3,2]

b:=[1,2,-2,1]

> dotprod(a,b);

0

> phi=angle(a,b);

2. Найти векторное  произведение  , а затем скалярное произведение  , где  ,  .

> restart; with(linalg):

> a:=([2,-2,1]); b:=([2,3,6]);

a:=[2,- 2,1]

b:=[2,3,6]

> c:=crossprod(a,b);

c:=[- 15,- 10,10]

> dotprod(a,c);

0

3. Найти норму вектора  .

> restart; with(linalg):

> a:=vector([1,2,3,4,5,6]): norm(a,2);

4. Из системы векторов:  ,  ,  ,  ,   выделить базис и ортогонализовать его по процедуре Грамма-Шмидта:

> restart; with(linalg):

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

a2:=vector([1,1,-5,3]):

a3:=vector([3,2,8,7]): a4:=vector([0,1,7,-4]):

a5:=vector([2,1,12,-10]):

> g:=basis([a1,a2,a3,a4,a5]);

g:= [a1, a2, a3, a5]

> GramSchmidt(g);

[[1,2,2,- 1], [2,3,- 3,2], 

Действия с  матрицами

 

 

Определение матрицы.

Для определения матрицы  в Maple можно использовать команду matrix(n, m, [[a11,a12,…,a1n], [a21,a22,…,a2m],…, [an1,an2,…,anm]]), где n - число строк, m – число столбцов в матрице. Эти числа задавать необязательно, а достаточно перечислить элементы матрицы построчно в квадратных скобках через запятую. Например:

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

В Maple матрицы специального вида можно генерировать с помощью дополнительных команд. В частности диагональную матрицу можно получить командой diag. Например:

> J:=diag(1,2,3);

Генерировать матрицу  можно с помощью функции f(i, j) от переменных i, j – индексов матрицы: matrix(n, m, f), где где n- число строк, m – число столбцов. Например:

> f:=(i, j)->x^i*y^j;

> A:=matrix(2,3,f);

Число строк в матрице А можно определить с помощью команды rowdim(A), а число столбцов – с помощью командыcoldim(A). 

 

Арифметические  операции с матрицами.

Сложение двух матриц одинаковой размерности осуществляется теми же командами, что и сложение векторов:evalm(A+B) или matadd(A,B). Произведение двух матриц может быть найдено с помощью двух команд:

  1. evalm(A&*B);
  2. multiply(A,B).

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

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

> B:=matrix([[-5,1], [7,4]]);

 

> v:=vector([2,4]);

> multiply(A,v);

> multiply(A,B);

> matadd(A,B);

Команда evalm позволяет также прибавлять к матрице число и умножать матрицу на число. Например:

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

> evalm(2+3*С);

 

 

Определители, миноры и алгебраические дополнения. Ранг и след матрицы.

Определитель матрицы А вычисляется командой det(A). Команда minor(A,i,j) возвращает матрицу, полученную из исходной матрицы А вычеркиванием i-ой строки и j-ого столбца. Минор Mij элемента aij матрицы А можно вычислить командой det(minor(A,i,j)). Ранг матрицы А вычисляется командой rank(A). След матрицы А, равный сумме ее диагональных элементов, вычисляется командой trace(A). 7

Информация о работе Многомерные массивы