ОСНОВНЫЕ ПРИЕМЫ РАБОТЫ В СРЕДЕ MATLAB
ОСНОВНЫЕ ПРИЕМЫ РАБОТЫ В СРЕДЕ MATLAB
Методический практикум Алматы 2004
СОСТАВИТЕЛЬ: Ибраева Л.К.ОСНОВНЫЕ ПРИЕМЫ РАБОТЫ В СРЕДЕ MATLAB. Методический практикум – Алматы: АИЭС, 2004 - 49 с.
Система MatLAB (MATrix LABoratory) является интерактивной системой для выполнения инженерных и научных расчетов Методический практикум предназначен для преподавателей, аспирантов и студентов, желающих применять систему MATLAB при исследовании систем. В методическом практикуме описаны только основные приемы работы с системой. Назначение практикума – ознакомить пользователя с системой. При необходимости более полной информации по пакету, который предполагается использовать, необходимо обратиться к встроенной системе помощи или к дополнительной литературе. Каждый раздел практикума сопровождается примерами. Рекомендуется при изучении пакета выполнять эти упражнения – результат будет отражаться в командном окне. Поэтому в методических разработках не приведены окна с результатами (за исключением примеров раздела 3).
Рецензент: канд. техн наук, доц. С.Г.Хан
Печатается по плану издания Алматинского института энергетики и связи на 2004 г.
© Алматинский институт энергетики и связи, 2004 г. Система MatLAB (MATrix LABoratory) является интерактивной системой для выполнения инженерных и научных расчетов, ориентированной на работу с массивами данных. Она имеет встроенную матричную и комплексную арифметику. Основным объектом системы является прямоугольный числовой массив, который допускает комплексные элементы и ввод матриц без явного указания их размеров. Система MatLAB выполняет операции в режиме непосредственных вычислений без программирования, причем наряду с обычными арифметическими и алгебраическими операциями могут использоваться такие сложные операции, как обращение матрицы, вычисление ее собственных значений и векторов, решение систем линейных алгебраических уравнений и т.д. Основная отличительная черта системы – легкость ее модификации и адаптации к конкретным задачам пользователя. Пользователь может ввести в систему любую новую команду, оператор или функцию и пользоваться ими как встроенными, причем нет необходимости их описания. Достаточно сохранить их в виде файла с расширением .m. Работа в среде MatLAB может выполняться: - в режиме «калькулятора», когда вычисления производятся непосредственно в командном окне; - путем вызова программы (встроенной или пользовательской); - путем графической сборки модели исследуемой системы – пакет Simulink.
1. MatLAB как научный калькулятор
Ввод чисел выполняется по обычным правилам языков программирования; десятичный показатель записывается в виде целого числа после символа e. Формат чисел: Файл-Свойства Арифметические действия: + – * / \ ^ Вывод результата: - Если оператор не заканчивается символом «;» (точка с запятой), результат сразу отображается в командном окне. - Если оператор не содержит знака присваивания, то значение результата присваивается системной переменной ans. - Общая форма: <имя переменной> = <результат> Имена переменных могут использоваться для хранения промежуточных результатов.
Пример 1.1: >> 25 + 17; >>ans*7 ans = 294
Зарезервированные имена переменных: i, j - мнимая единица; pi – число π; ans – результат последней операции без знака присваивания. Некоторые элементарные функции: sin(z), sinh(z), asin(z), cos(z), cosh(z), acos(z), tan(z), atan(z), exp(z), log(z), log10(z), sqrt(z), abs(z), round(z).
Комплексные числа вводятся в виде: <имя переменной> = <значение действ.части> + i (либо j)*< значение мнимой части> Простейшие действия с комплексными числами производятся с использованием приведенных выше операций.
Пример 1.2: >> x=1+2i; y = -3+4i; >>disp(x+y) -2.0000+6.0000i
Здесь использована функция disp, которая также позволяет выводить в командное окно результаты вычислений или некоторый текст. Функции комплексного аргумента: real(z) – выделяет действительную часть комплексного аргумента; imag(z) – выделяет мнимую часть комплексного аргумента; angle(z) – вычисляет значение аргумента комплексного числа (в радианах от – π до + π). Пример 1.3: Наберите в командном окне: >>disp(real(y) >>disp(imag(y)0 >>disp(angle(y))
MatLAB специально предназначен для вычислений с векторами, матрицами и полиномами. Любая заданная переменная по умолчанию является вектором или матрицей. Ввод вектора: V1 = [1.2 2.3 3.4 4.5] (вместо пробелов можно использовать запятые). Длинные векторы можно вводить частями, а затем объединять: v=[v1 v2]. Если элементы вектора являются арифметической прогрессией, то его можно ввести следующим образом: V = nz: h: kz (nz – начальное значение, h – шаг, kz – конечное значение). По умолчанию шаг принимается равным 1. Чтобы ввести вектор-столбец, его элементы нужно отделять точкой с запятой.
Пример 1.4: Введите в командное окно >>v1[1 2 3];v2=[4 5 6]; >>v=[v1 v2]
Действия над векторами одинаковой структуры: Сложение и вычитание векторов: + и - Транспонирование – знак апострофа (например, х'). Умножение вектора на число: *. Умножение двух векторов: * (по правилам математики- для векторов одинакового размера и лишь тогда, когда один из векторов-сомножителей является строкой, а другой – столбцом; в противном случае, один из векторов надо транспонировать). Векторное произведение (для трехкомпонентных векторов): cross (v1 v2) Предусмотрено несколько операций поэлементного преобразования векторов (и матриц); все эти операции преобразуют элементы вектора как элементы обычного одномерного массива чисел. К таким операциям принадлежат все элементарные математические функции одного аргумента (некоторые были приведены выше). Например, запись Y = sin(X), где Х – известный вектор, приводит к формированию нового вектора Y, элементы которого равны синусу соответствующих элементов вектора Х. Кроме этих операций предусмотрено несколько операций, которые выполняются с помощью знаков обычных арифметических действий (применяются к векторам одинакового типа и размера): Добавление числа к каждому элементу вектора (аналогично, вычитание): + и - Поэлементное умножение векторов:. * (перед знаком умножения – точка) Поэлементное деление векторов:. / (перед знаком деления – точка) Поэлементное возведение в степень:. ^ (перед знаком степени – точка) Эти операции позволяют вычислять значения сложных функций, не используя операторы цикла.
Пример 1.5: Вычисление значений функции Y = a*exp(-k*x)*sin(x) при значениях аргумента x от 0 до 10 с шагом 1 можно выполнить при помощи следующих операторов: >> a=3; k=0.5; >> x = 0:1:10; >>y= a*exp(-k*x).*sin(x) Элементы матрицы вводятся в квадратных скобках по строкам. При этом элементы строки отделяются друг от друга пробелом или запятой, строки отделяются точкой с запятой.
Пример 1.6: Введите в командное окно: >>A=[2 4 5 8 10; 5 6 8 9 7] MatLAB имеет функции, которые позволяют формировать векторы и матрицы определенного вида. Некоторые из них: zeros(m,n) – создает матрицу m*n с нулевыми элементами; ones(m,n)- создает матрицу m*n с единичными элементами; eye(m,n)- создает матрицу m*n с единицами на главной диагонали и остальными нулевыми элементами; rand(m,n) - создает матрицу m*n из случайных чисел, равномерно распределенных на (0,1); randn(m,n) - создает матрицу m*n из случайных чисел, распределенных по нормальному закону с нулевым математическим ожиданием и дисперсией, равной 1. Поэлементное преобразование матриц – аналогично действиям с векторами.
Пример 1.7: >> A = [1,2,3,4,5; -2,3,1,4,8] >> B = [1,3,5,-2,1;1,8,-3,-1,2] >> sin(A) >> A.*B
Матричные действия с матрицами: Базовые действия с матрицами выполняются с помощью обычных знаков арифметических операций. Функция обращения матрицы – inv(A).
Пример 1.8: >> A = [1 2 3 4 5; 6 7 8 9 10] >>A’ >> B =[ 0 -1 -2 – 3 -4; 5 6 7 8 9] >> A’*B >> C=A*B’ >> inv(C) >> inv(ans) % для проверки обращение применяется к результату >> A=[1 2;3 4] >>A^2 % действие эквивалентно умножению матрицы на себя >>A^(-2) % при отрицательной степени выполняется умножение обратной матрицы на себя
Действие деления матриц (которого не существует в математике): / (или \). Действие В/А аналогично действиям B*inv(A); его удобно использовать для решения матричного уравнения X*A=B; действие A\B аналогично действиям inv(A)*B; удобно использовать для решения матричного уравнения A*X=B.
Пример 1.9: Требуется решить систему уравнений: X1 + 2X2 + 3X3 = 14 2X1 + X2 - 5X3 = -15 X1 - X2 - X3 = -4 Решение: >> A=[1 2 3;2 1 -5;1 -1 -1] >> B=[14;-15;-4] >> x=A\B
Операции с полиномами Полином хранится в виде вектора, элементами которого являются коэффициенты полинома: P = [an … a2 a1 a0] Некоторые функции: conv(P1,P2) – умножение двух полиномов; deconv(P1,P2) – деление полинома P1 на полином P2; roots(P) – вычисление вектора, элементы которого являются корнями заданного полинома; poly(r) – построение вектора полинома по заданному вектору его корней; polyval(p,x) – вычисление значения полинома по заданному значению его аргумента; polyder(p) – вычисление производной от полинома.
Пример 1.10: Найдем корни полинома P(x) = x5 + 8x4 + 31x3 + 80x2 + 94x + 20. >>p=[1,8,31,80,94,20]; >>disp(roots(p)) Вычислим значение полинома при х=2: >>y=polyval(p,2);
Обработка данных измерений Система дает возможность обработки данных, которые заданы в векторной или матричной форме. max(V) – выдает значение максимального по значению элемента вектора V; min(V) – выдает значение минимального по значению элемента вектора V; sort(V) – формирует вектор, элементы которого распределены в порядке возрастания из значений; sum(V) – вычисляет сумму элементов вектора V; prod(V) – вычисляет произведение всех элементов вектора V; trapz(x,y) – осуществляет интегрирование методом трапеций (вычисляется площадь под графиком функции y(x), в котором все точки, заданные векторами x и y, соединены отрезками прямых.
Аппроксимация и интерполяция данных Система предоставляет удобные процедуры для аппроксимации и интерполяции данных измерений. polyfit(X,Y,n) – полиномиальная аппроксимация, n – порядок аппроксимирующего полинома; X,Y – вектора аргументов и значений функции; результатом будет вектор коэффициентов полинома длиной (n + 1). spline(X,Y,Xi) – интерполяция кубическими сплайнами.
Пример 1.11: >> x = [1 2 3 4 5 6 7 8]; >> y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]; >> polyfit(x,y,1) ans = 0.1143 -0.2393 Это означает, что заданная зависимость аппроксимирована прямой: y(x) = 0.1143x – 0.2393
Построение графиков Основной функцией, обеспечивающей построение графиков, является функция plot. Обращение к этой процедуре: plot(x1,y1,s1,x2,y2,s2.,…) Здесь x1,y1 - заданные векторы, элементами которых являются массивы значений аргумента (x1) и функции (y1), соответствующих первой кривой графика; x2,y2 – массивы значений аргумента и функции второй кривой графика и т.д. Переменные s1, s2 являются символьными (их указание не обязательно, они определяют тип линии, тип точки графика и цвет линии). Графики выводятся в отдельном графическом окне, которое называется фигурой; для нанесения на график координатных линий следует записать после обращения к функции plot функцию grid. Пример 1.12: Пусть требуется вывести график функции y=3sin(x+π/3) на промежутке от -3π до +3π с шагом π/100. >>x=-3*pi:pi/100:3*pi; >>y=3*sin(x+pi/3); >>plot(x,y), grid
Заголовок графика выводится с помощью процедуры title(‘текст’), надписи к осям – процедурами xlabel(‘текст’), ylabel(‘текст’). Пример 1.13: >>x=-3*pi:pi/100:3*pi; >>y=-3*sin(x+pi/3); >>plot(x,y), grid >>title(‘Функция y=3sin(x+π/3)); >>xlabel(‘x’); ylabel(‘y’)
Пример 1.14: Дополним пример 1.11. Построим в одном графическом окне графики заданной дискретной функции и графики аппроксимирующих полиномов первого, второго, третьего и четвертого порядков:
>> x = [1 2 3 4 5 6 7 8]; >> y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]; >> P1=polyfit(x,y,1); >> P1=polyfit(x,y,2); >> P1=polyfit(x,y,3); >> P1=polyfit(x,y,4); >>stem(x,y); >>hold >>x=0.5:0.05:8.5; >>y1=polyval(P1,x1); >>y2=polyval(P2,x2); >>y3=polyval(P3,x3); >>y4=polyval(P4,x4); >>plot(x1,y1,x2,y2,x3,y3,x4,y4); >>grid: >>title(‘Полиномиальная аппроксимация’); >>xlabel(‘argument’); >>ylabel(‘function’)
Здесь процедура stem(x,y) используется для представления графика дискретной функции в виде отдельных вертикальных линий для каждого из значений аргумента; x, y – векторы аргументов и значений функций; для отражения графика дискретной функции на той же фигуре, что и полиномы, после обращения к функции stem записывается функция hold. При построении графика функции можно не указывать ее аргумент. В этом случае в качестве аргумента система принимает номер элемента вектора, график которого строится.
Пример 1.15: >> x= [1 3 2 9 6 8 4 9 -6]; >> plot(x) >> grid >> title (‘График вектора x') >> ylabel (‘значения элементов’) >> xlabel (‘номер элемента’)
Более наглядно представить вектор в виде столбчатой диаграммы (функция bar): >> bar(x) >> title (‘График вектора x') >> ylabel (‘значения элементов’) >> xlabel (‘номер элемента’)
2 Программирование в среде MatLAB
Программа создается в окне установленного редактора:
|