Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

практика / Практика Карелина

.docx
Скачиваний:
3
Добавлен:
16.05.2025
Размер:
2.36 Mб
Скачать

x = [-2*pi:pi/20:2*pi];

f = exp(x/7).*cos(x).^2;

g = 7 * exp(-9*x).*sin(x).^2;

plot(x, f, x, g)

Рисунок 37. График функций f и g

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

  1. Сравните две функции: и

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

Операторы и графики функций на Рис. 38.

x = [0:0.1:6];

f = x.^(-3);

F = 1000 * (x + 1.5).^(-3);

plotyy(x, f, x, F)

Рисунок 38. График функций f и F

  1. Постройте графики функций fx  log 0.7x и gx  cos log x на отрезке [0.1, 5] в логарифмическом масштабе по оси x.

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

Операторы и графики функций на Рис. 39-40.

x = [0.1:0.01:5];

f = log(0.7*x);

g = cos(log(x));

semilogx(x,f,x,g)

loglog(x,f,x,g)

semilogy(x,f,x,g)

Рисунок 39. Функция semilogx

Рисунок 40. Функция loglog

  1. Постройте график функции, заданной кусочным образом:

График функции на Рис. 41. Были использованы операторы piecewise и fplot.

syms x;

y = piecewise(-2*pi <= x <= -pi, pi * sin(x), -pi < x < pi, pi - abs(x), pi <= x <= 2 * pi, pi * sin(x).^3);

fplot(y)

Рисунок 41. График функции, заданной кусочным способом

  1. Постройте график функции

на прямоугольной области определения x∈ [−1, 1], y∈ [0, 1]:

а) построить график с каркасной поверхностью (сделать ее «прозрачной» и вернуть в обычный вид);

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

в) получить поверхность, плавно залитую цветом;

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

а) Подготовим матрицы с координатами узлов сетки и значениями функции. Для построения каркасной поверхности используется функция mesh, вызываемая с тремя аргументами. Цвет линий поверхности соответствует значениям функции. MatLab рисует только видимую часть поверхности. При помощи команды hidden off можно сделать каркасную поверхность "прозрачной", добавив скрытую часть. Команда hidden on убирает невидимую часть поверхности, возвращая графику прежний вид. Графики на Рис. 42-43.

[x,y] = meshgrid(-1:0.5:1);

z = 7*sin(5*pi*x).*cos(8.1*pi*y).*(1-x^2).*y.*(1-y);

mesh(x,y,z)

hidden off

hidden on

Рисунок 42. График с hidden off

Рисунок 43. График с hidden off

б) Функция surf строит каркасную поверхность графика функции и заливает каждую клетку поверхности определенным цветом, зависящим от значения функции в точках, соответствующих углам клетки. График на Рис. 44.

surf(x,y,z)

Рисунок 44. График с оператором surf

в) В пределах каждой клетки цвет постоянный. Команда shading flat позволяет убрать каркасные линии. Для получения поверхности, плавно залитой цветом, предназначена команда shading interp. При помощи shading faceted можно вернуться к виду с каркасными линиями. Графики с разными визуализациями на Рис. 44-45.

shading flat

shading interp

shading faceted

Рисунок 45. shading flat

Рисунок 46. shading interp

г) В MatLab определена команда colorbar, которая выводит рядом с графиком столбик, устанавливающий соответствие между цветом и значением функции. Построим при помощи surf график поверхности и дополним его информацией о цвете (Рис. 48)

surf(x,y,z)

colorbar

Рисунок 47. colorbar

  1. Постройте поверхность, состоящую из линий уровня, соответствующих значениям функции от 0 до 0.5 с шагом 0.06.

График функции с линиями уровня на Рис. 49.

levels = [0:0.06:0.5];

contour3(x, y, z, levels)

colorbar

Рисунок 48. График функции с линиями уровня

Упражнение 8. М-файлы. Численные методы и программирование.

  1. Написать файл-функцию myfun (с тригонометрическими функциями, степенью, экспонентой,  и квадратным корнем). Вычислить значение этой функции в нескольких точках. Постройте график функции myfun при помощи plot и fplot на одних осях на отрезке [0, 4] из командной строки или при помощи файл программы.

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

