- •Начала программирования в среде MatLab
- •Содержание
- •Предисловие
- •Введение
- •1. MatLAB как научный калькулятор
- •1.1. Командное окно
- •1.2. Операции с числами
- •1.2.1. Ввод действительных чисел
- •1.2.2. Простейшие арифметические действия
- •1.2.3. Ввод комплексных чисел
- •1.2.4. Элементарные математические функции
- •1.2.5. Специальные математические функции
- •1.2.6. Элементарные действия с комплексными числами
- •1.2.7. Функции комплексного аргумента
- •1.2.8. Задания
- •1.2.9. Вопросы
- •1.3. Простейшие операции с векторами и матрицами
- •1.3.1. Ввод векторов и матриц
- •1.3.2. Формирование векторов и матриц
- •1.3.3. Извлечение и вставка частей матриц
- •1.3.4. Действия над векторами
- •1.3.5. Поэлементное преобразование матриц
- •1.3.6. Матричные действия над матрицами
- •1.3.7. Матричные функции
- •1.3.8. Задания
- •1.3.9. Вопросы
- •1.4. Функции прикладной численной математики
- •1.4.1. Операции с полиномами
- •1.4.2. Обработка данных измерений
- •1.4.3. Функции линейной алгебры
- •1.4.4. Аппроксимация и интерполяция данных
- •1.4.5. Векторная фильтрация и спектральный анализ
- •1.4.6. Задания
- •1.4.7. Вопросы
- •1.5. Построение простейших графиков
- •1.5.1. Процедура plot
- •1.5.2. Специальные графики
- •1.5.3. Дополнительные функции графического окна
- •1.5.5. Задания
- •1.5.6. Вопросы
- •1.6. Операторы управления вычислительным процессом
- •1.6.1. Оператор условного перехода
- •1.6.2. Оператор переключения
- •1.6.3. Операторы цикла
- •1.6.4. Задания
- •1.6.5. Вопросы
- •2. Программирование в среде MatLAB
- •2.1. Функции функций
- •2.2. Создание М-файлов
- •2.2.1. Особенности создания М-файлов
- •2.3.1. Общие требования к построению
- •2.3.2. Типовое оформление процедуры-функции
- •2.3.3. Задания
- •2.3.4. Вопросы
- •2.4. Создание Script-файлов
- •2.4.1. Основные особенности Script-файлов
- •2.4.2. Ввод и вывод информации в диалоговом режиме
- •2.4.3. Организация повторения действий
- •2.4.4. Организация изменения данных в диалоговом режиме
- •2.4.5. Типовая структура и оформление Script-файла
- •2.5. Графическое оформление результатов
- •2.5.1. Общие требования к представлению графической информации
- •2.5.2. Разбивка графического окна на подокна
- •2.5.3. Вывод текста в графическое окно (подокно)
- •2.6. Создание функций от функций
- •2.6.1. Процедура feval
- •2.6.2. Примеры создания процедур от функций
- •2.6.3. Задания
- •2.7. Пример создания сложной программы
- •2.7.1. Программа моделирования движения маятника
- •2.7.2. Задания
- •3.1. Функции меню командного окна
- •3.1.2. Другие меню командного окна
- •3.1.3. Панель инструментов
- •3.2. Команды общего назначения
- •3.3. Создание М-книги
- •3.3.1. Начало новой М-книги
- •3.3.2. Написание М-книги
- •3.3.3. Редактирование М-книги
- •3.3.4. Преобразование документа WORD в М-книгу
- •3.3.6. Изменение параметров вывода результатов
- •4. Классы вычислительных объектов
- •4.1. Основные классы объектов
- •4.1.1. Класс символьных строк (char)
- •4.1.2. Класс записей (struct)
- •4.1.3. Класс ячеек (cell)
- •4.2. Производные классы MatLAB
- •4.2.1. Класс объектов Inline
- •4.2.2. Классы пакета CONTROL
- •4.3. Пример создания нового класса polynom
- •4.3.1. Создание подкаталога @polynom
- •4.3.2. Создание конструктора
- •4.3.3. Создание процедуры символьного представления polynom-объекта.
- •4.4. Создание методов нового класса
- •5.1. Формирование типовых процессов
- •5.1.1. Формирование одиночных импульных процессов
- •5.1.2. Формирование колебаний
- •5.2.1. Основы линейной фильтрации
- •5.2.2. Формирование случайных процессов
- •5.3. Процедуры спектрального (частотного) и статистического анализа процессов
- •5.3.1. Основы спектрального и статистического анализа
- •5.3.2. Примеры спектрального анализа
- •5.3.3. Статистический анализ
- •5.4. Проектирование фильтров
- •5.4.1. Формы представления фильтров и их преобразования
- •5.4.2. Разработка аналоговых фильтров
- •5.4.3. Проектирование БИХ-фильтров
- •5.5. Графические и интерактивные средства
- •5.5.1. Графические средства пакета SIGNAL
- •5.5.2. Интерактивная оболочка SPTOOL
- •6.1. Ввод и преобразование моделей
- •6.2. Получение информации о модели
- •6.3. Анализ системы
- •6.4. Интерактивный "обозреватель" ltiview
- •6.5. Синтез системы
- •7.1. Общая характеристика пакета SimuLink
- •7.1.1. Запуск SimuLink
- •7.1.2. Библиотека модулей (блоков)
- •7.1.3. Раздел Sinks (приемники)
- •7.1.4. Раздел Sources (Источники)
- •7.1.5. Раздел Сontinuous
- •7.1.6. Раздел Discrete
- •7.1.7. Раздел Math
- •7.1.8. Раздел Functions & Tables
- •7.1.9. Раздел Nonlinear
- •7.1.10. Раздел Signals & Systems
- •7.2. Построение блок-схем
- •7.2.1. Выделение объектов
- •7.2.2. Оперирование с блоками
- •7.2.3. Проведение соединительных линий
- •7.2.4. Проставление меток сигналов и комментариев
- •7.2.5. Создание подсистем
- •7.2.6. Запись и распечатка блок-схемы S-модели
- •7.3. Примеры моделирования
- •7.3.1. Моделирование поведения физического маятника
- •7.3.2. Моделирование поведения гироскопа в кардановом подвесе
- •7.4. Объединение S-моделей с программами MatLAB
- •7.4.2. Функции пересечения нуля
- •7.4.5. Образование S-блоков путем использования программ MatLab. S-функции
- •7.4.6. Пример создания S-функции
- •7.5.1. Создание библиотеки
- •7.5.2. Маскировка блоков
- •7.5.3. Моделирование процесса ориентации космического аппарата
- •Послесловие
- •Предметный указатель
- •Указатель операторов, команд, функций и функциональных блоков MatLAB
1.4. Функции прикладной численной математики |
62 |
Входными переменными этой процедуры являются р+1 квадратные матрицы A0, A1, ... Ap порядка n. Исходными переменными - матрица собственных векторов R размером (n*(n*p)) и вектор d собственных значений размером (n*p).
Функция polyvalm предназначена для вычисления матричного полинома
вида
Y (X ) = pn X n + pn−1 X n−1 +...+p2 X 2 + p1 X + p0
по заданному значению матрицы Х и вектора p = [pn, pn-1, ... , p0] коэффициентов полинома. Для этого достаточно обратиться к этой процедуре по схеме:
Y = polyvalm(p, X).
Пример:
p = 1 8 31 80 94 20
» X
X =
1 2 3
0 -1 3
22 -1
»disp(polyvalm(p,X))
2196 |
2214 |
2880 |
882 |
864 |
1116 |
1332 |
1332 |
1746 |
Примечание. Следует различать процедуры polyval и polyvalm. Первая вычисляет значение полинома для любого из элементов матрицы аргумента, а вторая при вычислении полинома возводит в соответствующую степень всю матрицу аргумента.
Процедура subspace(А,В) вычисляет угол между двумя подпространствами, которые "натянуты на столбцы" матриц А и В. Если аргументами являются не матрицы, а векторы A и B, вычисляется угол между этими векторами.
1.4.4. Аппроксимация и интерполяция данных
Полиномиальная аппроксимация данных измерений, которые сформированы как некоторый вектор Y, при некоторых значениях аргумента, которые образуют вектор Х такой же длины, что и вектор Y, осуществляется процедурой polyfit(X, Y, n). Здесь n - порядок аппроксимирующего полинома. Результатом действия этой процедуры является вектор длиной (n +1) из коэффициентов аппроксимирующего полинома.
Пусть массив значений аргумента имеет вид: 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].
Тогда, применяя указанную функцию при разных значениях порядка аппроксимирующего полинома, получим:
»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];
1.4. Функции прикладной численной математики |
63 |
||||||
» polyfit(x,y,1) |
|
|
|
|
|
||
ans = |
0. 1143 |
-0. 2393 |
|
|
|
|
|
» polyfit(x,y,2) |
|
|
|
|
|
||
ans = |
-0. 1024 |
1. 0357 |
-1. 7750 |
|
|
|
|
» polyfit(x,y,3) |
|
|
|
|
|
||
ans = |
0. 0177 |
-0. 3410 |
1. 9461 |
-2. |
6500 |
|
|
» polyfit(x,y,4) |
|
|
|
|
|
||
ans = |
-0. 0044 |
0. 0961 |
-0. 8146 |
3. |
0326 |
-3. 3893. |
|
Это означает, що заданную зависимость можно аппроксимировать или пря-
мой
y(x) = 0,1143x − 0,2393 ,
или квадратной параболой
y(x) = −0,1024x2 +1,0357x −1,775 ,
или кубической параболой
y(x) = 0,0177x3 − 0,341x2 +1,9461x − 2,65 ,
или параболой четвертой степени
y(x) = −0,0044x4 + 0,0961x3 − 0,8146x2 + 3,0326x − 3,3893 .
Построим в одном графическом поле графики заданной дискретной функции и графики всех полученных при аппроксимации полиномов:
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) ; P2=polyfit(x,y,2); P3=polyfit(x,y,3);
P4=polyfit(x,y,4) ; stem(x,y);
x1 = 0.5 : 0.05 : 8.5; y1=polyval(P1,x1); y2=polyval(P2,x1); y3=polyval(P3,x1); y4=polyval(P4,x1); hold on
plot(x1,y1,x1,y2,x1,y3,x1,y4),
grid, set(gca, 'FontName', 'Arial Cyr', 'FontSize', 16), title('Полиномиальная аппроксимация '); xlabel('Аргумент');
ylabel('Функция')
Результат представлен на рис. 1.18.
Функция spline(X,Y,Xi) осуществляет интерполяцию кубическими сплай-
нами. При обращении
Yi = spline(X,Y,Xi)
1.4. Функции прикладной численной математики |
64 |
||
|
|
|
|
|
|
|
|
Рис. 1.18
она интерполирует значение вектора Y, заданного при значениях аргумента, представленных в векторе Х, и выдает значение интерполирующей функции в виде вектора Yi при значениях аргумента, заданных вектором Xi. В случае, если вектор Х не указан, по умолчанию принимается, что он имеет длину вектора Y и любой его элемент равен номеру этого элемента.
Вкачестве примера рассмотрим интерполяцию вектора
x= -0.5:0.1:0.2;
y= [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1];
x1 = -0.5:0.01:0.2;
y2 = spline(x,y,x1); plot (x,y,x1,y2), grid
set(gca,'FontName','Arial Cyr','FontSize',16), title('Интерполяция процедурой SPLINE '); xlabel('Аргумент');
ylabel('Функция')
Результат приведен на рис. 1.19.
Одномерную табличную интерполяцию осуществляет процедура interp1.
Обращение к ней в общем случае имеет вид: Yi = interp1(X,Y,Xi,’<метод>’),
и позволяет дополнительно указать метод интерполяции в четвертом входном аргументе:
'nearest' - ступенчатая интерполяция; 'linear' - линейная;
‘cubic' - кубическая;
‘spline' - кубическими сплайнами.
1.4. Функции прикладной численной математики |
65 |
||
|
|
|
|
|
|
|
|
Рис. 1.19
Если метод не указан, осуществляется по умолчанию линейная интерполяция. Например, (для одного и того же вектора):
x = -0.5:0.1:0.2;
y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]; x1 = -0.5:0.01:0.2;
y1 = interp1(x,y,x1);
y4 = interp1(x,y,x1,'nearest');
y2 = interp1(x,y,x1,'cubic');
y3 = interp1(x,y,x1,'spline');
plot (x1,y1,x1,y2,x1,y3,x1,y4), grid
plot (x1,y1,x1,y2,'.',x1,y3,'--',x1,y4,':'), grid set(gca,'FontName','Arial Cyr','FontSize',8), legend('линейная','кубическая','сплайновая','ступенчатая',0) set(gca,'FontName','Arial Cyr','FontSize',14), set(gcf,'color','white')
title('Интерполяция процедурой INTERP1 '); xlabel('Аргумент');
ylabel('Функция')
Результаты приведены на рис.1.20.