Матлаб. К. Ю. Петрова введение в matlab учебное пособие
Скачать 2.57 Mb.
|
conv (сокращение от convolution. Рассмотрим произведение двух квадратных трехчленов: 2 13 24 17 4 2 1 ; 1 5 4 2 ; 2 3 1 2 3 4 2 2 x x x x P P P x x P x x P Вычислим коэффициенты результирующего полинома четвертой степени в MATLAB: >> Р1=[1 3 2]; Р2=[4 5 1]; Р= conv(P1,P2). Получим ответ: Р= 4 17 24 13 2. Обратная операция – деление полиномов – выполняется по команде deconv. Результат операции деления полиномов представляет собой частное и остаток. Пример. Найдем целую часть и остаток неправильной рациональной дроби 2 3 2 1 5 4 2 3 4 14 24 17 4 2 2 2 2 3 4 x x x x x x x x x x x Выполним это деление в MATLAB: >> num=[4 17 24 14 4]; den=[1 3 2]; [q,r]=deconv(num,den), Результат будет иметь вид q = 4 5 1, r = 0 0 0 1 2. Здесь вектор q характеризует целую часть деления, а вектор r – остаток. Отношение двух полиномов относится к классу так называемых дробно-рациональных функций. Именно такой вид имеют, например, передаточные функции систем автоматического управления. С ними часто приходится делать две типовые операции – разложение передаточной функции в сумму элементарных дробей и обратное действие – сложение элементарных дробей, т.е. приведение их к общему знаменателю. В MATLAB обе эти операции могут быть выполнены с помощью команды residue. Пример. Пусть требуется разложить на элементарные дроби рациональную функцию 2 3 5 2 2 1 1 2 r x k r x k x x x При «ручном» счете сначала находят числа r 1 , r 2 – это корни знаменателя: r 1 = -2, r 2 = -1. Затем для определения неизвестных коэффициентов k 1 , k 2 приравнивают числители правой и левой частей: ). 2 ( ) 1 ( 5 2 1 x k x k x Отсюда 5 2 , 1 2 1 2 1 k k k k Решая эту систему, находим 4 , 3 2 1 k k Выполним указанное разложение с помощью команды residue. Ее входными аргументами являются числитель num и знаменатель den исходной дроби, выходными аргументами – векторы R, K, содержащие коэффициенты знаменателей и числителей элементарных дробей (полюсы и вычеты исходной функции). Набрав >>num=[1 5]; den=[1 3 2]; [K, R]=residue(num, den), получим результат K=[-3 4], R=[-2 -1], . Следовательно, искомое разложение имеет вид 2 3 1 4 2 3 5 2 x x x x x 17 В общем случае корни знаменателя могут оказаться комплексными и кратными, кроме того, исходная дробь может быть неправильной (порядок числителя больше или равен порядку знаменателя). Об особенностях применения команды в этих случаях можно узнать с помощью справки help residue. При вызове с синтаксисом [num, den]=residue(R, K, P) команда выполняет обратное действие – находит сумму элементарных дробей, характеризуемых параметрами R, K и полиномом Р, заданным вектором своих коэффициентов. Одно из применений этого варианта команды – сложение комплексно-сопряженных пар дробей для получения вещественных элементарных дробей второго порядка. 1.6. Собственные числа и векторы С необходимостью вычисления собственных чисел и векторов приходится сталкиваться при решении многих физических и технических задач, таких как определение осей эллипсоида инерции тяжелого тела, определение собственных частот колебаний электрических и механических систем, решение систем дифференциальных уравнений, приведение линейных систем к каноническому виду. Напомним, что собственными числами или собственными значениями квадратной матрицы А называются корни ее характеристического полинома. Характеристический полином находим, раскрывая определитель , det 0 1 1 1 a a a E A n n n где Е – единичная матрица, n – размерность матрицы А. Приравнивая его нулю, получим характеристическое уравнение матрицы А. Найдем характеристический полином при n=2: det 21 12 22 11 22 11 2 21 12 22 11 22 21 12 11 a a a a a a a a a a a a a a Заметим, что коэффициент при равен следу матрицы А, взятому с минусом, а свободный член равен ее определителю. Поэтому характеристическое уравнение можно записать в виде 0 det tr 2 A A Корни 2 1 , этого уравнения и будут собственными числами матрицы А. В MATLAB для получения характеристического полинома матрицы А можно воспользоваться командой poly(A). Ее результатом будет вектор коэффициентов характеристического полинома. Корни этого полинома находим командой roots. Найдем, например, собственные числа матрицы : 3 0 2 1 >>A=[1 2; 0 3]; p=poly(A); L=roots(p). В результате выполнения этих команд на экран будут выведены собственные числа 1 и 3. Более короткий путь получения собственных чисел состоит в применении команды eig (от немецкого «eigen» – собственный). Для нашего примера, вводя код L=eig(A), получаем вектор- столбец собственных чисел с элементами 1; 3. Отметим, что матрица А в примере была треугольной, поэтому собственные числа равны ее диагональным элементам. 18 Перейдем к определению собственных векторов квадратной матрицы. Вектор H называется собственным вектором матрицы А, если в результате его умножения на матрицу он не изменяет своего направления, а лишь удлиняется или укорачивается. Алгебраическая запись этого условия имеет вид AH = λH или (A-λE)H = 0, (*) где коэффициент показывает, во сколько раз изменяется длина вектора. Для того чтобы однородная система (*) имела ненулевое решение H, необходимо, чтобы определитель системы равнялся нулю: 0 det E A Последнее равенство представляет собой характеристическое уравнение матрицы А. Следовательно его корни , , , 1 n т.е. собственные числа, надо поочередно подставлять в уравнение (*), чтобы найти собственные векторы, причем каждому собственному числу i будет отвечать свой собственный вектор H i Замечание 1. Если все собственные числа n , , 1 различны, то у матрицы А будет n линейно независимых собственных векторов H 1 , …, H n Замечание 2. Поскольку определитель системы (A – λ i E)H i = 0 равен нулю, то одно из уравнений этой системы будет линейной комбинацией других, т.е. «лишним» и его следует отбросить. Решение оставшейся системы будет определено с точностью до произвольной константы. Геометрически это означает, что если H 1 – собственный вектор матрицы А, то и k H 1 , где k – любое число, также собственный вектор. В пакете MATLAB при вычислении собственных векторов константа k обычно выбирается так, чтобы собственные векторы имели единичную длину (чтобы сумма квадратов их компонент равнялась единице). Замечание 3. Если матрица А – симметрична, то ее собственные числа вещественны, а собственные векторы – ортогональны. У несимметричных матриц все или часть собственных чисел и векторов могут оказаться комплексными. Чтобы найти собственные векторы матрицы в пакете MATLAB, надо использовать команду eig с двумя выходными параметрами [H,L]=eig(A). При этом столбцами матрицы H будут служить собственные векторы матрицы А, а диагональными элементами матрицы L – соответствующие им собственные числа. Пример. Дана матрица второго порядка 2 3 2 1 A Чтобы найти ее собственные числа, выписываем характеристический полином 4 3 6 2 1 2 3 2 1 det 2 E A Его корни вещественны 4 , 1 2 1 Матричное уравнение для определения первого собственного вектора имеет вид 2 3 2 1 , 2 1 2 1 1 1 1 h h h h H AH Ему соответствует система двух скалярных уравнений 0 3 3 , 0 2 2 2 3 2 2 1 2 1 2 2 1 1 2 1 h h h h h h h h h h 19 Они отличаются только постоянным множителем и эквивалентны уравнению 0 2 1 h h Принимая, например, , 1 1 h получаем , 1 2 h т.е. первый собственный вектор равен 1 1 1 H Аналогичным образом получаем систему уравнений для определения второго собственного вектора: 0 2 3 , 0 2 3 4 2 3 4 2 2 1 2 1 2 2 1 1 2 1 h h h h h h h h h h Полагая , 2 1 h получаем , 3 2 h т.е. второй собственный вектор равен 3 2 2 H Заметим, что его можно записать также в виде 2 / 3 1 2 H или 1 3 / 2 2 H Решим эту задачу в MATLAB с помощью команд: >> A=[1 2;3 2]; [H,D]=eig(A) В результате получаем матрицы: A H D 1 2 3 2 -0.7071 -0.5547 0.7071 -0.8321 -1 0 0 4 Заметим, что MATLAB выдал нормированные собственные векторы. Пример. Найдем характеристический полином и собственные числа матрицы третьего порядка 1 1 1 1 1 2 1 2 3 B Используя команды poly и eig, получаем: >>B=[3 2 1; 2 1 1; 1 1 1] >>v=poly(B) >>eig(B) B=3 2 1 2 1 1 1 1 1 v=1 -5 1 1 ans= -0.3489 0.6041 4.7448 Второй коэффициент характеристического полинома, взятый с обратным знаком, равен сумме собственных чисел и следу матрицы B. 1.7. Символьные вычисления в MATLAB Для проведения символьных вычислений необходим тулбокс SYMBOLIC пакета MATLAB. Если он установлен, то имеется возможность выполнять аналитические преобразования формул с буквенными коэффициентами, производить численные расчеты без округлений, строить графики функций, заданных в неявной форме. Формирование символьных переменных производится командами sym и syms, например, sym(2) или syms x y z. После этого можно вводить математические выражения, содержащие эти числа или переменные. 20 Перечень основных символьных алгебраических операций приведен в табл. 6. Таблица 6 det rank inv expand simple solve diag poly eig factor collect numden Первые три столбца в этой таблице содержат перечень операций над матрицами, которые могут выполняться как в числовой, так и в символьной форме. Например, набрав в командном окне текст >>syms a b c d; A=[a b;c d], D=det(A) и нажав Enter, получим ответ * * , , , c b d a D d c b a A По команде P=poly(A) получим символьную запись характеристического полинома матрицы: , ) ( 2 bc ad x d a x P а команды inv и eig дают возможность найти в символьном виде обратную матрицу, собственные числа и собственные векторы. Пример. Найдем символьные выражения собственных чисел, собственных векторов и характеристического полинома для матриц А, В из двух предыдущих примеров. Преобразуем эти матрицы к символьному виду: >> A=sym(A); [H,D]= eig(A), B=sym(B), V=poly(B) A=sym(A) H D B=sym(B) V=poly(B) [1 2] [3 2] [ -1, 1] [ 1, 3/2] [ -1, 0] [ 0, 4] B= [ 3, 2, 1] [ 2, 1, 1] [ 1, 1, 1] V =x^3-5*x^2+x+1 Когда используются символьные вычисления собственных векторов, MATLAB берет одну из компонент собственного вектора равной единице. Заметим, что хотя собственные числа матрицы В вещественны, команда eig(sym(B)) дает для них комплексные выражения, которые не удается упростить средствами MATLAB. Три последние столбца табл. 6 содержат команды, применяемые для преобразования и упрощения символьных формул. Так, команда expand раскрывает скобки, команда factor, наоборот, пытается факторизовать выражение (разложить его на множители), команда collect приводит подобные члены. Например, команда expand (a+b)^2 даст ответ a^2+2*a*b+b^2, а команда factor(a^2-b^2) даст ответ ( a+b)*(a-b), Естественно, надо предварительно объявить символьные переменные командой: sym a b. Команды simple и simplify используются для упрощения формул, например, набрав >>sym(x), y=simple(sin(x)^ 2+cos(x)^ 2) получим ответ y=1. Особо следует выделить команду solve, которая позволяет решать алгебраические уравнения, включая нахождение корней полиномов, решение линейных и нелинейных систем уравнений. Найдем, например, в символьном виде корни квадратного уравнения 0 2 2 c bx x Набрав >>syms x b c; solve (‘x^2+2*b*x+c=0’, x) получаем ответ: ans= -b+(b^2-c) ^(1/2), -b-(^2-c) ^(1/2), что соответствует школьной формуле 2 2 , 1 ac b b x 21 Команда numden служит для выделения числителя и знаменателя дробно-рациональных выражений. Найдем с ее помощью сумму элементарных дробей 3 4 5 3 3 1 5 3 3 2 1 1 2 p p p p p p p p Вводя текст >>syms p; [num,den]=numden(1/(p+1)+2/(p+3)), получаем ответ: num=3*p+5, den=(p+1)*(p+3). Раскрывая последнее выражение с помощью команды expand: >>den=expand(den), получаем den=p^2+4*p+3, что совпадает со знаменателем суммы дробей. Отметим еще команды преобразования полиномов из символьного вида в числовой и обратно sym2poly и poly2sym, а также команды double и vpa, служащие для перевода символьных данных в числовые. Например, P=sym2poly(den) даст P=[1 4 3], а результатом команд A=sym([1 2; 2 3]), L=eig(A), L1=double(L) будут символьная матрица А, символьный вектор собственных чисел L и его числовое значение L1: A=[1, 2] [2, 3] L=2+5 (1/2) 2-5 (1/2) L1=4.2361 -0.2361 О применении команд laplace и ilaplace для выполнения прямого и обратного преобразования Лапласа будет сказано позже. В тулбоксе Symbolic есть два удобных средства для построения графиков, они вызываются командами ezplot и funtool. Имя первой из них читается как ‘easy plot’, она предназначена для построения графиков функций, заданных аналитически. На рис. 1.8 приведен пример ее использования для построения графика синуса и функции x x y 2 cos sin >>ezplot('sin') -6 -4 -2 0 2 4 6 -2 -1.5 -1 -0.5 0 0.5 1 x sin ( x )+ cos ( 2 x ) >>ezplot('sin(x)+cos(2*x)') -6 -4 -2 0 2 4 6 -1 -0.5 0 0.5 1 x sin ( x ) Рис. 1.8 Функция ezplot позволяет также рисовать графики функций, заданных неявно, либо параметрически. Например, для того чтобы изобразить гиперболу, заданную уравнением 1 2 2 y x достаточно набрать ezplot('x^2-y^2-1'). Можно также указать пределы, в которых будет изображена функция, например, команда ezplot('-x^3+2*x+1',[-2,3]) изобразит график полинома 1 2 3 x x на интервале [-2, 3]. Для изображения функций, заданных параметрически ), ( ), ( t g y t f x команда вызывается в формате ezplot('f(t )’, 'g(t)’, [t0, t1]). Пусть, например, требуется нарисовать на плоскости (x, y) кривую, заданную уравнениями: 22 x = 2t – 4t 3 , y = t 2 – 3t 4 Набирая в командной строке: >>ezplot('2*t-4*t^3','t^2-3*t^4',[-1,1]), получаем кривую, показанную на рис.1.9 -1.5 -1 -0.5 0 0.5 1 1.5 -1.5 -1 -0.5 0 x y x = 2 t-4 t 3 , y = t 2 -3 t 4 Рис. 1.9 В математической теории катастроф она известна как «ласточкин хвост». Второе графическое средство тулбокса SYMBOLIC – это функциональный калькулятор |