- •Введение
- •Лабораторная работа ип1 Знакомство с Matlab
- •1. Рабочая среда Matlab
- •2. Данные Matlab
- •Типы данных
- •Числовые константы
- •Символьные константы
- •Переменные
- •3. Выражения
- •3.1. Арифметические выражения
- •3.2. Логические выражения
- •3.3. Порядок вычисления выражений
- •4. Сообщения об ошибках и исправление ошибок
- •5. Завершение вычислений
- •6. Завершение работы с системой
- •7. Резюме
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •Лабораторная работа ип2 работа с матрицами в matlab
- •1. Общие сведения
- •2. Одномерные массивы – векторы
- •3. Двумерные массивы – матрицы
- •4. Использование двоеточия
- •4.1. Автозаполнение
- •4.2. Индексация
- •5. Поэлементные и матричные операции
- •6. Стандартные функции для работы с матрицами
- •7. Логическое индексирование
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •10. Упражнения
- •2. Диалоговый ввод/вывод
- •3. Управление последовательностью исполнения операторов
- •3.1. Оператор условия if
- •3.2. Оператор переключения
- •3.3. Оператор цикла с определенным числом повторений
- •3.4. Оператор цикла с неопределенным числом повторений
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип4 визуализация данных в matlab
- •1. Общие сведения
- •2. Построение таблицы значений функции
- •3. Двумерная графика
- •3.1. Общие правила построения графиков
- •3.2. Оформление графиков
- •3.3. Построение графиков
- •3.4. Управление свойствами графиков
- •4. Трехмерная графика
- •4.1. Общие принципы построения трехмерных графиков
- •4.2. Построение трехмерных графиков
- •4.3. Управление свойствами трехмерных графиков
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип5 файл-функции
- •2. Описание m-функции
- •3. Обращение к m-функции
- •4. Параметры-функции
- •5. Разновидности m-функций
- •5.1. Подфункции
- •5.2. Вложенные функции
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •2. Аппроксимация
- •2.1. Моделирование полиномом по методу
- •2.2. Аппроксимация произвольной функцией
- •3. Интерполяция
- •3.1. Кусочная интерполяция
- •3.2. Кубические сплайны
- •3.3. Интерполяция произвольной нелинейной функцией
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип7 Вычисление функций разложением в ряд
- •1. Общие сведения
- •2. Индивидуальное задание
- •Лабораторная работа ип8 Решение нелинейных уравнений в среде Matlab
- •1. Общие сведения
- •2. Поиск корней полиномов
- •3. Решение одного нелинейного уравнения
- •4. Решение систем нелинейных уравнений
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип9 обмен данными с текстовым файлом
- •1. Общие сведения
- •2. Открытие файла
- •3. Запись в текстовый файл
- •3.1. Запись строковых значений
- •3.2. Запись числовых значений
- •4. Чтение из текстового файла
- •4.1. Последовательное чтение строк
- •4.2. Последовательное чтение нескольких символов
- •4.3. Чтение чисел из текстового файла
- •4.4. Альтернативный доступ к текстовому файлу
- •5. Закрытие файла
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •Заключение
- •Список рекомендуемой литературы
- •Программирование в matlab
- •428015 Чебоксары, Московский просп., 15
3.3. Построение графиков
Matlab позволяет строить графики функций в линейном, логарифмическом и полулогарифмическом масштабах. В одном графическом окне можно построить графики нескольких функций, с разным шагом и даже определенных на разных отрезках. В последнем случае при построении графиков Matlab выбирает максимальный отрезок, содержащий все остальные. Дополнительные параметры графических функций позволяют управлять основными свойствами линий на графиках. Для того чтобы построить график функции, нужно сформировать два вектора x (абсцисс) и y (ординат) одинакового размера и обратиться к соответствующей функции рисования. Таким образом, фактически строится график таблично заданной функции, т.е. зависимость одного вектора от другого. Поведение функции между узлами таблицы определяется линейной интерполяцией, т.е. соседние точки соединяются прямой линией. Наиболее часто используемые функции Matlab, предназначенные для построения двумерных графиков, приведены в табл. 4.2.
Таблица 4.2
Функция |
Формат использования |
Назначение |
plot |
plot(x,y) |
График в линейном масштабе |
plotyy |
plotyy(x,y) |
График в линейном масштабе с двумя осями ординат |
loglog |
loglog(x,y) |
График в логарифмическом масштабе по обеим осям |
semilogx |
semilogx (x,y) |
График в логарифмическом масштабе по оси абсцисс и линейном по оси ординат |
semilogy |
semilogx (x,y) |
График в линейном масштабе по оси абсцисс и логарифмическом по оси ординат |
fplot |
fplot('функция',[d1 d2], tol, n) |
График на заданном интервале с автоматическим выбором шага. Эта функция будет рассмотрена позднее в работе ИП5 |
Рассмотрим использование этих функций более подробно. Построение графиков функций одной переменной в линейном масштабе осуществляется при помощи функции plot. В зависимости от входных аргументов plot позволяет строить один или несколько графиков, менять цвет и стиль линий и добавлять маркеры на каждый график. В простейшем случае обращение к функции может быть выполнено с одним аргументом
plot(y)
Здесь y – вектор или матрица значений функции. В качестве значений аргумента в этом случае будут служить индексы элементов вектора или столбцов матрицы.
В классическом варианте функция вызывается с двумя
plot(x,y)
или тремя аргументами
plot(x,y,options)
Здесь x и y – векторы, элементами которых являются значения аргумента и функции соответственно; options – список опций управления свойствами линии графика, заключенный в апострофы. Список опций может содержать до трех специальных символов, определяющих тип линии, тип маркера и цвет линии графика (табл. 4.3).
Таблица 4.3
-
Тип линии
Тип маркера
Цвет линии (маркера)
- непрерывная
. точка
b синий
-- штриховая
+ плюс
g зеленый
: пунктир
* звездочка
r красный
-. штрих-пунктир
о кружок
с голубой
х крестик
m фиолетовый
s квадрат
у желтый
d ромб
k черный
v треугольник вниз
< треугольник влево
> треугольник вправо
p пентаграмма
h шестиугольник
За одно обращение к plot можно нарисовать и несколько графиков в одних осях. Например, три графика можно нарисовать следующим образом:
plot(x1,y1,x2,y2,x3,y3)
или
plot(x1,y1,'--og' ,x2,y2,'k-.+',x3,y3,'*:k')
или
plot(x1,y1,x1,y2,'-r',x3,y3,'om')
Из примеров видно, что в одних осях можно рисовать графики, как для одинаковых, так и для разных значений аргументов; некоторым кривым можно задавать опции рисования, а некоторым – нет; можно задавать как полный список опций, так и частичный; перечислять опции можно в любом порядке. По умолчанию (список options не указан) график строится непрерывной линией, тип маркера – точка (пиксель), цвет – в зависимости от того, какая по порядку кривая отображается при обращении к данной функции. Порядок автоматического перебора цветов соответствует их перечислению в табл. 4.3. Если одним plot рисуется больше восьми графиков, то цвета начинают циклически повторяться.
Рекомендации: 1) если в графическом окне необходимо показать, что один график совпадает с другим, то первый из них следует рисовать сплошной линией одного цвета, а второй – прерывистой линией другого цвета. Иначе на экране будет виден только график, нарисованный последним!
2) Если расчетных точек много, то не стоит прорисовывать маркеры. Иначе на экране будет изображена "гусеница" – сплошной поток маркеров. Если маркеры все же необходимы, то следует нарисовать не все, а только некоторые из них. Например, каждый десятый или каждый сотый маркер. Для этого отдельно с более крупным шагом формируются векторы значений функции и аргумента
markx=x(1:100:end); marky=y(1:100:end);
которые затем используются для прорисовки маркеров поверх уже нарисованной кривой, изображающей функцию
plot(x,y,markx,marky,'o')
Выше говорилось о том, что при рисовании графиков plot автоматически выполняет линейную интерполяцию между соседними точками. Об этом необходимо помнить, задавая количество точек при изображении кривых. Иначе можно получить "фантастический" результат! Например, пусть требуется построить график функции на отрезке [0; 0,2]. Напишем программу, не забывая, что табулирование функции выполняется поэлементными операциями над векторами. Сохраним программу в m-файле (впрочем, эта программа хороша и для выполнения в режиме прямых вычислений).
x1=0:1e-2:0.2;
y1=exp(-x1).*(sin(x1)+0.1*sin(100*pi*x1));
x2=0:0.7e-2:0.2;
y2=exp(-x2).*(sin(x2)+0.1*sin(100*pi*x2));
x3=0:0.1e-2:0.2;
y3=exp(-x3).*(sin(x3)+0.1*sin(100*pi*x3));
plot(x1,y1,'r--',x2,y2,'b',x3,y3,'k-.'), grid
title('y=e^-^x(sin(x)+0,1sin(100pi*x)')
xlabel('x'), ylabel('f(x)')
legend('not correct curve1','not correct curve2','correct curve3')
Выполним программу. Откроем графическое окно (рис. 4.4). Видим, что графики y1(x1), построенный пунктиром с шагом 0,01, и y2(x2), построенный сплошной линией с шагом 0,07, просто неверные! А вот третий график y3(x3), нарисованный с шагом 0,001 штрих-пунктиром, соответствует действительности. В чем же дело? Почему одна и та же функция нарисована до неузнаваемости по-разному? Ответ прост – в первых двух случаях вычисления со слишком большим шагом привели к тому, что расчетные точки, верные сами по себе, легли на синусоидоподобной кривой функции неудачно и, соединенные между собой отрезками прямой, исказили ее изображение.
Рис. 4.4. Графики функции
Иногда требуется сравнить поведение двух функций, значения которых сильно отличаются друг от друга. При рисовании автоматически будет выполнено масштабирование. В результате график функции с небольшими значениями практически сольется с осью абсцисс, и установить его вид будет затруднительно.
В ыход может быть найден в использовании функции plotyy, которая выводит графики в окно с двумя осями ОУ, имеющими подходящий масштаб. При этом цвета графика и соответствующей ему оси ординат будут совпадать. На рис. 4.5 приведен результат выполнения в режиме прямых вычислений следующей последовательности операторов:
>> x=-pi:pi/10:pi;
>> y1=250*sin(x);
>> y2=0.5*sin(x-pi/3);
>> plotyy(x,y1,x,y2), grid
Функцию plotyy можно использовать только для рисования двух кривых в одних осях. При построении большего числа разновеликих функций можно воспользоваться домножением вектора ординат на масштабный множитель. Например, задать растяжение первой и сжатие второй кривых по вертикали в сто раз
plot(x,100*y1,x2,0.01*y2,x,y3)
Факт принудительного масштабирования кривых обязательно следует отразить в легенде
legend('100у1(х)','0,01у2(х)','y3(x)')
Функции plot и plotyy используют при построениях линейный масштаб по обеим осям. Для построения графиков в логарифмическом и полулогарифмическом масштабах служат функции loglog, semilogx и semilogy (см. табл. 3.3). Аргументы и правила использования этих функций такие же, как и для функции plot.
При построении графиков бывает удобно задавать векторы значений аргументов x, используя следующие функции:
linspace(d1,d2,n) – задание диапазона по оси абсцисс в линейном масштабе. Здесь d1, d2 – начальное и конечное значения диапазона; n – количество равноотстоящих точек (по умолчанию 50);
logspace(d1,d2,n) – задание диапазона по оси абсцисс в логарифмическом масштабе. Здесь d1, d2 – начальное 10d1 и конечное 10d2 значения диапазона; n – количество точек в логарифмическом масштабе (по умолчанию 50).