Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ChM_V_INZhENERNYKh_RASChYoTAKh_chast_1

.pdf
Скачиваний:
13
Добавлен:
05.06.2015
Размер:
2.73 Mб
Скачать

Таблица A.2. Арифметические операторы и функции MATLAB

Функция

Название

Оператор

Синтаксис

Plus

Плюс

+

M1+M2

Uplus

Унарный плюс

+

+M

Minus

Минус

-

M1-M2

Uminus

Унарный минус

-

-M

Mtimes

Матричное умножение

*

M1*M2

Times

Поэлементное умноже-

.*

A1*A2

 

ние массивов

 

 

Mpower

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

^

M1^x

 

степень

 

 

Power

Поэлементное возведе-

.^

A1^x

 

ние массива в степень

 

 

Mldivide

Обратное (справа нале-

\

M1\M2

 

во) деление матриц

 

 

Mrdivide

Деление матриц слева

/

M1/M2

 

направо

 

 

Ldivide

Поэлементное деление

.\

A1.\A2

 

массивов справа налево

 

 

Rdivide

Поэлементное деление

./

A1./A2

 

массивов слева направо

 

 

Kron

Тензорное умножение

kron

kron(X,Y)

 

Кронекера

 

 

Transpose

Транспонирование

.'

A.’

Ctranspose

Транспонирование с

'

A’

 

комплексным сопряже-

 

 

 

нием

 

 

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

Оператор if

вычисляет логическое выражение (условие) и выполняет группу операторов. Ключевые слова elseif и else разделяют группы опе-

91

раторов. Ключевое слово end показывает конец последней группы операторов.

if условие операторы

elseif условие1

операторы

else

операторы

end

Пример использования оператора if

if a >= 0 M = n

elseif a-b ~= 0 M = 2*n

else M = 0 end

Для матриц A и B результат if A==B будет истина только в случае поэлементного равенства.

Оператор switch

Оператор switch выполняет группу операторов, в зависимости от значения переменной или выражения ключевые слова case и otherwise эти группы разделяют.

В отличие от языка Си оператор switch не «проваливается», т.е. после выполнения своего case другие case не исполняются, поэтому break использовать не надо.

Пример:

switch a + b case 0

M = 1; $ ‘;’ не выводить на экран case 1

92

M = n; $ ‘;’ не выводить на экран case 2

M = m+2; $ ‘;’ не выводить на экран otherwise

error( 'unknown case' ) end

Цикл for нач_значение :шаг :конечное_значение

Предназначен для повторения группы операторов фиксированное число раз. Если Ключевое слово end ограничивает тело цикла. Допустимы вложенные циклы.

for i = 1:m for j = 1:n

H(i,j) = 1/(i+j); $ ‘;’ не выводить на экран end

end

Цикл while условие

повторяет группу операторов пока условие истинно. End завершает повторяющуюся группу операторов.

Пример использования (нахождение корня полинома делением пополам):

a = 0;

 

% левая граница

b = 3;

 

% правая граница

Eps=.1e-05;

 

% точность

% начало цикла

 

 

while b-a > eps*b

% «b-a > eps*b» -условие

x = (a+b)/2;

 

% середина отр.

fx = x^3-2*x-5;

 

% текущее знач полинома

if sign(fx) == sign(a^3-2*a-5)

a = x;

%новая граница

93

else

 

b = x;

% новая граница

end

 

end

%конец цикла

x

 

Оператор break

досрочный выход из while и for циклов. Если циклы вложенные, то выход только из внутреннего цикла.

Операторы отношения предназначены для сравнения двух величин, векторов или матриц. Все операторы отношения имеют два операнда, например x и y, и записываются, как показано в таблица. П.3.

Таблица A.3. Операторы и функции отношения

Функция

Название

Оператор

Пример

Eq

Равно

==

x==y

Ne

Не равно

~=

x~=y

Lt

Меньше чем

<

x<y

Gt

Больше чем

>

x>y

Le

Меньше или равно

<=

x<=y

Ge

Больше или равно

>=

x>=y

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

Файл_сценарий, именуемый также Script_файлом, является просто записью серии команд без входных и выходных параметров. Он имеет такую структуру:

94

%Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями

Важны следующие свойства файлов_сценариев:

­они не имеют входных и выходных аргументов;

­работают с данными из рабочей области;

­в процессе выполнения не компилируются;

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

Рассмотрим следующий файл_сценарий:

%Plot with color red

%Строит график синусоиды линией красного цвета с % масштабной сеткой в интервале [xmin,xmax] x=xmin:0.1:xmax;

plot(x,sin(x),'r') grid on

Первые три строки, начинающиеся с %- комментарии.

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

Структура такого модуля с одним выходным параметром выглядит следующим образом:

function var=f_name(Список_параметров)

%Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями var=выражение

M_файл-функция имеет следующие свойства:

95

­он начинается с объявления function, после которого указываются имя переменной var – выходного параметра, имя самой функции и список ее входных параметров;

­функция возвращает свое значение и может использоваться в виде name(Список_параметров) в математических выражениях;

­все переменные, созданные в теле функции, являются локальными, то есть действуют только в пределах тела функции;

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

­функция служит средством расширения системы MATLAB;

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

Пример функции: Создание в файле fun1.m

function z=fun1(x,y) %Hipotenuze

z=x^2+y^2; % x,y,z локальные переменные

Использование функции

>>Q=fun1(3,4)

Q=

25

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

