Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Графика в MATLAB. Двумерная и трёхмерная графика.





Графика в MATLAB. Двумерная и трёхмерная графика.

Интерполяции и аппроксимации данных.

Использование математического пакета MATLAB

Для исследования функций

 

Цель занятия: использование математического пакета MATLAB для графических построений. Интерполяция и аппроксимация данных. Использование математического пакета MATLAB для исследования функций и операций с полиномами. Использование математического пакета MATLAB для численного интегрирования и решения дифференциальных уравнений (4 часа).

 

Теоретическая часть

 

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

 

MATLAB обладает широким набором средств для построения графиков функций одной и двух переменных и отображения различных типов данных. Все графики выводятся в графические окна со своими меню и панелями инструментов. Вид графиков определяется аргументами графических команд и затем может быть изменён при помощи инструментов графического окна. Важно понимать, что для построения графиков функций на некоторой области изменения аргументов следует вычислить значения функции в точках области, часто для получения хороших графиков следует использовать достаточно много точек.

Разберем сначала, как получить график функции одной переменной, к примеру:

 

 

на отрезке [-2, 2]. Первый шаг состоит в задании координат точек по оси абсцисс. Заполнение вектора x элементами с постоянным шагом при помощи двоеточия позволяет просто решить эту задачу. Далее необходимо поэлементно вычислить значения f (x) для каждого элемента вектора x и записать результат в вектор f. Для построения графика функции осталось использовать какую-либо из графических функций MATLAB. Достаточно универсальной графической функцией является функция plot. В самом простом случае она вызывается с двумя входными аргументами – парой x и f (то есть plot выводит зависимость элементов одного вектора от элементов другого). Последовательность команд, записанная ниже, приводит к появлению графического окна с графиком функции (рис. 3.1):

 

>> x=[-2:0.05:2];

>> f=exp(x).*sin(pi*x)+x.^2;

>> plot(x,f).

Рис. 3.1

 

Тип линии, цвет и маркеры определяются значением третьего дополнительного аргумента функции plot. Этот аргумент указывается в апострофах, например, вызов plot(x,f,'ro:') приводит к построению графика красной пунктирной линией, размеченной круглыми маркерами. Обратите внимание, что абсциссы маркеров определяются значениями элементов вектора x. Всего в дополнительном аргументе может быть заполнено три позиции, соответствующие цвету, типу маркеров и стилю линии. Обозначения для них приведены в табл. 3.1. Порядок позиций может быть произвольный, допустимо указывать только один или два параметра, например, цвет и тип маркеров. Посмотрите на результат выполнения следующих команд: plot(x,f,'g'), plot(x,f,'ko'), plot(x,f,':').

Функция plot имеет достаточно универсальный интерфейс, она, в частности, позволяет отображать графики нескольких функций на одних осях. Пусть требуется вывести график не только f (x), но и на отрезке [-2, 2]. Сначала необходимо вычислить значения g (x):

 

>> g=exp(-x.^2).*sin(5*pi*x);,

 

а затем вызвать plot, указав через запятую пары x,f и x,g и, при желании, свойства каждой из линий (рис. 3.2):

 

>>

 

Рис. 3.2

 

Таблица 3.1

Графическая функция fplot

 

Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/ x, которые имеют устранимые неопределённости. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:

 

fplot('f(x)', [xmin xmax]).

 

Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х:

 

fplot(‘sin(x)/x’,[-10 10]).

 

Один из вариантов её применения демонстрирует рис. 3.18. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х =0 sin x / x =l. Обратите также внимание на две используемые команды: clear (очистить) – очистка графического окна и grid on (сетка) – включение отображения сетки, которая строится пунктирными линиями.

На рис. 3.18 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.

 

 

Рис. 3.18.Построение графика sin(x)/ x функцией fplot

Интерполяция сплайнами

 

Повысить качество аппроксимации экспериментальных данных можно с помощью сплайнов. Сплайн – это непрерывная гладкая функция, которая на отрезках области определения равна полиномам определённой степени. Иными словами, при таком способе интерполяции экспериментальные точки попарно соединяются отрезками полиномов. Обычно используют полиномы третьей степени, поэтому данный метод и получил название интерполяция кубическими сплайнами.

Интерполяцию кубическими сплайнами можно выполнить с помощью функции spline. Если к этой функции обратиться в форме

 

уу=spline(x,y,xx)

 

она выполнит интерполяцию значений вектора у, заданного для значений аргумента, представленного вектором х, и вернёт вектор уу, содержащий значения интерполирующей функции для значений аргумента, заданных вектором хх.

Для примера выполним интерполяцию кубическими сплайнами для значений, заданных векторами х и у, и отобразим полученный результат на графике (рис. 3.20):

 

>> x=[1 2 3 4 5 6 7 8 9 10];

>> y=[3 4 6 6.5 7 7.5 9 11 10 9];

>> xx=0.5:0.05:12;

>> yy=spline(x,y,xx);

>> title('Интерполяция кубическими сплайнами');

>> xlabel('x'); ylabel('y');

>> plot(x,y,'ko',xx,yy,'k-'),grid on

>> legend('табличные данные','сплайн')

 

 

Рис. 3.20. Аппроксимация кубическими сплайнами

 

Для одномерной интерполяции табличных данных в MATLAB имеется функция interpl:

 

yy=interpl(х,у,хх,method)

 

В её четвёртом аргументе в виде строки символов задаётся метод интерполяции. Можно задать один из следующих методов:

· ‘nearest’ – ступенчатая интерполяция (когда значение в каждой промежуточной точке принимается равным ближайшему табличному значению);

· ‘linear’ – линейная интерполяция (соединение соседних точек отрезками прямых в соответствии с табличными данными);

· ‘spline’ – интерполяция кубическими сплайнами;

· ‘pchip’ – интерполяция кусочными полиномами Эрмита 3-й степени;

· ‘cubic’–тоже, что и ‘pchip’.

Если метод не указан, по умолчанию используется ‘linear’.

В следующем примере сравниваются различные способы интерполяции, реализованные функцией interpl (графики соответствующих функций представлены на рис. 3.21).

 

>> x=[1 2 3 4 5 6 7 8 9 10];

>> y=[3 4 6 6.5 7 7.5 9 11 10 9];

>> plot(x,y,'ko')

>> xx=0.5:0.05:12;

>> yy1=interp1(x,y,xx,'nearest');

>> yy2=interp1(x,y,xx,'linear');

>> yy3=interp1(x,y,xx,'spline');

>> hold on

>> plot(xx,yy1,'k:',xx,yy2,'k-',xx,yy3,'k--'),grid on

>> title('Различные методы интерполяции')

>> xlabel('x'); ylabel('y');

>> legend('табличные данные','ступенчатая','линейная','сплайн')

 

 

Рис. 3.21. Различные методы интерполяции

В MATLAB можно интерполировать не только одномерные данные. Для интерполирования двухмерных данных предназначена функция interpl, трёхмерных – функция interp2, а многомерных – функция intern.

 

Решение уравнений

 

Для решения уравнений вида f (x) = 0 (то есть для нахождения нулей функции) предназначена встроенная функция MATLAB fzero, которая находит приближённое значение корня уравнения по заданному начальному приближению.

Самый простой способ обращения к этой функции выглядит так:

 

х=fzero(fun,x0),

 

где х0 – это начальное приближение к корню; fun – функция, корень которой вычисляется; а х – полученное приближение значения корня.

Аргумент х0 может быть задан либо в виде скалярного значения, вблизи которого возможно наличие корня, либо в виде вектора из двух значений [m n] (причем n > m), элементы которого представляют собой интервал, на границах которого функция fun имеет разные знаки (что означает наличие хотя бы одного корня на этом промежутке).

Аргумент fun задается либо как указатель на функцию (например, @sin, @cos или @myfun), либо как формула с одной независимой переменной, заключённая в одинарные кавычки, либо как имя файл-функции (в одинарных кавычках), вычисляющей левую часть уравнения.

Рассмотрим случай задания аргумента fun в виде файл-функции.

В файл-функциях описываются функции, определяемые пользователем. Такие функции используются при решении многих задач, основанных на численных методах. Файл-функции представляют собой разновидность m-файлов. Вообще, в MATLAB существуют два типа m-файлов: файл-программы и файл-функции.

Допустим, требуется найти нули функции f (x) = х 2sin(x) Сначала нужно создать файл функцию. Для этого выполните следующие действия:

1. В главном окне MATLAB выберите команду File Þ New Þ m-file (ФайлÞНовый Þm-файл), чтобы вызвать редактор m-файлов системы MATLAB.

2. Наберите в редакторе m-файлов две строки кода, изображённые на рис. 3.22.

 

 

Рис. 3.22. Окно редактора кода с текстом файл-функции

 

Первая строка – это заголовок функции, где задаётся имя функции (в нашем примере myf) и список входных и выходных параметров (в данном случае имеется один входной (х) и один выходной (f) параметр). Во второй строке задаётся тело функции – выражение, вычисляющее значение функции. Обратите внимание, что при вводе функции использованы операторы поэлементного возведения в степень и поэлементного умножения, чтобы функцию можно было использовать и при работе с массивами. Кроме того, во избежание вывода на экран лишней информации, в конце второй строки кода поставлена точка с запятой.

3. Сохраните файл в текущем рабочем каталоге. Для этого в окне редактора m-файлов выберите команду FileÞSave as (ФайлÞСохранить как). В раскрывшемся диалоговом окне не изменяйте содержимое полей File name (Имя файла) Files of type (Тип файла), в которых автоматически отобразятся требуемые имя и тип файл-функции. Имя m-файла обязательно должно совпадать с именем функции (в данном случае для функции выбрано имя myf).

Перед тем как искать нули функции с помощью функции fzero, построим график заданной функции.

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

Чтобы построить график нашей функции на отрезке [0, 10], ввёдем следующие команды (командой grid on укажем программе отобразить сетку на графике):

 

» fplot(‘myf’,[0 10]); grid on.

 

Преимуществом использования функции fplot для построения графиков является то, что она автоматически подбирает шаг аргумента, что позволяет более точно описать поведение функции.

Как следует из графика (рис. 3.23), на отрезке [0, 10] функция имеет четыре корня. Один из корней равен нулю, а три других располагаются около значений х = 3, х = 6 и x = 9.

 

 

Рис. 3.23. График функции f (x) = х 2sin x

 

 

С помощью функции fzero найдём более точные значения этих корней:

 

>> x1=fzero('myf',3)

x1 =

3.1416

>> x2=fzero('myf',6)

x2 =

6.2832

>> x3=fzero('myf',9)

x3 =

9.4248

 

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

 

» х1= fzero(‘x.^2.*sin(x)’,3)

х =

3.1416.

 

Если функцию fzero вызвать с двумя выходными параметрами, то можно получить значение функции в найденной точке:

 

» [x1,f]=fzero(‘myf’,3)

x1=

3.1416

f=

1.2087e-015.

 

Как видно по значению функции, точность вычисления корня с помощью функции fzero довольно высока.

Например, первым аргументом функции fzero может быть и встроенная функция системы MATLAB:

 

» х= fzero(‘sin’,3)

x=

3.1416.

 

Для решения систем нелинейных уравнений вида f (х) = 0 (где х – вектор или матрица неизвестных, а f – функция, значением которой является вектор или матрица) в MATLAB предназначена функция fsolve. Данная функция относится к функциям пакета Toolbox Optimization.

 

Минимизация функций

 

Вычисление локального минимума функции одной переменной на заданном отрезке в MATLAB выполняет функция fminbnd, синтаксис которой аналогичен синтаксису функции fzero.

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

Самый простой способ обращения к функции fminbnd имеет вид:

 

х= fminbnd(fun,х1,х2),

 

где значения х1 и х2 задают границы отрезка поиска минимума; fun – функция, локальный минимум которой вычисляется (задаётся как имя файл-функции в одинарных кавычках либо как формула с одной независимой переменной, заключённая в одинарные кавычки); а х – вычисленное значение, при котором достигается минимум.

Найдём локальный минимум для рассмотренной в предыдущем разделе функции f (x) = x 2sin x на отрезке [2, 8]. Для этого введем в командную строку следующие команды:

 

» х= fminbnd(‘myf’,2,8)

x=

5.0870.

 

Таким образом, локальный минимум на отрезке [2, 8] достигается при х = 5,0870.

Чтобы узнать значение исследуемой функции в точке минимума, нужно вызвать функцию fminbnd с двумя выходными аргументами:

 

»[x,f]= fminbnd(’myf’,2,8)

x=

5.0870

f=

–24.0830.

 

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

 

Интегрирование функций

 

В системе MATLAB реализованы различные методы численного интегрирования функций.

 

Практическая часть

 

Порядок выполнения самостоятельной работы

 

1. Получить у преподавателя вариант индивидуального задания.

2. Произвести вычисление индивидуального задания в математическом пакете MATLAB.

3. Сделать выводы по работе и оформить отчёт.

 

Задания для самостоятельной работы

 

1. Вычислите следующий двойной интеграл

 

 

2. Построить графики функций одной переменной на указанных интервалах. Вывести графики различными способами:

· в отдельные графические окна;

· в одно окно на одни оси;

· в одно окно на отдельные оси.

На графиках дать заголовки, разместить подписи к осям, легенду, использовать различные цвета, стили линий и типы маркеров, нанести сетку.

 

Варианты заданий

 

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

 

3. Построить график кусочно-заданной функции, отобразить ветви разными цветами и маркерами.

 

Варианты заданий

 

1. 2.
3. 4.
5. 6.
7. 8.
9. 10.

 

4. Построить график параметрически заданной функции, используя plot и comet t [0, 2p].

 

Варианты заданий

 

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

 

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

· каркасной поверхностью;

· залитой цветом каркасной поверхностью;

· промаркированными линиями уровня (самостоятельно выбрать значения функции, отображаемые линиями уровня);

· освещённой поверхностью.

Расположить графики в отдельных графических окнах и в одном окне с соответствующим числом пар осей. Представить вид каркасной или освещённой поверхности с нескольких точек обзора.

 

Варианты заданий

 

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

 

6. Написать файл-функции и построить графики на заданном отрезке при помощи plot (с шагом 0,05) и fplot для следующих функций.

 

Варианты заданий

 

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

 

Тестовые вопросы

 

1. Каким образом нужно задать в MATLAB полином, чтобы применить к нему встроенные функции:

а) в виде вектора, элементами которого являются корни полинома;

б) в виде вектора, элементами которого являются коэффициенты полинома;

в) одной переменной присвоить значение степени полинома, а другой – вектор коэффициентов полинома.

 

2. Какое из утверждений является неверным:

а) число элементов вектора, задающего коэффициенты полинома, должно быть на единицу больше степени полинома;

б) в векторе, задающем коэффициенты полинома, также должны содержаться нулевые коэффициенты;

в) в векторе, задающем коэффициенты полинома, можно не указывать нулевые коэффициенты.

 

3. В отличие от функций exp, log, sqrt, матричные функции expm, logm, sqrtm:

а) выполняют поэлементные операции над матрицами;

б) производят вычисления с матрицами по правилам линейной алгебры.

 

4. С помощью какой функции можно выполнить полиномиальную аппроксимацию данных:

а) polyfit;

б) polyval;

в) poly.

 

5. Каким образом невозможно задать первый входной аргумент функции fzero:

а) как указатель на функцию (например, @myfun);

б) как формулу с двумя независимыми переменными, заключённую в одинарные кавычки;

в) как имя файл-функции (в одинарных кавычках), вычисляющей левую часть уравнения.

 

6. Работа какой из функций, предназначенных для вычисления определённых интегралов, основана на формуле Симпсона:

а) quadl;

б) quad;

в) trapz.

 

7. Функция trapz вычисляет определённые интегралы:

а) по квадратурной формуле Симпсона;

б) по формуле трапеций;

в) по квадратурным формулам Гаусса-Лобатто.

 

8. Для построения трёхмерных линий используется функция:

а) 3plot;

б) plot3;

в) plot33.

 

9. Функция mesh применяется для создания:

а) закрашенных поверхностей;

б) каркасных поверхностей;

в) двухмерных массивов с информацией о координатах узлов сетки прямоугольной области определения, на которой строится трёхмерный график.

 

10. Каким образом при построении контурных графиков можно задать программе количество уровней, для которых следует построить изолинии:

а) используя функцию contourn, где n – это количество изолиний;

б) задан четвертым входным аргументом функций contour и contour3 скалярное значение, соответствующее количеству изолиний.

 

11. Как узнать точные координаты некоторой точки на двух- или трёхмерном графике функции:

а) отобразить на экране легенду или цветовую палитру;

б) на панели инструментов Figure (График) графического окна щёлкнуть на кнопке Data Cursor (Указатель данных), а затем щёлкнуть на нужной точке графика.

 

12. Какие координаты по умолчанию имеет точка обзора, если трёхмерное изображение построено с помощью функции mesh или surf:

а) азимут Az=90° и угол возвышения El=30°;

б) азимут Az=-45° и угол возвышения El=45°;

в) азимут Az=-37,5° и угол возвышения El=30°.

 

13. Как получить доступ к инструментам управления камерой:

а) выбрать в графическом окне команду View → Camera Toolbar, чтобы отобразить панель Camera;

б) выбрать в графическом окне команду View → Plot Edit Toolbar, чтобы отобразить панель редактирования графика.

 

14. Какой формат используется по умолчанию при вводе текста на график:

а) формат TeX;

б) формат LaTeX;

в) ни один из форматов.

Графика в MATLAB. Двумерная и трёхмерная графика.







Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.