Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 1_н.docx
Скачиваний:
11
Добавлен:
10.02.2016
Размер:
660.2 Кб
Скачать

2 Арифметические вычисления

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

Основным типом данных, с которыми работает MATLAB, являются массивы. Чаще всего в математических вычислениях используются одно мерные (векторы) и двумерные массивы (матрицы).

Чтобы задать вектор-строку, то есть массив размера 1 × n, необходимо заключить ее элементы в квадратные скобки, разделив их запятыми или пробелами.

>> a = [1 2 3]

a =1 2 3

Вектор-столбец задается похожим образом, только в качестве разделителя следует использовать точку с запятой.

>> b = [1; 2; 3]

b =

1

2

3

Вектор-столбец может быть преобразован в вектор-строку с помощью операции транспонирования символом которой является апостроф (').

>> b'

ans =1 2 3

Для формирования матрицы применяются оба типа разделителей.

>> A = [1 2 3; 4 5 6; 7 8 9]

A =

1 2 3

4 5 6

7 8 9

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

Функция zeros, например, используется для создания матриц, заполненных нулями.

>> zeros(3)

ans =

0 0 0

0 0 0

0 0 0

С помощью функции eye можно построить единичную матрицу.

>> eye(3)

ans =

1 0 0

0 1 0

0 0 1

Функция magic строит магический квадрат – матрицу, у которой сумма элементов каждой строки, каждого столбца и каждой диагонали одинакова.

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

Элементами массивов могут быть вещественные и комплексные числа с плавающей точкой.

В MATLAB используется аппаратно реализованная арифметика двойной точности для десятичных чисел с плавающей точкой.

В MATLAB вещественные числа по модулю могут находится в интервале [10−308,10308].

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

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

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

Таким образом, правильная запись в MATLAB числа −1234.5678 должна иметь следующий вид.

>> -1.2346e+003

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

>> -1234.5678

ans =

-1.2346e+003

>> -1.2346*10^3

ans =

-1.2346e+003

Количество значащих десятичных цифр при вычислениях в MATLAB может достигать 15-16. Однако для большей компактности результата при выводе в командное окно часть значащих цифр обычно отбрасывается.

По умолчанию система использует компактный формат, задаваемый командой format short. Переключиться в режим вывода большего числа знаков после десятичной точки можно, выполнив команду format long.

>> format long

>> pi

ans =

3.14159265358979

>> format short

>> pi

ans =

3.1416

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

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

>> 1/0

ans =

Inf

В тех случаях, когда результат не определен, что происходит, например, при делении 0 на 0, возвращается специальная константа NaN (Not aNumber).

>> 0/0

ans =

NaN

Комплексные числа в MATLAB представляются в памяти компьютера парой чисел с плавающей точкой и записываются в форме a+bi (или a+bj), где символом i (или j) обозначается мнимая единица. Обрати те внимание, что символ операции умножения между мнимой единицей и мнимой частью комплексного числа ставить не следует. Это связано с тем, что система MATLAB допускает пере обозначение переменных i и j,>> z = 5+7i

z =

5.0000 + 7.0000i

С помощью функций real и imag можно выделить вещественную и мнимую части комплексного числа.

>> real(z)

ans =5

>> imag(z)

ans =7

Функция complex позволяет сконструировать комплексное число из упорядоченной пары вещественных чисел.

>> complex(3, 5)

ans =

3.0000 + 5.0000i

Функция conj возвращает комплексно-сопряженное число (символом комплексного сопряжения в MATLAB является также апостроф).

>> z’

ans =

5.0000 - 7.0000i

Модуль и аргумент комплексного числа можно вычислить при помощи функций abs и angle.

>> abs(z)

ans =

8.6023

>> angle(z)

ans =

0.9505

При работе в MATLAB необходимо учитывать две существенные особенности реализации арифметических вычислений в этой системе.

Во-первых, в MATLAB все скалярные переменные трактуются как массивы размера 1 × 1. Действительно, если присвоить следующие значения переменным и с помощью команды whos вывести в командное окно информацию об этих переменных, то можно увидеть, что обе скалярные переменные рассматриваются системой MATLAB как одноэлементные векторы из чисел с плавающей точкой (doublearray и doublearray(complex

>> x = 2;

>> y = 1-i;

>> a = [1 2 3];

>> A = [ 1 2 3; 4 5 6; 7 8 9];

>> whos

Name Size Bytes Class

A 3x3 72 double array

A 1x3 24 double array

x 1x1 8 double array

y 1x1 16 double array (complex)

Grand total is 26 elements using 216 bytes

Кроме того, при выполнении арифметических операций MATLAB стремится, насколько это возможно, выполнить приведение операндов к одному размеру.

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

>> a + x

ans =

3 4 5

>> A - x

ans =

-1 0 1

2 3 4

5 6 7

Второй особенностью арифметики MATLAB является наличие в этой системе двух комплектов символов для операций умножения, деления и возведения в степень. Один набор операций имеет традиционную символику (*, /, ^) и выполняется для массивов по правилам линейной алгебры.

Второй набор имеет ту же символику, перед которой ставится точка(.*, ./, .^), при этом операции выполняются поэлементно.

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

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

>> A = [1 2; 3 4];

>> B = [2 4; 6 8];

>> b = [5; 6];

>> C = [1 2 3; 4 5 6];

>> D = [-4 5 -6; 1 -2 3];

Умножение матриц и векторов в линейной алгебре возможно только в том случае, если число столбцов первого сомножителя равно числу строк второго. Операция правого деления двух матриц эквивалентна умножению делимой матрицы на обратную матрицу делителя (A/B = AB−1).

>> A*b

ans =

17

39

>> B/A

ans =

2 0

0 2

Поэлементное умножение или деление массивов осуществимо толькотогда, когда они имеют одинаковые размеры.

>> C.*D

ans =

-4 10 -18

4 -10 18

>> C./D

ans =

-0.2500 0.4000 -0.5000

4.0000 -2.5000 2.0000

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

>> A^3

ans =

37 54

81 118

Операцию поэлементного возведения в степень можно применить к любой матрице.

>>A.^3

ans =

1 8

27 64

>>C.^2

ans =

1 4 9

16 25 36

В системе MATLAB определены все элементарные и большая часть специальных функций:

  • sqrt(x) – квадратный корень;

  • exp(x), log(x) – экспонента и натуральный логарифм;

  • sin(x), cos(x), tan(x), cot(x), sec(x), csc(x) – тригонометрические функции;

  • asin(x), acos(x), atan(x), acot(x), asec(x), acsc(x) –обратные тригонометрические функции;

  • sinh(x), cosh(x), tanh(x), coth(x), sech(x), csch(x) – гиперболические функции;

  • asinh(x), acosh(x), atanh(x), acoth(x), asech(x), acsch(x)обратные гиперболические функции;

  • erf(x) – функция ошибок;

  • gamma(z) — гамма-функция;

  • airy(z), airy(2,z) — функции Эйри первого и второго порядка;

  • besselj(k,z), bessely(k,z), besseli(k,z), besselk(k,z)

  • функции Бесселя первого и второго рода и модифицированные функции Бесселя.

Аргументами любой математической функции в MATLAB могут быть как вещественные, так и комплексные числа. В случае комплексного аргумента возвращается главное значение функции.

>> atan(1)

ans =

0.7854

>> sqrt(1+i)

ans =

1.0987 + 0.4551i

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

>> exp( [1 2 3 4 5] )

ans =

2.7183 7.3891 20.0855 54.5982 148.4132

>> A = [ pi/2 pi/3; pi/6 -pi/2]

A =

1.5708 1.0472

0.5236 -1.5708

>> sin(A)

ans =

1.0000 0.8660

0.5000 -1.0000

.

Символьные вычисления в MATLAB

Система MATLAB сама по себе способна выполнять только численные рас-

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

переменные, не имеющие числового значения, то получим сообщение об

ошибке.

>> (x-1)^2

??? Undefined function or variable ’x’.

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

Реализовано это подключение при помощи пакета Symbolic Math Toolbox.

Символьные операции можно выполнять только в том случае, если все

операнды в выражении имеют символьный тип (sym). Приведение числовых констант и переменных к символьному типу осуществляется посредством функции sym.

В MATLAB осуществляется перегрузка2арифметических операций и

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

символьный тип.

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

>> a = sym(1/2);

>> b = sym(1/3);

>> c = a + b

c =

5/6

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

>> whos

Name Size Bytes Class

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

a 1x1 130 sym object

b 1x1 130 sym object

c 1x1 130 sym object

При символьных вычислениях, собственно, вычислений в привычном смысле не происходит. Вычисления в этом случае правильнее называть символьными преобразованиями.

Вычислим значение функции синус в точке π/3.

>> phi = sym(pi/3)

phi =

pi/3

>> s = sin(phi)

s =

1/2*3^(1/2)

Не совсем изящный вид результата в данном случае объясняется невозможностью отображения в командном окне символа радикала.

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

>> phi = sym(pi/7);

>> s = sin(phi)

s =

sin(1/7*pi)

Символьная константа всегда может быть аппроксимирована числом сплавающей точкой. При этом такая аппроксимация может быть выполнена как системой MATLAB (с помощью функции double), так и вычислительным ядром Maple (функцией vpa из пакета Symbolic Math Toolbox).

В первом случае символьная константа преобразуется в число типа double, то есть стандартное в MATLAB число с плавающей точкой двойной точности.

>> s1 = double( s )

s1 =

0.4339

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

>> s2 = vpa( s,100)

s2 =

.433883739117558120475768332848358754\

60999072778745987644454730353220325165\

31984215207840217744561022

>> whos

Name Size Bytes Class

s 1x1 146 sym object

s1 1x1 8 double array

s2 1x1 326 sym object

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

Раскроем скобки в алгебраическом выражении (expand), а полученный результат разложим на множители (factor).

>> syms x y

>> f = (x-y)^3

f =

(x-y)^3

>> g = expand( f )

g =

x^3-3*x^2*y+3*x*y^2-y^3

>> factor( g )

ans =

(x-y)^3

Функция simplify обеспечивает упрощение выражений.

>> h = sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x)

h =

sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x)

>> simplify( h )

ans =

cos(x)^4

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

Графики в MATLAB

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

В этом подразделе мы не будем рассматривать приемы создания графиков в системе MATLAB (этому посвящена отдельная глава) и ограничимся только знакомством с элементами управления графического окна.

Выполним построение графика функции с помощью команды ezplot.

>> ezplot(’sin(x)/x’)

На экране появится графическое окно (рис. 1.3), в котором, помимо координатных осей и графика функции, имеется собственная строка меню и панель инструментов. В заголовке окна будет указан его порядковый номер (Figure No. 1).

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

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

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

Графики в MATLAB

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

В этом подразделе мы не будем рассматривать приемы создания графиков в системе MATLAB ( этому посвящена отдельная глава) и ограничимся только знакомством с элементами управления графического окна.

Выполним построение графика функции с помощью команды ezplot.

>> ezplot(’sin(x)/x’)

На экране появится графическое окно (рис. 1.3), в котором, помимо координатных осей и графика функции, имеется собственная строка меню и панель инструментов. В заголовке окна будет указан его порядковый номер (Figure No. 1).

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

Чтобы изменить толщину, стиль и цвет линии графика, надо щелкнуть мышью сначала по кнопке , расположенной на панели инструментов, а затем точно по линии графика. Линия будет выделена. Теперь, щелкнув правой кнопкой мыши, можно вызвать контекстное меню, содержащее пункты Line Width (Толщина линии) Line Style (Стиль линии) и Color(Цвет).

Рис. 1.3. Графическое окно системы MATLAB

Увеличьте толщину линии, поменяйте цвет и сделайте ее, например, штрихпунктирной.

Теперь, выбрав последовательно в строке меню пункты Insert и Title, снабдите график соответствующим заголовком.

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

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

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

Если теперь построить еще один график, то он будет выведен в то же окно, на место предыдущего. Поэтому при необходимости иметь на экране

два графика в разных окнах надо, выполнив команду figure, создать еще одно графическое окно (Figure No. 2).

Построим теперь в новом окне график функции двух переменных.

>> ezsurf(’sin(x^2+y^2)/(x^2+y^2)’)

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

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

Управлять всеми этими параметрами наиболее удобно с помощью редактора свойств графического окна (Property Editor), вызвать который можно, выбрав в меню пункты Edit и Figure Properties. В раскрывающемся списке (Edit Properties for:), расположенном в верхней части этого редактора,

следует выбрать объект, свойства которого необходимо изменить. При выборе объекта axes можно изменять любые свойства координатных осей, а при выборе surface получить возможность управлять свойствами самого графика.

Мы рекомендуем вам самостоятельно поэкспериментировать с редактором свойств графического окна.

Экспорт графиков во внешние форматы

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

В случае если этой программой является Microsoft Word, достаточно просто скопировать графическое окно, последовательно выбрав в его строке меню пункты Edit и Copy Figure. При этом изображение записывается в буфер обмена в виде стандартного метафайла (EMF) и может быть вставлено в любую часть документа.

Рис. 1.6. Редактор свойств графического окна MATLAB

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

Затем надо сохранить рисунок на диск в одном из поддерживаемых форматов. Для этого следует выбрать в строке меню графического окна пункты File и Export. В появившемся диалоговом окне следует указать имя файла, в который должен быть записан рисунок, и выбрать формат, в котором это должно быть сделано. Наилучшим векторным форматом является EPS, а растровым — TIFF.

Вставку графика в публикацию следует выполнять в соответствии с правилами импорта рисунков вашей программы верстки.

MATLAB Notebook

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

Однако вместе с MATLAB поставляется надстройка MATLAB Notebook для Microsoft Word, которая позволяет, работая в этом текстовом процес соре, напрямую обращаться для проведения расчетов к ядру MATLAB, причем результаты этих расчетов, включая графики, будут автоматически помещаться в редактируемый вами документ (рис. 1.7).

Перед первым использованием MATLAB Notebook данную надстройку необходимо установить. Для этого следует выполнить команду notebookс ключом -setup и выбрать из предложенного списка установленную навашем компьютере версию Microsoft Word.

>> notebook -setup

Welcome to the utility for setting up the

MATLAB Notebook for interfacing MATLAB

to Microsoft Word

Choose your version of Microsoft Word:

[1] Microsoft Word 97

[2] Microsoft Word 2000

[3] Microsoft Word 2002 (XP)

[4] Exit, making

no changes

Microsoft Word Version:

Чтобы создать новый документ M-Book, можно либо выполнить команду notebook, либо выбрать в меню File редактора MicrosoftWord пунктNewM-Book.

При наборе и форматировании текста, вводе таблиц и формул с M-Book можно работать точно так же, как и с обычным текстовым документом Microsoft Word.

Если же вы захотите выполнить какое-либо вычисление с помощью MATLAB, вам следует начать новый параграф, набрать соответствующую команду и нажать комбинацию клавиш [Alt-D]. После этого введенное выражение сменит цвет шрифта на зеленый. Теперь нажатием клавиш [Ctrl-Enter] можно отправить это выражение системе MATLAB. Результат вычислений, если он не является графиком, будет выведен шрифтом синего цвета.

Рис. 1.7. Использование MATLAB Notebook

Рис. 1.8. Редактор программного кода MATLABРис. 1.8. Редактор программного кода MATLAB

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]