Для создания единичной матрицы (она обычно обозначается как E), которая имеет единичные диагональные элементы и нулевые все остальные, служит функция eye:

­ eye(n)– возвращает единичную матрицу размера n×n;

96

­eye(m,n)или eye([m n])– возвращают матрицу размера m×n с единицами по диагонали и нулями в остальных ячейках;

­eye(size(A))– возвращает единичную матрицу того же размера, что и A. Единичная матрица не определена для многомерных

массивов. Так, функция y=eye([2,3,4]) при попытке ее вычисления приведет к выводу сообщения об ошибке.

Для создания матриц, все (а не только диагональные) элементы которых – единицы, используется функция ones:

­ones(n)– возвращает матрицу размера n×n, все элементы которой – единицы. Если n– не скаляр, то появится сообщение об ошибке;

­ones(m,n) или ones([m n]) – возвращают матрицу размера m×n, состоящую из единиц;

­ones(d1,d2,d3,…) или ones([d1 d2 d3…]) – возвращают

массив из единиц с размером d1 d2 d3 ;

­ones(size(A)) – возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами, в

отличие от единичной матрицы, в MATLAB определена и для многомерных массивов.

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

­zeros(n)– возвращает матрицу размера n×n, содержащую нули. Если n–не скаляр, то появится сообщение об ошибке;

­zeros(m,n) или zeros([m n])– возвращают матрицу размера m×n, состоящую из нулей;

­zeros(d1,d2,d3,…) или zeros([d1 d2 d3…])– возвращают массив из нулей размера d1 d2 d3 ;

­zeros(size(A))– возвращает массив нулей того же размера и

размерности, что и А.

Свойства матриц сильно зависят от их диагональных элементов, то есть элементов, расположенных на той или иной диагонали мат-

97

риц. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами:

­X = diag(v,k)– для вектора v, состоящего из n компонентов, возвращает квадратную матрицу Хпорядка n+abs(k) с элементами vна k_ой диагонали, при k=0это главная диагональ (из левого верхнего угла матрицы в правый нижний угол), при k>0– одна из диагоналей (диагональ в терминологии MATLAB – это линия, параллельная главной диагонали) выше главной диагонали, при k<0– одна из нижних диагоналей. Остальные элементы матрицы – нули;

­X = diag(v)– помещает вектор v на главную диагональ (то же, что ив предыдущем случае при k=0);

­v = diag(X,k)– для матрицы Х возвращает вектор-столбец, состоящий из элементов k-ой диагонали матрицы Х;

­v = diag(X)– возвращает главную диагональ матрицы Х (то же, что и в предыдущем случае при k=0).

­Для перестановок элементов матриц служат следующие функции:

­B = fliplr(A)– зеркально переставляет столбцы матрицы А относительно вертикальной оси. Пример:

­B = flipud(A)– зеркально переставляет строки матрицы А относительно горизонтальной оси. Пример:

Несколько простых функций служат для перемножения элементов массивов: prod(A) – возвращает произведение элементов массива, если А – вектор, или вектор–строку, содержащую произведения элементов каждого столбца, если А – матрица;

­prod(A, dim) – возвращает матрицу (массив размерности два) с произведением элементов массива A по столбцам (dim=1), по строкам(dim=2), по иным размерностям в зависимости от значения скаляра dim.

­cumprod(A) – возвращает произведение с накоплением. Если А– вектор, cumprod(A) возвращает вектор, содержащий произ-

98

ведения с накоплением элементов вектора А. Если А– матрица, cumprod( A ) возвращает матрицу того же размера, что и А, содержащую произведения с накоплением для каждого столбца матрицы А (первая строка без изменений, во второй строке – произведение первых двух элементов каждого столбца, в третьей – элементы второй строки матрицы-результата умножаются на элементы третьей строки матрицы входного аргумента по столбцам и т. д.);

­cumprod(A,dim) – возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim. Определены следующие функции суммирования элементов массивов:

­sum(A) – возвращает сумму элементов массива, если А – вектор, или вектор-строку, содержащую сумму элементов каждого столбца, если А– матрица;

­sum(A,dim) – возвращает сумму элементов массива по столбцам (dim=1), строкам (dim=2) или иным размерностям, в зависимости от значения скаляра dim. таким образом выполняя умножение по столбцам матрицы A.

­cumsum(A) – выполняет суммирование с накоплением. Если А– вектор, cumsum(A) возвращает вектор, содержащий результаты суммирования с накоплением элементов вектора А. Если А– матрица, cumsum(A) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А;

­cumsum(A,dim) – выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim. Например, cumsum(A,1) выполняет суммирование по столбцам.

99

Учебное издание

Калядин Вячеслав Иванович Макаров Алексей Иванович Тихомиров Василий Николаевич

Численные методы в инженерных расчетах (часть 1)

Учебное пособие по дисциплине «Численные методы» для студентов, обучающихся по специальности Наземные транспортно-технологи- ческие средства. М.: Университет машиностроения, 2013. 100 с.: ил.

Под редакцией авторов

Оригинал-макет подготовлен редакционно-издательским отделом Московского государственного машиностроительного университета (МАМИ)

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

Подписано в печать __.__.13. Формат 60х90 1/16 Бумага 80 г/м2 Гарнитура «Таймс». Ризография. Усл. печ. л.

Тираж ____ экз. Заказ №

ФГБОУ ВПО «Московский государственный машиностроительный университет (МАМИ)»

107023. г. Москва, Б.Семеновская ул., 38

100

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