Тогда имеет смысл один раз написать файл-функцию, а потом вызывать его всюду, где необходимо вычисление этой функции. Откроем в редакторе М-файлов новый файл и наберем текст (Рис. 50):

function f = myfun(x)

f = exp(-4*x).*sqrt((x.^6 + 3)./(sin(pi*x)));

end

Рисунок 49. Запись файла-функции

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном выше, имя функции myfun – один входной аргумент х и один выходной – f. После заголовка следует тело функции, где и вычисляется ее значение. Вычисленное значение записывается в f.

Сохраним файл как М-файл.

Рисунок 50. Сохранение М-файла

Теперь созданную функцию можно использовать так же, как и встроенные, например из командной строки. Вычислим значение этой функции в нескольких точках (Рис. 52).

Рисунок 51. Функция в точках

Построим график функции myfun при помощи plot на отрезке [0, 4] (Рис. 53).

x = [0:0.5:4];

y = myfun(x);

plot(x,y)

Рисунок 52. График функции

MatLab предоставляет еще одну возможность работы с файл-функциями – это использование их в качестве аргументов некоторых команд. Например, для построения графика служит специальная функция fplot, заменяющая последовательность команд, приведенную выше. Чтобы построить ф-цию. На том же графике надо использовать команду hold on (Рис. 53).

hold on;

fplot(@myfun, [0 4])

Рисунок 53. График функции на тех же осях

  1. Решите уравнение на отрезке [–10; 10]. Постройте график функции. Вычислите значение корней уравнения.

Нахождение корней произвольных уравнений осуществляет встроенная функция fzero, которая позволяет приближенно вычислить корень уравнения по заданному начальному приближению. В самом простом варианте fzero вызывается с двумя входными и одним выходным аргументом x =fzero (‘myf’, x0), где myf – имя файл-функции, вычисляющей левую часть уравнения; x0 – начальное приближение к корню; x – найденное приближенное значение корня.

Ниже приведен текст требуемой файл-функции:

function f = myfun2(x)

f = 9 * cos(x) + x.^2 .* sin(x);

end

Теперь построим график функции, используя fplot, и нанесем сетку (Рис. 54).

fplot(@myfun2, [-10 10])

grid on

Рисунок 54. График функции

Из графика видно, что функция на этом отрезке имеет 7 корней.

Уточним значение корня, расположенного вблизи x=–9.4, при помощи fzero (Рис. 55).

Рисунок 55. Нахождение примерного значения первого корня

Найдем все корни:

x1=fzero(@myfun2, -9.4) x1 = -9.5237

x2=fzero(@myfun2, -6.5)

x2 = -6.4935

x3=fzero(@myfun2, -3.6) x3 = -3.7186

x4=fzero(@myfun2, -1.3) x4 = -1.3663

x5=fzero(@myfun2, 2)

x5 = 1.9826

x6=fzero(@myfun2, 6) x6 = 6.0414

x7=fzero(@myfun2, 9.3) x7 = 9.3216

  1. Вычислите все корни полинома

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

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

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

Число корней полинома совпадает со степенью полинома. Для правильности работы roots, можно вычислить значение полинома от вектора его корней.

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

Вычисление корней полинома на Рис. 56.

p = [1 4.2 0 0.5 0 2.1 0 -1 2];

polyval(p,1)

r = roots(p)

polyval(p,r)

Рисунок 56. Вычисление корней полинома

Вывод

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

Список используемой литературы

  1. Гареева Г.А. Основы программирования в MATLAB: учебно-методическое пособие / Гареева Г.А., Григорьева Д.Р. – Набережные Челны: Изд-во Набережночелнинского института КФУ, 2019. – 104

  2. Документация MatLab – URL: https://www.mathworks.com/help/matlab/index.html?s_tid=hc_panel (дата обращения: 20.04.2023).

Соседние файлы в папке практика