Справочник от Автор24
Поделись лекцией за скидку на Автор24

Графика в ML

  • 👀 487 просмотров
  • 📌 442 загрузки
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Графика в ML» doc
Графика в ML Система МL обладает мощными графическими возможностями. Вывод графической информации ML осуществляет в отдельное окно, которое создается автоматически, когда используется какая-либо графическая функция. Построение простейших графиков Можно графически отобразить значение вектора Y=[1 3 7 12 86] Это делается командой Plot(y). По оси Х в этом случае откладываются только номера элементов. Например, >> Y=[1 3 7 12 86]; >> plot(Y) В результате будет получен следующий график: Чтобы построить график какой-либо функции на определенном интервале х с отметками по оси Х надо получить вектор из значений аргумента, потом получить вектор значений функции, а затем графически отобразить его командой Plot(X,Y) Построим график функции sin(x) на участке от 0 до 2π. Зададим вектор значений аргумента Х на участке от 0 до 2π: >>Х = linspace (0, 2*pi, 100); Вычислим значения вектора Y : >>Y = sin(X); >>Plot(X, Y) Можно добавить к графику сетку. Для этого надо воспользоваться командой grid on. Команда grid on включает сетку, а команда grid off отключает сетку Можно добавить общее название графика командой title(<заголовок>) Названия осей задаются командами: xlabel(<название оси x>); ylabel(<название оси y>) Команда text(<координата x>,<координата y>, <текст>) выводит текст, начиная с позиции, заданной координатами X и Y. Заголовок, название оси x, название оси y – параметры строкового типа (записываются в апострофах). Например, >> text(-1, 0.5, 'hhhhh') Для указания цвета, типа линий и маркера в команде Plot надо дописать параметр: Plot(x, y, ‘<тип маркера, обозначение цвета и тип линий>’) Этот дополнительный параметр может принимать следующие значения: Тип линии Цвет линиии Тип маркера Сплошная(-) Штрих(--) Пунктир(:) Штрих-пунктир(-.) Красный (r) желтый (y) зеленый (g) синий (b) голубой (c) розовый (m) черный (k) белый (n) Точка (.) Плюс (+) Кружок (o) Крестик (x) Звездочка (*) Квадрат (s) Ромб (d) Треуг-к с верш. вниз (v) Треуг-к с верш. вверх (^) Например, plot(x, y, ‘* r -’) Порядок указания атрибутов приведен выше. Если указан только цвет, то график строится сплошной линией заданного цвета. Если указан символ, определяющий тип маркера, но не указан символ для типа линии, то на графике отображаются только маркеры, не соединённые линиями. По умолчанию цвет построения синий. Командой plot можно на графике отметить какую-либо точку, указав координаты, тип и цвет маркера, если a и b – координаты точки: plot(a, b, ‘* g’) В одних осях можно построить любое количество графиков. В команде plot для этого можно последовательно указать пары векторов и атрибуты для желаемого количества графиков. В этом случае с помощью команды legend на графике можно разместить легенду с информацией о линиях. Аргументы команды текстовые. Их число и порядок соответствуют линиям графика. В следующем примере в одних осях строятся три графика: >> x=linspace(0,2*pi,100); >> y=sin(x); >> plot(x,y,'*g',x,cos(x),'r--',x,2*y,'+b') >>legend('sin(x)','cos(x)','2sin(x)’ Для последовательного построения графиков в одних осях надо установить режим сохранения текущего графика – hold on. Команда hold off снимает сохранение. >> x=linspace(0,2*pi,100); >> z=cos(x); >> y=sin(x); >> plot(x,y) >> hold on; >> plot(x,z) >> hold off; График, задаваемый значениями вектора Z, будет наложен на график, отображающий значения вектора Y. Если не использовать команду hold on, то при выводе каждый следующий график будет выведен в том же графическом окне вместо предыдущего графика. Чтобы новый график не накладывался на предыдущий, необходимо набрать команду hold off. Все графические окна автоматически нумеруются, начиная с №1. По умолчанию все построения сначала проводятся в этом окне. Имеется возможность при необходимости открыть новое окно, в котором будут производиться графические построения. Для этого надо набрать команду figure. При этом не произойдет наложение на прежнее графическое изображение, а откроется новое окно со следующим номером. Можно построить график с использованием функции ezplot (<символьное выражение>,<интервал>). Функция работает с символьным выражением, задающим формулу функции, которая заключается в апострофы. Пусть требуется построить функцию х2+х+1 на интервале от -2 до 2, тогда >> ezplot('x^2+x+1', [-2 2]) Вывод нескольких графиков в одном окне. Графическое окно можно разделить на несколько частей и в каждой из них вывести графики различных функций. Эта возможность реализуется командой: subplot(m, n, p), где m, n указывают, на сколько частей делится окно по вертикали (m) и горизонтали (n), а p – номер подокна в котором будет отображаться график (нумерация слева направо и сверху вниз). P=1, 2, 3, 4 при m, n = 2 1 2 3 4 Чтобы построить график во весь экран, необходимо задать команду: Subplot(1, 1, 1) Разделим экран на 4 части. В окнах 1 и 2 выведем графики функций cos(x) и sin(x) соответственно. >>x = -2: 0.01: 2; >>f1 = sin(x); >>subplot(2, 2, 1); >>plot(x, f1); >>title('sin(x) '); >>y2 = cos(x); >>subplot(2, 2, 2); >>plot(x, y2); >>title('cos(x) '); В результате будет получено следующее: Разделим экран на 2 части по вертикали. >>subplot(2,1,1) >>plot(x,y2) >>title('cos(x) '); >>subplot(2,1,2) >>plot(x,f1) >>title('sin(x) '); Можно управлять осями, которые располагаются на экране. Их можно убрать с экрана: axis off – убрать с экрана; axis on – вернуть на экран Можно установить свой масштаб по осям: axis([xmin xmax ymin ymax]),где xmin, xmax – минимальное и максимальное значение по оси x; ymin ymax – минимальное и максимальное значение по оси y; Eсли график 3-мерный, то команда будет иметь вид: axis([xmin xmax ymin ymax zmin zmax]). axis ('i j’) – центр координат будет расположен в левом верхнем углу экрана axis (‘xy’) - обычное расположение осей axis (‘square’) – график будет занимать область с одинаковыми диапазонами значений по осям х и у. axis (‘equal’) – одинаковый масштаб по обеим осям. axis (‘auto’) – устанавливает масштаб по умолчанию Диаграммы Диаграммы позволяют представить векторные и матричные данные в более наглядном виде. Для построения столбиковой диаграммы используется функция bar(<вектор> ). Пусть имеем вектор Y. Построим столбиковую диаграмму. >>Y=[2 5 3 7]; >> bar(Y) Каждый элемент представляется в виде столбца, высота которого пропорциональна его значению. На оси x – номера элементов. Зададим два вектора X иY. Они должны быть одной длины. >>Y=[2 5 3 7]; >>X=[8 10 4 1]; >> bar(X ,Y) В этом случае по оси y откладываются значения вектора y, а по оси х - не номера элементов, а значения вектора х. В качестве аргумента функции bar можно задать матрицу: >> A=[1 2 3; 4 5 6; 7 8 9]; >> bar(A) Чтобы отобразить функцию в виде диаграммы нужно получить два вектора (вектор значения аргумента и вектор значения функции) и применить к ним команду bar. >>X=0: 0.1: 5; >>Y=exp(x); >>bar(X, Y); Трехмерная графика. График поверхности (трехмерный график) – это график, положение точки в котором определяется значениями трех координат. Трехмерным аналогом функции plot является функция plot3, которая позволяет создавать трехмерные линии. Если есть три вектора x, y, z, задающих координаты точек в трехмерном пространстве, то при выполнении функции plot3(x,y,z), построится трехмерная линия на плоскости. Пусть требуется построить график линии, заданной формулами: x=2sin(t+/2), y=2cos(t+/2), z=t, где t принадлежит диапазону [0, 8] >> t=0:pi/100:8*pi; >> x=2*sin(t+pi/2); >> y=2*cos(t+pi/2); >> z=t; >> plot3(x,y,z); >> axis square; >> grid on Построилась винтовая линия (спираль). Функция plot3, также как и функция plot, может иметь дополнительный аргумент, задающий параметры линии (тип линии, цвет и тип маркера). Например, plot3(x,y,z, ‘g*’). Можно также использовать команду ezplot3: >> ezplot3('cos(2*pi*t)','sin(2*pi*t)','t',[-2,2]) Для вычерчивания каркасных поверхностей в трехмерном пространстве существуют две основные функции: mesh и surf. Команда mesh(Z) – строит прозрачную сетчатую поверхность, а команда surf(Z)- затененную, где Z - матрица, значения элементов которой определяют соответствующие координаты на графике. Построим прозрачную поверхность для единичной матрицы, задав команды: >>Z=eye(8); >>mesh(Z) По главной диагонали расположены “пики” – единицы. Аналогично, задав команду: >>surf(Z) Получим затененную поверхность. Для построения в трехмерном пространстве функции от 2-х переменных Z(X, Y) необходимо сначала с помощью векторов x и y задать прямоугольную сетку, которая будет использоваться как основание для построения трехмерной поверхности. Для этого надо воспользоваться функцией meshgrid, которая создает эту сетку из точек в прямоугольной области с заданными интервалами. Диапазоны значений по осям x и y задаются векторами x и y соответственно. Имена векторов и матриц могут различаться. Пусть значения по осям x и y заданы векторами x и y: >> x=[1 2 3]; >> y=[4 5 6]; Сформируем матрицы X и Y с помощью функции meshgrid: >> [X,Y]=meshgrid (x,y) X = 1 2 3 1 2 3 1 2 3 Y = 4 4 4 5 5 5 6 6 6 На основе векторов x и y формируются две матрицы, в которые записываются координаты узлов сетки. Матрица X содержит одинаковые строки, в которых заданы координаты X. Матрица Y содержит одинаковые столбцы, в которых заданы координаты Y. Наложение матриц X и Y позволяет получить пары (xi и yj), для которых в дальнейшем вычисляется значение функции Z. Значения функции в узлах сетки записываются в матрицу Z, размерность которой равна размерности матриц X и Y. Построим график функции, которая имеет вид: на заданном интервале от-2 до 2 и от y от -4 до 4 с шагом равным 0.1 Зададим два вектора x и y, используя запись: >>x =-2 : 0.1: 2; >>y =-4 : 0.1 :4; Далее вызывается команда >>[X, Y]=meshgrid(x, y) Значения векторов можно указать прямо внутри команды meshgrid(-2:0.1:2,-4:0.1:4) Если оба вектора одинаковые, то можно записать: [X, Y]= meshgrid(x) Создаётся прямоугольная сетка с шагом 0.1, которая используется для построения 3-х мерной поверхности. Каждому значению x ставится в соответствие каждое значение y. Для каждой пары xi yi,, (в узлах сетки) будет вычислено значение функции Z. В результате сформируется матрица из вычисленных значений функции. После этого можно вызвать команду для вывода изображения на экран. Ниже приведен пример построения графика с использованием функции plot3: >>x=-2:0.1:2; >>y=-4:0.1:4; >>[X, Y]=meshgrid(x, y); >>Z=2*X.*exp(-X.^2 - Y.^2); >>plot3(X, Y, Z) >>grid Более наглядные графики получаются с использованием функции mesh. >> mesh(X,Y,Z) Линии на разных участках графика окрашены в разные цвета. Эти цвета соответствуют значениям функции. По умолчанию оттенки красного цвета соответствуют большим значениям функции, а синего – меньшим. Можно сделать “прозрачной” каркасную поверхность, отобразив ее скрытые части, применив команду hidden off. Отмена - hidden on. Если использовать функцию meshz(X,Y,Z), то будет видно основание, на котором построен график. Программирование в ML Система ML предоставляет пользователю для решения различных задач свой язык программирования, понятный непрофессиональным программистам. До сих пор все вычисления и операции мы производили в режиме прямых вычислений. Для эффективной работы с большими наборами команд этого недостаточно. Гораздо лучше было бы записать этот набор команд в виде программы и сохранить ее на диске. Программа представляет собой последовательность команд, записанных на языке ML (программный код), и сохраняется на диске в виде m- файла. Создать m - файл можно с помощью любого текстового редактора, но в ML предусмотрен собственный встроенный редактор EDITOR, который имеет удобные средства для создания и отладки программ. Написанный текст программы студенты должны сохранять в файле на диске, куда разрешена запись, задав ему имя (имя файла и имя каталога не должны содержать русских букв). Этот файл будет иметь расширение .m. Чтобы войти в текстовый редактор, надо выбрать пункт меню File, New, m-file. В редакторе m- файлов можно не только набрать текст программы, но и запустить ее на выполнение. Для сохранения программы на диске надо выбрать пункт меню File, Save as, <имя m-файла>. m - файлы могут быть двух видов: • файл-программа, или Script-файл (Script m-File); • файл-функция (Function m-File). Файлы-программы называют Script-файлами или сценариями. Они состоят из последовательности команд и не имеют входных и выходных параметров. Они обычно используются для автоматизации выполнения большого набора команд. Вызов Script-файла осуществляется просто указанием его имени. В файлах- функциях описываются функции, определяемые пользователем. Они могут иметь входные и выходные значения. Обращение к файлу-функции осуществляется указанием имени и в круглых скобках списка параметров. Операторы языка Программа может иметь комментарии. Символ % означает, что далее следует поясняющий текст. Все комментарии начинаются с этого знака. Комментарий не является исполняемым оператором. Вывод комментариев на экран при выполнении программы обеспечивает оператор echo on. Отменяет вывод комментариев на экран оператор echo off. Оператор pause приостанавливает выполнение программы и ожидает нажатия любой клавиши для продолжения. Оператор pause(n) создает паузу в n секунд. Операторами языка можно пользоваться как при создании программ, так и в режиме прямых вычислений. Операторы ввода/вывода Интерактивное взаимодействие пользователя с программой реализуется с помощью операторов input и display. Оператор input(<текст>) обеспечивает ввод данных с клавиатуры. Текст, указанный в качестве параметра, заключается в апострофы. Он отображается на экране при вводе. Обращение к этой функции имеет вид: <имя переменной>= input(‘<текст>’) Например, при выполнении команды x=input(‘вв. x= ’) на экран выводится текст ’вв. х=’ и ожидается ввод данных с клавиатуры. Введенное данное присваивается переменной х. При наборе в командном окне: >> r=input('Введите радиус '); На экране получим: Введите радиус Далее ожидается ввод значения переменной r. Если в текст выводимой строки ввести символы '\ n’, то курсор будет перемещен на следующую строку. >> r=input('Введите \n радиус '); Введите радиус= Оператор display(<параметр>) или disp(<параметр>) выводит значение переменной или константы. disp(A) – выведет матрицу А, причем выводятся только значения элементов, а текст ‘А=’, выводится не будет. disp(‘Привет’) - на экране будет выведено слово Привет Операторы цикла и условные операторы. Язык ML имеет специальные управляющие конструкции, которые позволяют задавать последовательность выполнения команд в программах. Такие конструкции называются операторами управления и задаются с помощью ключевых слов. Это операторы цикла for и while, условный оператор if и оператор переключения (выбора) switch…case. Синтаксис и выполняемые действия этих операторов аналогичны соответствующим операторам известных языков программирования. Область действия каждой конструкции ограничивается словом end. MATLAB допускает вложенность операторов. Оператор цикла с параметром Оператор цикла позволяет описывать действия, которые выполняются фиксированное количество раз. for <параметр цикла>=<начальное значение>:<шаг>:<конечное значение> <операторы> end Для досрочного прерывания цикла, используется оператор break. Если шаг изменения параметра цикла равен 1, то его можно не указывать. Параметры цикла, их начальное и конечное значения и шаг изменения, могут быть целого и вещественного типа. Например, требуется вычислить значения у=x2 для всех х на отрезке от 1 до 10 c шагом равным 3. >>for x=1:3:10 y=x^2 end Результат выполнения данного оператора: y = 1 y = 16 y = 49 y = 100 Или вычислим значения у для всех х на отрезке от 0.1 до 1 c шагом равным 0.5. >> for x=0.1:0.5:1 y=x^2 end В результате получили: y = 0.0100 y = 0.3600 Везде, где возможно, в ML следует использовать не циклы, а векторные и матричные операции (т.к. это быстрее). Пусть требуется составить вектор из 5 нечетных чисел натурального ряда. В ML решать эту задачу можно 3 способами: • Первый способ - использовать оператор цикла >> for i =1:5 x(i)=2*i-1 end На экране получим: x = 1 x = 1 3 x = 1 3 5 x = 1 3 5 7 x = 1 3 5 7 9 Этот способ очень неэффективен по времени, т.к. память не выделяется сразу под весь массив, а при каждой итерации цикла заново создается вектор х с размерностью на единицу большей, чем на предыдущем шаге, что и приводит к большим затратам времени. Это показывает распечатка результов. • Второй способ - сформировать вектор из нулей х=zeros(1,5), а потом заполнить его значениями. >> x=zeros(1,5) x = 0 0 0 0 0 >> for i=1:5 x(i)=2*i-1 end В результате получим: x = 1 0 0 0 0 x = 1 3 0 0 0 x = 1 3 5 0 0 x = 1 3 5 7 0 x = 1 3 5 7 9 В данном случае мы заранее определили размер вектора, в который записываются результаты работы цикла. Этот способ несколько быстрее первого. • Третий способ - можно сформировать два вектора: вектор i=1:5 и вектор х=2*i-1 >> i=1: 5 i = 1 2 3 4 5 >> x=2*i-1 x = 1 3 5 7 9 В данном случае применяются векторные операции вместо использования циклов, и этот способ самый быстрый. Чтобы повысить эффективность работы программы, следует иметь в виду следующее правило: везде, где возможно, заменять фрагменты программы, содержащие циклы for и while на матричные операции или матричные функции. Это объясняется тем, что скорость выполнения матричных и векторных операций выше. Если нельзя обойтись без циклов, то можно заставить их выполняться быстрее, если следовать правилу: создавать заранее каждый вектор, в который требуется записывать результат работы цикла. Оператор цикла с предусловием Данный оператор позволяет запрограммировать цикл, в котором количество повторений зависит от выполнения некоторого условия. while <логическое выражение, задающее условие продолжения цикла> <операторы> end Сформируем вектор нечетных чисел: >>x=zeros(1, 5) >> i=1; >> while i<=5 x(i)=2*i-1; i=i+1; end; x = 1 3 5 7 9 Как видим, такой способ получения последовательности нечетных чисел тоже возможен, но он также является неэффективным, т. е. медленным. Найти наибольшее число, факториал которого< 150. >>echo on %нахождение наибольшего числа, факториал, которого меньше 150 >>i=1; f=1; while f<150 i=i+1; f=f*i; end disp(i-1) на экране получим: 5 или можно воспользоваться встроенной функцией: >> i=1; while prod(1:i)<150 i=i+1; end; disp(i-1) на экране получим: 5 Условный оператор Условный оператор позволяет организовать ветвления в программе и имеет следующую синтаксическую конструкцию: if (<логическое выражение1>) <операторы> [elseif (<логическое выражение2>) <операторы> elseif (<логическое выражение3>) <операторы> …] [else <операторы>] end В этой конструкции может быть произвольное количество вложений ветвей elseif или их может не быть вовсе. Пусть необходимо по введенной с клавиатуры температуре воздуха охарактеризовать погоду. Введем следующий текст: >> t=input('введи температуру') if (t<0) s='мороз' elseif and(t>0,t<=10) s='холодно' elseif and(t>10,t<=20) s='тепло' else s='жарко' end В результате выполнения этих команд получим на экране: введи температуру (например, ввели -4) -4 t = -4 s = мороз Логическое выражение может быть записано и в такой форме: (t>0)&(t<=10) Оператор переключения (выбора) Если необходимо сделать множественный выбор, можно воспользоваться оператором переключения, синтаксическая конструкция которого приведена ниже. Switch <ключевое выражение> Case { <список значений1} <операторы> Case {<список значений2>} <операторы> ……. [Otherwise <операторы>] End Сначала вычисляется значение ключевого выражения. Затем это значение ищется в списках значений. Если совпадение найдено, то выполняются операторы соответствующего блока, в противном случае выполняются операторы, стоящие после ключевого слова otherwise. Пусть необходимо по введенному с клавиатуры номеру месяца вывести название времени года. Ниже приведены команды, позволяющие решить эту задачу. >>n=input('введи номер месяца : ') switch n case {1,2,12} disp('зима') case {3,4,5} disp('весна') case {6,7,8} disp('лето') case {9,10,11} disp('осень') otherwise disp('ошибка') end На экране получим: введи номер месяца : 11 n = 11 осень Встроенные функции eval и menu Функция eval В ML имеется возможность сформировать требуемую команду в виде строки символов, а затем выполнить ее, как обычную команду, набранную в командном окне. Для этого предназначена встроенная функция eval. Метод задания команд в виде текстовых строк и их выполнения с помощью этой функции, используется при написании m-файлов, т. к. такой метод позволяет реализовывать более эффективные алгоритмы решения задач. Функция еval (<текст>) предназначена для выполнения команды, заданной текстом, как команды ML. Например, eval (‘2*2+3’) выводит на экран 7. Аргументом функции может быть также строковая переменная. Команда eval (‘<имя скрипт-файла>’) вызовет выполнение операторов, находящихся в файле с соответствующим именем. Функция menu Эта функция предназначена для вывода на экран окна с выпадающим меню, которое имеет заголовок и кнопки с названиями пунктов меню. Количество кнопок, равное количеству пунктов меню, определяется количеством параметров функции menu. k=menu(‘<заголовок меню>’,’<назв. пункта 1>’,…,’<назв. пункта n>’) Номер выбранной кнопки является результатом функции menu. Пример. Пусть необходимо построить график функции на заданном интервале от 0 до 2pi, цветом, выбранным из меню. Напишем script-файл: k=menu ('цвет','красный', 'зеленый','синий') color=['r' 'g' 'b']; t=0:0.1:2*pi; s=sin(t); plot(t,s,color(k)) При выполнении этого скрипт-файла функция menu выводит на экран окно вида: При нажатии на одну из кнопок с названием цвета, номер этой кнопки становится результатом функции menu и попадает в переменную k. Вектор-столбец color содержит атрибуты цвета для построения графика. По номеру k нужный атрибут выбирается из массива color и указывается в команде plot. В результате, выбрав нужный пункт меню, получим график функции, построенный выбранным цветом. Для организации многократного выбора и выполнения нужных действий с помощью меню можно использовать цикл while и функцию eval. Для этого команды, реализующие необходимые действия, оформляются в виде скрипт-файлов: для каждого пункта меню – свой скрипт-файл , затем необходимо задать символьную матрицу, например, D, состоящую из названий файлов, соответствующих пунктам меню (заданий). Строки символьной матрицы должны иметь одинаковую длину. Команда return обеспечивает возврат из функции или скрипт-файла в точку вызова. В данном примере можно также использовать команду break, которая предназначена для досрочного прерывания цикла. Предположим, что необходимо выполнить по выбору 3 задания в любом порядке. D=[‘f1 ’ ‘f2 ’ 'f3 ' ‘return‘]; n=1; while n<4 n=menu(‘меню’, ’пункт1’, ’пункт2’, ’пункт3’, ’выход’) eval(D(n,:)) end Каждая строка символьной матрицы D содержит имя одного из файлов, реализующих соответствующий пункт меню. В n – ой строке матрицы находится название файла, выполняющего n –й пункт меню. Обращение D(n,:) позволяет извлечь из матрицы D n-ую строку, содержащую название файла. В результате выполнения команды menu в n записывается номер выбранного пункта меню. Для выполнения файл-программы достаточно в командной строке указать имя этого скрипта. Функция eval с параметром D(n,:) запускает соответствующий скрипт-файл для выполнения. Создание и использование m-файлов Эффективным способом выполнения команд в ML является применение m-файлов. Текстовый файл, содержащий набор инструкций на языке системы ML, называется m-файлом. Инструкции выполняются последовательно от начала до конца файла. Существует возможность досрочного выхода из m-файла, для этого используется оператор return. При необходимости прервать работу с ML используется оператор exit. Различают два вида m-файлов: • Файл-программы (Script m-файл) • Файл-функции (Function m-файл) Script-файлы Файл-программы (их называют скриптами или сценариями) являются самым простым типом m-файлов. Script-файл состоит из последовательности команд, не содержит заголовка, а также входных и выходных параметров. Все объекты, используемые внутри script-файла, считаются глобальными. Если в рабочем пространстве есть данные, то внутри script-файла их можно использовать, а после окончания выполнения script-файла можно использовать данные, созданные с его помощью. Такие файлы используются для автоматизации выполнения большого набора инструкций. В одной строке программы можно размещать несколько операторов, тогда они разделяются либо запятой, либо точкой с запятой. Если оператор длинный и не умещается на одной строке, то в конце строки ставятся три точки и дальше на другой строке продолжается набор этого оператора. Для выполнения файл-программы достаточно в командной строке указать имя этого скрипта. Перед запуском программы на выполнение необходимо установить свой каталог в качестве текущего. Запуск файла на выполнение можно осуществить двумя способами: 1. из окна редактора; 2. из командного окна. Для запуска программы на выполнение из окна редактора надо выбрать пункт меню Debug, Run, или нажать функциональную клавишу F5, или выбрать соответствующую пиктограмму на панели инструментов. Выполнить программу, уже сохраненную на диске, можно из командного окна ML, просто набрав имя файла без расширения. Создадим script-файл, в который поместим текст программы, позволяющей вычислить длину окружности по величине ее радиуса. В текстовом редакторе наберем следующий текст: % Вычисление длины окружности r=input (‘Введите радиус окружности ’) l=2*pi*r; disp(‘Длина окружности равна’) disp(l) Сохраним его на диске с именем dl_okr в своей папке. Затем вызовем его для выполнения, указав в окне Command Window в командной строке имя файла dl_okr . >> dl_okr Получим на экране: Введите радиус окружности 12 r = 12 Длина окружности равна 75.3982 Файлы-функции Система ML позволяет описать свои пользовательские функции и обращаться к ним, как к встроеннным. В отличие от script-файла файл - функция имеет входные параметры и может передавать результат в виде выходных параметров. Файлы-функции часто применяют при решении задач вычислительной математики. Можно создавать файл-функцию с любым количеством входных и выходных параметров. Файл-функция всегда состоит из заголовка и тела функции. Заголовок функции: function[<список вых. параметров>]=<имя функции>(<список вх. параметров>) Заголовок функции включает ключевое слово function, имя функции, входные и выходные параметры. После заголовка записываются операторы, реализующие алгоритм поставленной задачи. Они составляют тело функции. Если функция содержит только один выходной параметр, то квадратные скобки не нужны, а если несколько, то они указываются через запятую в квадратных скобках, образуя вектор. Переменным из списка выходных параметров присваиваются значения, вычисленные в функции. Список входных параметров указывается через запятую в круглых скобках после имени функции. Имя m-файла, в котором сохраняется текст функции должно совпадать с именем функции. Имя функции не несёт результата. При вызове файл-функции нужно указать ее имя и список фактических параметров. Это можно осуществить либо в командном режиме, либо из других файл-программ или файл-функций. Вызов (активизация) файла-функции c одним выходным параметром может иметь вид: <имя функции>(<список входных фактических параметров>) и может использоваться в операторах присваивания или в выражении:: <имя переменой>=<имя функции>(<список входн. фактических пар-ов>) Выходных параметров может быть столько, сколько необходимо, тогда список выходных параметров перечисляется через запятую в квадратных скобках: function[]=<имя функции>(< список входных. параметров >) <операторы, в результате которых выходные параметры получают значения> Вызвать такую функцию можно так: [y1, y2,…,yn]=<имя функции>(<список вх. факт. параметров>) Все переменные, используемые внутри файла-функции, а также входные и выходные параметры являются локальными. Они доступны только внутри функции. Напишем файл-функцию, позволяющую вычислить факториал любого числа. Не будем использовать оператор цикла, а используем функцию prod(1:n). В редакторе наберем следующий текст: %нахождение факториала любого числа function f=factorial(x) f=prod(1:x); Сохраним файл на диске с именем factorial. Этот файл получит расширение .m. Обратимся к функции для вычисления факториала числа 5: >> factorial(5) ans = 120 или >> f=factorial(5) f = 120 Отличия файла-функции от Scipt-файла: 1. Файл-функция имеет входные и выходные параметры, а scipt-файл - нет; 2. Все переменные, используемые внутри файла-функции, локальны. Файл-программа работает с переменными рабочего пространства, т.е. в scipt-файле можно использовать глобальные данные; 3. Функция перед выполнением компилируется. Scipt-файл не компилируется целиком, а выполняется в режиме интерпретации. 4. Имя файла, в котором записана функция, должно совпадать с именем функции, а имя scipt-файла может быть любым. Программа будет выполняться быстрее, если вместо script-файла использовать файл-функцию (в случае, если это возможно). Использование файлов- функций. Файлы-функции широко используются в ML. Пользователь может с их помощью описывать свои функции для многократного выполнения, также с их помощью могут решаться следующие задачи: 1. построение графика функций; 2. численное интегрирование; 3. нахождение корней трансцендентного уравнения; 4. поиск экстремумов функци; 5. решение систем дифференциальных уравнений. Построение графика. График функции на заданном отрезке, символьное выражение (формула) которой записано в файле-функции, можно построить, используя команду: fplot ( fun, interval), где fun – имя функции или символьное выражение, задающее формулу вычисления; interval – отрезок, который задается вектором из двух значений: начального и конечного значения отрезка. В качестве примера построим график функции х2-1 на отрезке от 0 до . Для функции х2-1 напишем файл-функцию. В текстовом редакторе наберем следующий текст: function f=func(x) f=x.^2-1; Сохраним его в файле с именем func.m. Для построения графика выполним команду: >> fplot('func',[0 pi]) Или используем вместо имени функции символьное выражение: >> fplot('sin(x)',[0 pi]) Вычисление интеграла. Самым простым численным методом нахождения определенных интегралов является метод трапеций, который реализован функцией trapz (x, y), где x и y – вектора, задающие значения аргумента и функции в пределах интегрирования. Для ее использования не требуется оформление подинтегральной функции в качестве файла-функции. Вычислим интеграл >> x=0:pi/100:pi; >> y=sin(x); >> z=trapz(x,y); z = 1.9998 Получили приближенное значение интеграла. Увеличив шаг интегрирования до pi/1000, получим более точное значение – 2. Более точные методы реализованы в функциях quad, quad8, quadl. Функция quad основана на квадратурной формуле Симпсона, а функция quadl предназначена для вычисления интеграла по более точным формулам Гаусса-Лейбница. Функция quad8 реализует метод Ньютона-Котеса восьмого порядка. Все три функции имеют одинаковый набор параметров. [i, n]=quad(fun, a, b, tol, trace), где fun - имя файла-функции или символьное выражение, определяющее подинтегральную функцию (оно должно быть заключено в апострофы); a, b – пределы интегрирования; tol – погрешность вычислений; trace – признак; если его значение равно 1, то при выполнении функции строится график подинтегральной функции, если 0, то не строится. Последние два параметра являются необязательными. i – значение интеграла; n – количество значений функции, которое потребовалось вычислить для нахождения значения интеграла. >> [i, n]=quad8('func', 0, pi, 1e-8, 1) i = 7.1938 n = 33 При использовании этих численных методов задаётся требуемая точность вычислений, а шаг подбирается автоматически (в отличие от функции trapz). По умолчанию точность равна 10-6. Имя функции может быть задано символьным выражением. >> [i,n]=quad8('sin(x)', 0, pi, 1e-8, 0) i = 2.0000 n = 33 Такой же результат получим, если не укажем два необязательных параметра: >> [i, n]=quad8('sin(x)', 0, pi ) i = 2.0000 n = 33 Тот же интеграл можно вычислить с использованием функции quadl: >> [i, n]=quadl('sin(x)',0,pi,1e-8,0) i = 2.0000 n = 48 Для достижения одной и той же точности понадобилось различное количество вычислений. Можно при вызове функции не указывать выходной параметр n. Тогда команда обращения к функции будет: >> i=quadl('sin(x)', 0, pi, 1e-8, 0) i = 2.0000 В этом случае не используется количество значений функции, которое потребовалось вычислить для нахождения значения интеграла. Решение трансцендентных уравнений. Для решения уравнений вида f(x)=0 (нахождения нулей функции f(x)) предназначена функция fzero, которая находит приближенное значение корня уравнения по заданному начальному приближению. Функция fzero находит значение аргумента, при котором функция обращается в 0. fzero(fun, x0, tol, trace), где fun - имя файл-функции или символьное выражение (формула), заключенные в апострофы; х0 – начальное значение х, от которого начнётся процесс; tol – погрешность вычислений; trace – признак; если значение 1, то график строится, если 0, то не строится. tol и tracе являются необязательными параметрами. Если корней несколько, то задавая различные начальные значения, можно найти различные корни. Например, построим график функции sin(x)/(x*2) на отрезке [-10 1]). >> s='sin(x)/(x*2)' >>fplot(s, [-10 1]) При различных начальных значениях получаем различные корни. >> fzero(s, -7) ans = -6.2832 >> fzero(s, -4) ans = -3.1416 Нахождение минимума функции на заданном отрезке. Вычисление локального минимума функции одной переменной на заданном отрезке выполняет функция fminbnd. При использовании функции поиска минимума рекомендуется предварительно построить график исследуемой функции, чтобы точнее определить отрезки поиска минимума. [x, y] = fminbnd(fun, a, b), где fun – имя функции или символьное выражение (формула), заключенное в апострофы; a, b – границы отрезка, на котором ищется минимум; Результат – вектор, состоящий из двух значений: x –аргумент функции (вычисленное значение), при котором достигается минимум; y – значение функции в точке минимума; Пример. Для функции sin(x)/(x*2) найти локальный минимум на отрезке [-10 1], вывести значение функции в этой точке и построить график. >> [x,y]=fminbnd('sin(x)/(x*2)',-10,1) x = -4.4934 y = -0.1086 Если хотим получить только значение аргумента, при котором функция будет иметь минимальное значение, то обращение к функции будет: >> fminbnd('sin(x)/(x*2)',-10,1) ans = -4.4934 или >> x=fminbnd('sin(x)/(x*2)',-10,1) x = -4.4934 >> ezplot('sin(x)/(x*2)',-10,1) >> grid on Для нахождения локального максимума не предусмотрено специальной функции. Можно найти максимум, используя fminbnd для функции, имеющей обратный знак.
«Графика в ML» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 142 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot