Пятница, 2025-06-20, 3:32 PM
Приветствую Вас Гость | RSS
Главная | Урок 7(1) | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Урок 7 — Графики в Matlab. Построение графиков и таблиц в Матлабе

     

     

    1. Построение таблиц значений функции одной переменной в пакете MatLab

    Отображение функции в виде таблицы удобно, если имеется сравнительно небольшое число значений функции. Пусть требуется вывести в командное окно таблицу значений функции

    в точках 0.2, 0.3, 0.5, 0.8, 1.3, 1.7, 2.5. 
    Задача решается в два этапа. 
    1. Создается вектор-строка  х,  содержащая координаты заданных точек. 
    2. Вычисляются значения функции y(х)от каждого элемента вектора хи записываются полученные значения в вектор-строку  у. 
    Значения функции необходимо найти для каждого из элементов вектор-строки х, поэтому операции в выражении для функции должны выполнятьсяпоэлементно.

    » х = [0.2 0.3 0.5 0.8 1.3 1.7 2.5] 
    х = 
    0.2000  0.3000  0.5000  0.8000  1.3000  1.7000  2.5000 » у = sin(x).^2./(l+cos(x))+exp(-x).*log(x) 
    У = 
    -1.2978 -0.8473 -0.2980  0.2030  0.8040  1.2258  1.8764

    Обратите внимание, что при попытке использования операций возведения в степень ^, деления / и умножения * (которые не относятся к поэлементным) выводится сообщение об ошибке уже при возведении sin(x) в квадрат:

    » у = sin(х)^2/(1+соз(х))+exp(-x)*log(x) 
    ??? Error using ==> ^ 
    Matrix must be square.

    Дело в том, что в MatLab операции * и ^ применяются для перемножения матриц соответствующих размеров и возведения квадратной матрицы в степень. 
    Таблице можно придать более удобный для чтения вид, расположив значения функции непосредственно под значениями аргумента:

    » х 
    х = 
    0.2000  0.3000  0.5000  0.8000  1.3000  1.7000  2.5000 » у 
    у = 
    -1.2978 -0.8473 -0.2980  0.2030  0.8040  1.2258  1.8764

    Часто требуется вывести значение функции в точках отрезка, отстоящих друг от друга на равное расстояние (шаг). Предположим, что необходимо вывести таблицу значений функции y(х)наотрезке [1, 2] с шагом 0.2. Можно, конечно, ввести вектор-строку значений аргумента х=[11.2, 1.4, 1.6, 1.8, 2.0] из командной строки и вычислить все значения функции так, как описано выше. Однако, если шаг будет не 0.2, а, например 0.01, то предстоит большая работа по вводу вектора х. 
    В MatLab предусмотрено простое создание векторов, каждый элемент которых отличается от предшествующего на постоянную величину, т.е. на шаг. Для ввода таких векторов служит двоеточие (не путайте с индексацией при помощи двоеточия). Следующие два оператора приводят к формированию одинаковых вектор-строк. Условно можно записать

    » х = [1, 1.2, 1.4, 1.6, 1.8, 2.0] 
    х = 
    1.0000   1.2000   1.4000   1.6000   1.8000   2.0000 
    » х = [1:0.2:2] 
    х = 
    1.0000   1.2000   1.4000   1.6000   1.8000   2.0000

    Условно можно записать

    х = [начальное значение : шаг : конечное значение]

    Необязательно заботиться о том, чтобы сумма предпоследнего значения  шага равнялась бы конечному значению, например, при выполнении следующего оператора присваивания

    » х = [1:0.2:1.9] 
    х = 
    1.0000  1.2000  1.4000  1.6000  1.8000

    Вектор-строка заполнится до элемента, не превосходящего определенное нами конечное значение. Шаг может быть и отрицательным:

    » х = [1.9:-0.2:1] 
    х = 
    1.9000  1.7000  1.5000  1.3000  1.1000

    В случае отрицательного шага для получения непустой вектор-строки начальное значение должно быть больше конечного. 
    Для заполнения вектор-столбца элементами, начинающимися с нуля и заканчивающимися 0.5 с шагом 0.1, следует заполнить вектор-строку, а затем использовать операцию транспонирования:

    » х = [0:0.1:0.5]' 
    х = 

    0.1000 
    0.2000 
    0.3000 
    0.4000 
    0.5000

    Обратите внимание, что элементы вектора, заполняемого при помощи двоеточия, могут быть только вещественными, поэтому для транспонирования можно использовать апостроф вместо точки с апострофом. 
    Шаг, равный единице, допускается не указывать при автоматическом заполнении:

    » х = [1:5] 
    х = 
    1  2  3  4  5

    Пусть требуется вывести таблицу значений функции

    на отрезке [0, 1] с шагом 0.05, 
    Для выполнения этого задания необходимо произвести следующие действия: 
    1. Сформировать вектор-строку  х  при помощи двоеточия. 
    2. Вычислить значения у(х)отэлементов х
    3. Записать результат в вектор-строку  y. 
    4. Вывести  хи у.

    » х = [0:0.05:1]; 
    » у = ехр(-х).*sin(10*x); 
    » х 
    х = 
    Columns 1 through 7 
    О  0.0500  0.1000  0.1500  0.2000  0.2500  0.3000
    Columns 8 through 14 
    0.3500  0.4000  0.4500  0.5000  0.5500  0.6000  0.6500
    Columns 15 through 21 
    0.7000  0.7500  0.8000  0.8500  0.9000  0.9500  1.0000
    » у 
    У = 
    Columns 1 through 7 
    0  0.4560  0.7614  0.8586  0.7445  0.4661  0.1045
    Columns 8 through 14 
    -0.2472 -0.5073 -0.6233 -0.5816 -0.4071  -0.1533  0.1123
    Columns 15 through 21 
    0.3262  0.4431  0.4445  0.3413  0.1676  -0.0291 -0.2001

    Вектор-строки x и yсостоят из двадцати одного элемента, и не помещается на экране в одну строку, поэтому выводятся по частям. Так как х иy хранятся в двумерных массивах размерностью один на двадцать один, то выводятся по столбцам, каждый из которых состоит из одного элемента. Сначала выводятся столбцы с первого по седьмой (columns 1 through 7), затем - с восьмого по четырнадцатый (columns 8 through 14), и, наконец, - с пятнадцатого по двадцать первый (columns 15 through 21). Более наглядным и удобным является графическое представление функции.

    2. Построение графиков функции одной переменной

    2.1. Графики функций в линейном масштабе

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

    ,

    определенной на отрезке [0, 1]. Вывод функции в виде графика состоит из следующих этапов: 
    1. Задание вектора значений аргумента х. 
    2. Вычисление вектора у значений функции y(х). 
    3. Вызов команды  plot  для построения графика. 
    Команды для задания вектора х и вычисления функции лучше завершать точкой с запятой для подавления вывода в командное окно их значений (после команды plot точку с запятой ставить необязательно, т. к. она ничего не выводит в командное окно).

    » х = [0:0.05:1]; 
    » у = ехр(-х).*sin(10*x); 
    » plot(x, у)

    После выполнения команд на экране появляется окно Figure No. 1 с графиком функции. Окно содержит меню, панель инструментов и область графика. В дальнейшем будут описаны команды, специально предназначенные для оформления графика. Сейчас нас интересует сам принцип построения графиков и некоторые простейшие возможности визуализации функций. 
    Для построения графика функции в рабочей среде MatLab должны быть определены два вектора одинаковой размерности, например х и у. Соответствующий массив х содержит значения аргументов, а у — значения функции от этих аргументов. Команда plot соединяет точки с координатами (x(i), y(i)) прямыми линиями, автоматически масштабируя оси для оптимального расположения графика в окне. При построении графиков удобно расположить на экране основное окно MatLab и окно с графиком рядом так, чтобы они не перекрывались. 
    Построенный график функции имеет изломы. Для более точного построения графика функцию необходимо вычислить y(х) в большем числе точек на отрезке [0, 1], т.е. задать меньший шаг при вводе вектора х:

    » х = [0:0.01:1]; 
    » у = ехр(-х).*sin(10*x); 
    » plot(x, у)

    В результате получается график функции в виде более плавной кривой. 
    Сравнение нескольких функций удобно производить, отобразив их графики на одних осях. Например, построим на отрезке [-1, -0.3] графики функций 

    при помощи следующей последовательности команд:

    » х = [-1:0.005:-0.3]; 
    » f = sin(x.^-2); 
    » g = sin(1.2*x.^-2); 
    » plot(x, f, x, g)

    Функции необязательно должны быть определены на одном и том же отрезке. В этом случае при построении графиков MatLab выбирает максимальный отрезок, содержащий остальные. Важно только в каждой паре векторов абсцисс и ординат указать соответствующие друг другу вектора, например:

    » х1 = [-1:0.005:-0.3]; 
    » f = sin(x1.^-2); 
    » х2 = [-1:0.005:0.3]; 
    » g = sin(1.2*x2.^-2); 
    » plot(x1, f, x2, g)

    Аналогичным образом при помощи задания в plot через запятую пар аргументов вида: вектор абсцисс, вектор ординат, осуществляется построение графиков произвольного числа функций.

    Замечание 1

    Использование plot с одним аргументом - вектором - приводит к построению "графика вектора", т.е. зависимости значений элементов вектора от их номеров. Аргументом plot может быть и матрица, в этом случае на одни координатные оси выводятся графики столбцов. 
    Иногда требуется сравнить поведение двух функций, значения которых сильно отличаются друг от друга. График функции с небольшими значениями практически сливается с осью абсцисс, и установить его вид не удается. В этой ситуации помогает функция plotyy, которая выводит графики в окно с двумя вертикальными осями, имеющими подходящий масштаб. 
    Сравните, например, две функции:   и  

    » х = [0.5:0.01:3]; 
    » f = х.^-3; 
    » F = 1000*(х+0.5).^-4; 
    » plotyy(x, f, x, F)

    При выполнении этого примера обратите внимание, что цвет графика совпадает с цветом соответствующей ему оси ординат. 
    Функция plot использует линейный масштаб по обеим координатным осям. Однако MatLab предоставляет пользователю возможность строить графики функций одной переменной в логарифмическом или полулогарифмическом масштабе.

    2.2. Графики функций в логарифмических масштабах

    Для построения графиков в логарифмическом и полулогарифмическом масштабах служат следующие функции: 
    - loglog (логарифмический масштаб по обеим осям); 
    - semilogx (логарифмический масштаб только по оси абсцисс); 
    -semilogy (логарифмический масштаб только по оси ординат).

    Аргументы loglog, semilogx и semilogy задаются в виде пары векторов значений абсцисс и ординат так же, как для функции plot, описанной в предыдущем пункте. Построим, например, графики функций   и    на отрезке [0.1, 5] в логарифмическом масштабе по оси х:

    » х = [0.1:0.01:10]; 
    » f = log(0.5*x); 
    » g = sin(log(x)); 
    » semilogx(x, f, x ,g)

     

    uCozCopyright MyCorp © 2025