Тема-3-5. Основы работы с математическими пакетами (MathCad)
Скачать 3.25 Mb.
|
Тема 3.5. Основы работы с математическими пакетами Страница 300 Для выделения результата вычисления или значения переменной MatLab вставляет пустую строку перед выводимым значением. Управлять появлением пустой строки или ее отсутствием можно в в раскрывшемся диалоговом окне Preferences внутри группы Text display с помощью следующих форматов : ∂ compact - строки с результатами выводятся подряд; ∂ loose - строки с результатами разделяются пустой строкой. Команда format служит для установки формата из командной строки. Например, обращение Пример 3.5.3-4 >> format short e >> аналогично выбору короткого формата в окне Preferences. Еще раз необходимо напомнить, что вне зависимости от установленного формата все вычисления производятся с двойной точностью, следовательно, после смены формата с short на long не требуется повторно находить значения переменных. Достаточно снова вывести их значения в командном окне. Также еще раз напомним, что содержимое командной строки MatLab легко редактируется. Курсор можно перемещать с помощью стрелок <←>, <→> и удалять неправильно набранные символы с помощью клавиш <Backspace> или имеется возможность заново вызывать ранее вызванную команду, отредактировать ее и снова выполнить. Для небольших процедур это гораздо удобнее, чем писать и отлаживать специальные m-файлы, что требует постоянного перехода из окна MatLab в окно текстового редактора. Все команды строчного редактора перечислены в таблице 3.5.3-2. Таблица 3.5.3-2 Комбинация клавиш Назначение → Перемещение курсора вправо на один символ ← Перемещение курсора влево на один символ Ctrl+→ Перемещение курсора вправо на одно слово Ctrl+← Перемещение курсора влево на одно слово Home Перемещение курсора в начало строки End Перемещение курсора в конец строки ↑ и ↓ Перелистывание предыдущих команд вверх или вниз для подстановки в строку ввода Del Стирание символа справа от курсора Backspace Стирание символа слева от курсора Ctrl+k Стирание до конца строки Esc Очистка строки ввода Ins Вкл/выкл режима вставки PgUp Перелистывание страниц сессии вверх PgDn Перелистывание страниц сессии вниз Тема 3.5. Основы работы с математическими пакетами Страница 301 3.5.3.1.3. Основные объекты системы MatLab Математические выражения в MatLab стоятся, как и в большинстве языков программирования, из числовых констант, переменных, стандартных и нестандартных функций, соединенных знаками арифметических операций, например + ,- ,* , / ,^, и круглых скобок. Кроме того, как было показано ранее, вид результата зависит от установленного формата. Число – простейший объект языка MatLab, представляющий числовые данные. Числа могут быть представлены в целом, дробном, с фиксированной и плавающей точкой, а также в экспоненциальном виде. Например, 0, 2, -4, 4.67, 0.0005, 567.9e-7, 0.89e12. Числа могут быть как действительными, так и комплексными. Комплексные числа содержат как действительные, так и комплексные чисти. В MatLab мнимая часть имеет множитель i или j, означающий корень квадратный из -1. Например, 3i, 5j, -5.1 +i8, 005e-5- j0.006. Все операции над числами в MatLab выполняются в формате с двойной точностью. Однако, как нам уже известно, MatLab выдает числовые результаты в нормализованной форме с четырьмя цифрами после десятичной точки и одной до нее. Поэтому при работе с числовыми данными можно задавать различные форматы представления чисел. Числовая константа – это предварительно определенное число (числовое значение). Числа (например, 1, -5, 3.97) являются безымянными числовыми константами. Системные константы (табл. 3.5.3-3) – это такие константы, значения которых задаются системой при загрузке. Однако по мере необходимости эти константы могут переопределяться. Таблица 3.5.3-3 Константа Назначение i или j Мнимая единица pi Число π=3.1415926… eps Погрешность вычислений над числами с плавающей точкой (по умолчанию 2 -52 ) realmin Наименьшее число с плавающей точкой (по умолчанию 2 -1022 ) realmax Наибольшее число с плавающей точкой (по умолчанию 2 1022 ) inf Значение машинной бесконечности NaN Указание на нечисловой характер данных (Not-a-Number) Символьная константа – это последовательность символов, заключенных в одиночные апострофы. Например: 'Кафедра ВМиП' '88+0' Тема 3.5. Основы работы с математическими пакетами Страница 302 Комментарии в MatLab определяются с помощью символа %. Например, % Это комментарий Переменные – это имеющие имена объекты, способные хранить некоторые, разные по значению, данные. В зависимости от этих данных, переменные могут быть числовыми или символьными, векторными или матричными. При использовании переменных необходимо придерживаться правил: ∂ имя переменной (ее идентификатор) может состоять из символов латинского алфавита, знака подчёркивания и цифр, но начинаться обязательно с символа алфавита; ∂ прописные и строчные буквы различаются; ∂ пробел не входит в имя переменной. Для задания переменным определенных значений используется операция присваивания, обозначаемая знаком равенства =. Пример 3.5.3-5 >> a=3.25*(0.7-3.3/5.1)+2.3^3 a = 12.3391 >> b=5*(2.2+3.9i)+0.8 b = 11.8000 +19.5000i >> Простейшие арифметические операции системы MatLab приведены в табл. 3.5.3-4. Таблица 3.5.3-4 Функция Название Операция Синта-сис plus Плюс + M1+M2 uplus Унарный плюс + +M minus Минус - М1-M2 uminus Унарный минус - -М mtimes Матричное умножение * M1*M2 times Поэлементное умножение массивов .* A1.*A2 mpower Возведение матрицы в степень ^ М^х power Поэлементное возведение массива в степень .^ A.^x mldivide Обратное (справа налево) деление матриц \ M1\M2 mrdivide Деление матриц слева направо / M1/M2 ldivide Поэлементное деление массивов справа налево .\ A1.\A2 rdivide Поэлементное деление массивов слево направо ./ A1./A2 Необходимо обратить внимание на то, что каждая операция имеет аналогичную по назначению функцию. Например, операции матричного умножения * соответствует функция mtimes(Ml,M2). Примеры применения арифметических операций уже не раз приводились, так что ограничимся несколькими дополнительными примерами. Тема 3.5. Основы работы с математическими пакетами Страница 303 Пример 3.5.3-6 >>А=[1 2 3]; >>В=[4 5 6]: >>В-А ans= 3 3 3 >>minus (В. А) ans = 3 3 3 >>А. ^ 2 ans = 1 4 9 >> power(A,2) ans = 1 4 9 >>А.\В ans= 4.0000 2.5000 2.0000 >>ldivide(A.B) ans= 4.0000 2.5000 2.0000 >>rdivide(A.B) ans= 0.2500 0.4000 0.5000 Соответствие функций операторам и командам в системе MatLab является одним из основных положений программирования в MatLab. Оно позволяет одновременно использовать элементы как операторного, так и функционального программирования. Следует отметить, что в математических выражениях операции имеют определенный приоритет исполнения. Например, в MatLab приоритет логических операций выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания. Для изменения приоритета операций в математических выражениях используются круглые скобки. MatLab обладает большим набором стандартных встроенных математических функций. Некоторые из них приведены в табл. 3.5.3-5. При вызове математических функций аргумент заключается в круглые скобки. Полный список всех встроенных элементарных математических функций можно получить, набрав в командной строке. Пример 3.5.3-7 >>help elfun >> Тема 3.5. Основы работы с математическими пакетами Страница 304 Таблица 3.5.3-5 Тригонометрические функции (результат вычисляется в радианах) sin, cos, tan, cot Синус, косинус, тангенс и котангенс sec, csc Секанс, косеканс Обратные тригономе-кие функции (результат вычисляется в рад.) asin, acos,atan,atan2, acot Арксинус, арккосинус, арктангенс и арккотангенс asec, acsc Арксеканс, арккосеканс Гиперболические функции sinh, cosh, tanh, coth Гипербол. синус, косинус, тангенс и котангенс sech, csch Гиперболические секанс и косеканс asinh, acosh, atanh, acoth Гиперболические арксинус, арккосинус, арктангенс и арккотангенс; Экспоненциальная функция, логарифмы, степенные функции exp Экспоненциальная функция log, log2, log10 Логарифм натуральный, по основанию 2 и 10 sqrt Квадратный корень Модуль, знак и функции для работы с комплексными числами abs, sign Модуль и знак числа conj, imag, real Комплексно-сопряжённое mod, rem Остаток от деления с учетом знака делимого и без gcd, lcm Наибольший и наименьший общий делитель cell, fix, floor, round округления Команда help отображает в командном окне список разделов справочной системы. Для получения содержимого раздела необходимо указать через пробел его название после help, а для вывода детальной информации о какой-либо функции, следует ввести в строке с help имя функции. Возникающий в процессе вычислений комплексный результат не является ошибкой. MatLab автоматически переходит в область комплексных чисел, если это необходимо, продолжая вычисления. Например, если необходимо найти квадратный корень из –1. Более того, допустимы операции деления на ноль, которые приводят к стандартным переменным Inf или –Inf. Результат деления нуля на ноль есть NaN (Not a Number – не число). Тема 3.5. Основы работы с математическими пакетами Страница 305 Переполнение или потеря точности в MatLab при выполнении операций с числами с плавающей точкой не вызывает прекращение вычислений. Запись комплексных величин, используемых в арифметических выражениях, напоминает общепринятые математические стандарты. Мнимые части комплексных чисел сопровождаются либо буквой i, либо буквой j: Пример 3.5.3-8 >>x=1.5-0.5i x = 1.5000 - 0.5000i >>y=1.5-0.5j y = 1.5000 – 0.5000j >> Если переменным i и j не присвоены какие-либо значения, то их можно использовать для формирования комплексных данных, используя знак умножения и располагая такой “сомножитель” до или после мнимой части: Пример 3.5.3-9 >>a=1; >>x=i*a x = 0 + 1.0000i >>y=a*i y = 0 + 1.0000i >> Когда полные комплексные числа используются в операциях умножения, деления и возведения в степень, то для устранения неоднозначности их заключают в круглые скобки. С помощью функции real и imag можно выделить вещественную и мнимую часть комплексного значения, а функция complex позволяет сконструировать комплексное значение по паре двух вещественных чисел. Пример 3.5.3-10 >>b=5+j10; >>c=real(d) c= 5 >>d=imag(b) d= 10 >> Функцией conj() можно воспользоваться для получения комплексного сопряженного числа. Тот же результат можно получить, располагая апостроф вслед за комплексным значением. Тема 3.5. Основы работы с математическими пакетами Страница 306 Пример 3.5.3-11 >>t=conj(b) t= 5.0000e+000 -1.0000e+001i >>g=b' g= 5.0000e+000 -1.0000e+001i >> Отметим, что над комплексными данными в MatLab определены все арифметические операции, а комплексные операнды и выражения могут использоваться в качестве аргументов стандартных функций. Необходимо обратить внимание, что числовые переменные в MatLab являются двумерными массивами размера один на один. Представление всех данных в MatLab в виде массивов оказывается очень полезным, о чем подробнее будет сказано в следующих разделах. 3.5.3.1.4. Работа с векторами и матрицами Пакет MatLab построена как система, ориентирующая на работу с матрицами, то есть все численные вычисления производятся в матричной форме. Система MatLab выполняет сложные и трудоемкие операции над векторами и матрицами даже в режиме прямых вычислений без какого-либо программирования. Ею можно пользоваться как мощнейшим калькулятором, в котором наряду с обычными арифметическими и алгебраическими действиями могут использоваться такие сложные операции, как инвертирование матрицы, вычисление ее собственных значений и принадлежащих им векторов, решение систем линейных уравнений, вывод графиков двумерных и трехмерных функций и многое другое. Важно отметить, что даже обычные числа и переменные в MatLab рассматриваются как матрицы размера 1 x 1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Это также означает, что большинство функций может работать с аргументами в виде векторов и матриц. При необходимости вектора и матрицы преобразуются в массивы, и значения вычисляются для каждого их элемента. Массивы являются одним из самых распространенных способов хранения данных и используются во всех языках программирования и математических пакетах. К особенностям работы с массивами в MatLab относится то, что одномерный массив может быть вектор- строкой или вектор-столбцом. Если способ представления массива важен, то мы будем подчеркивать, о строке или о столбце идет речь. Если же это несущественно, то будем говорить о вектор-строках и вектор-столбцах просто как о векторах или одномерных массивах. Напомним, что одномерный массив в MatLab есть двумерный, у которого ода из размерностей равна единице. Для определения вектора используются квадратные скобки, а элементы вектора отделяются друг от друга: ∂ точкой с запятой, если требуется получить вектор–столбец; ∂ пробелом или запятой, если необходимо разместить элементы в векторе-строке. Тема 3.5. Основы работы с математическими пакетами Страница 307 Пример 3.5.3-12 >>a=[0.2; -3.9; 4.6] a = 0.2000 -3.9000 4.6000 >>b=[7.6; 0.1; 2.5] b = 7.6000 0.1000 2.5000 >>u=[0.1 0.5 -3.7 8.1] u = 0.1000 0.5000 -3.7000 8.1000 >>v=[5.2 9.7 3.4 –0.2] v = 5.2000 9.7000 3.4000 –0.2000 >> Получить информацию о переменных, как мы уже знаем, можно с помощью окна Workspace или при помощи команды whos. Для определения длины вектора используется функция length(а), вектор а указывается в качестве ее входного аргумента. Пример 3.5.3-13 >>L=length(a) L = 3 >> Вектор-столбцы с одинаковым числом элементов можно складывать и вычитать друг из друга при помощи опрераций "+" и "–". Эти правила верны и для вектор-строк. Сложение и вычитание вектор-строк и вектор-столбцов или векторов разных размеров приводит к ошибке. Операция * предназначена для умножения векторов по правилу матричного умножения. Поскольку MatLab различает вектор-строки и вектор- столбцы, то допустимо либо умножение вектор-строки на такой же по длине вектор- столбец (скалярное произведение), либо умножение вектор-столбца на вектор-строку (внешнее произведение, в результате которого получается прямоугольная матрица). Скалярное произведение двух векторов возвращает функция dot(), а векторное - cross(): Пример 3.5.3-14 >>s=dot(a, b) s= 1.2630e+001 >>c=cross(a, b) c= -1.0210e+001 3.4460e+001 2.9660e+001 >> Для операции транспонирования зарезервирован символ апостроф - '. Если вектор содержит комплексные числа, то операция ' приводит к комплексно-сопряженному вектору. При вычислении скалярного и векторного произведений функциями cross() и dot() не Тема 3.5. Основы работы с математическими пакетами Страница 308 обязательно следить за тем, чтобы оба вектора были либо столбцами, либо строками. Результат получается верный, например, при обращении c=cross(a,b'), только c становится вектор-строкой. MatLab поддерживает поэлементные операции с векторами. Наряду с умножением по правилу матричного умножения, существует операция поэлементного умножения - .* (точка со звездочкой). Данная операция применяется к векторам одинаковой длины и приводит к вектору той же длины, что исходные, элементы которого равны произведениям соответствующих элементов исходных векторов. Например, для векторов a и b, введенных выше, поэлементное умножение дает следующий результат: Пример 3.5.3-15 >>c=a.* b c = 1.5200 -0.3900 11.5000 >> Аналогичным образом работает поэлементное деление - ./ (точка с косой чертой). Кроме того, операция .\ (точка с обратной косой чертой) осуществляет обратное поэлементное деление, то есть выражения a./b и b.\a эквивалентны. Возведение элементов вектора a в степени, равные соответствующим элементам b, производится с использованием операции - .^. Для транспонирования вектор-строк или вектор-столбцов предназначено сочетание - .' (точка с апострофом). Операции - ' и .' для вещественных векторов приводят к одинаковым результатам. Не обязательно применять поэлементные операции при умножении вектора на число и числа на вектор, делении вектора на число, сложении и вычитании вектора и числа. При выполнении, например, операции a*2, результат представляет собой вектор того же размера, что и a, с удвоенными элементами. Векторы могут быть аргументами встроенных математических функций, таких, как sin(), cos() и т. д. В результате получается вектор с элементами, равными значению вызываемой функции от соответствующих элементов исходного вектора, например: Пример 3.5.3-16 >>q=sin([0 pi/2 pi]) q = 0 1.0000 0.0000 >> Однако для вычисления более сложной функции от вектора значений, скажем, 2 αSinα α , α 1 ∗ ∗ где α, например, является вектором-строкой, состоящей из четырех элементов, выражение f=(α*sin(α)+α^2)/(α+1) вызовет ошибку уже при попытке умножения α на sin(α). Дело в том, что α является вектор-строкой длиной четыре, то есть хранится в двумерном массиве размером один на четыре. Точно также представлена и функция sin(α), следовательно, умножение при помощи звездочки (по правилу матричного умножения) лишено смысла. Аналогичная ситуация возникает и при возведении вектора α в квадрат, то есть, фактически, при вычислении α*α. Правильная запись выражения в MatLab требует использования поэлементных операций. |