- •Основные понятия Matlab
- •ВЫЧИСЛЕНИЯ
- •Особенности ввода команд и данных
- •Элементы данных в ML
- •Переменные в ML
- •Выражения
- •ОПЕРАЦИИ
- •Простейшие арифметические операции (АО)
- •Операции отношения
- •Логические операции
- •Приоритет элементарных операций в ML
- •Основные математические функции MatLab
- •Ввод и вывод информации. Операторы ввода/вывода
- •<имя переменной>= input(<текст>)
- •Для этого используют несколько способов.
- •disp(strcat('x=', num2str(x)))
- •y=sprintf('x=%3.1f ', x)
- •%[флаг][ширина поля вывода][точность] тип (спецификатор) формата
- •x=<значение>; y=<значение>; z=<значение>;
- •>> sprintf('x=%4.2f; y=%5.3f; z=%d;',x,y,z)
- •Условный оператор
- •МНОЖЕСТВЕННЫЙ ВЫБОР
- •Определенные циклы
- •Неопределенные циклы
- •ЗАДАНИЕ И ОБРАБОТКА ВЕКТОРОВ И МАТРИЦ
- •Способы задания векторов
- •<имя пер.>=[<значение1> <значение2> ….<значениеN>]
- •<имя пер.>=<нач. значение>:<шаг>:<конечное значение>
- •linspace (<нач. значение>,<кон. значение>,<кол. значений>)
- •Задание матриц
- •Операции
- •Операции над векторами – то же самое
- •Поэлементные операции
- •ОСОБЫЕ МАТРИЦЫ
- •Матрица случайных чисел:
- •Автоматическое заполнение матриц. Формирование матрицы блоками
- •>> X=[eye(4), 3*ones(4); 5*ones(4),9*eye(4)]
- •Дополнительно из задач
- •Применение функций обработки данных к векторам и матрицам
- •>> help datafun
- •Функции для векторов
- •Для матриц
- •Сумма элементов в столбцах матрицы:
- •Сумма элементов в строках матрицы:
- •Сумма элементов вектора:
- •Получение из матрицы вектора
- •Произведение элементов матрицы по столбцам:
- •Произведение элементов матрицы по строкам:
- •Максимальное значение в каждом столбце:
- •Максимальное значение в каждой строке:
- •Максимум во всей матрице
- •Наименьшее значение:
- •Среднее значение
- •Среднее арифметическое в столбцах. Результат – вектор-строка из средних арифметических в каждом столбце:
- •В строках
- •Сортировка.
- •по убыванию:
- •по убыванию
- •’’Зеркальное’’ отображение матрицы относительно вертикальной оси:
- •’’Зеркальное’’ отображение матрицы относительно горизонтальной оси:
- •Примеры использования
- •среднего и суммы:
- •Для матрицы:
- •Найти наибольшее значение среди элементов <8
- •Для матрицы
- •Сумму элементов побочной диагонали
- •Сумму элементов главной диагонали
- •Нормы матрицы
- •>> max_stolb=max(sum(abs(В)))
- •Найти среднее арифметическое в каждом столбце
- •Пр. Удалить максимальный элемент в векторе
- •Пр. Вставить значение 100 в вектор после элемента с номером k=3
- •Пр. В матрице поменять местами столбцы с минимальным и максимальным элементами.
- •[m_min,jmin]=min(min(b));
- •[m_max,jmax]=max(max(b));
- •buf=b(:, jmin);
- •Пр. Поменять порядок следования элементов в векторе
- •Еще полезные функции all, any и find и их использование
- •Для вектора
- •Получить индексы элементов, равных 2
- •Графика ML
- •Построение простейших графиков функций одной переменной Графики параметрических и кусочно-заданных функций
- •Plot(x, y, ‘<тип маркера, обозначение цвета и тип линий>’)
- •Отображение нескольких кривых на одном графике (в одних осях)
- •hold off
- •Вывод нескольких графиков в одном графическом окне
- •subplot(m, n, p),
- •Изменение масштаба графика
- •Диаграммы
- •Трехмерные графики
- •Т=-2:0.01:2; % задали вектор значений аргумента
- •Построение поверхности в 3-мерном пространстве
- •% Поверхность z=f(x,y)
- •Решение типовых математических задач
- •Файлы функций
- •function [рез.1, рез.2…рез.N] = <имя функции> (пар.1, пар.2,…пар.N)
- •[y1, y2,…,yn]=<имя функции>(<список вх. факт. параметров>)
- •<имя функции>(<список входных фактических параметров>)
- •function <имя функции> (пар.1, пар.2,…пар.n)
- •Отличия файла-функции от скрипт-файла
- •Примеры
- •function y=mysin(x)
- •Пример функции с 3 выходными параметрами
- •Использование функций для задач вычислительной математики
- •Построение графика функций
- •Действия с полиномами (многочленами)
- •Решение системы линейных уравнений.
- •Численное интегрирование
- •[i, n]=quadl (fun, a, b, tol, trace),
- •Решение уравнений
- •Нахождение минимума функции на заданном отрезке
- •Функция eval
- •Файл меню
- •while k~=6
- •Символьные вычисления в ML
- •Преобразование символьных выражений
- •Построение графиков символьных функций
- •Решение уравнений и систем
- •Решение дифференциальных уравнений и систем
- •Вычисление пределов
- •Определение производной
- •Вычисление интеграла
Для решения этой системы сначала составим матрицу коэффициентов левой части - A и вектор правых частей – B. Затем решим систему, подставив
Решим уравнение вида A*X=B:
>> A=[1, -3, 4; 2, 1 -7; 1, -6, -1]; % матрица коэффициентов левой части
>> B=[11; 8; -5]; % вектор столбец правых частей
>>X=A \ B
X=
9.6750
2.1250
1.9250
Проверим полученное решение, выполнив умножение A*X:
>> A*X |
% проверка |
ans = |
|
11.0000 |
|
8.0000 |
|
-5.0000
В результате получили вектор правых частей, что доказывает правильность найденного решения.
Или по-другому:
Решение системы X=A-1*B
>> A=[1, -3, 4; 2, 1 -7; 1, -6, -1]; % матрица коэффициентов левой части
B=[11; 8; -5]; >> X=inv(A)*B
X=
9.6750
2.1250
1.9250
Численное интегрирование
В математике существуют различные численные методы вычисления
20
определенных интегралов. Использование того или иного метода зависит от свойств подынтегральной функции на интервале интегрирования. В системе
ML для вычисления определенных интегралов также существуют функции,
реализующие различные методы. Это: trapz (x, y) – использует метод трапеций, quad() – метод Симпсона, quadl() – метод квадратур Лобатто, quadgk() – метод Гаусса-Кронрода и др. (quadv()dblquad()) quad2d() –
вычисление двойного интеграла, triplequad() - вычисление тройного интеграла. Методы отличаются точностью вычислений. Наиболее используемая функция - quadl()
Самым простым численным методом нахождения определенных интегралов является метод трапеций, который реализован функцией trapz (x, y), где x и y – векторы, задающие значения аргумента и функции в пределах интегрирования. Для ее использования не требуется оформление подынтегральной функции в качестве файла-функции.
>> x=0:pi/100:pi; y=exp(-x.^2); z=trapz(x,y)
z = 0.886219032458507
Все остальные функции имеют одинаковый набор параметров:
[i, n]=quadl (fun, a, b, tol, trace),
21
fun – имя файла-функции или символьное выражение, определяющее подынтегральную функцию (оно должно быть заключено в апострофы).
a, b – пределы интегрирования. tol – погрешность вычислений.
trace – признак вывода промежуточных результатов. Если его значение равно единице, то при выполнении функции выдается последовательность из 4-х
столбцов с промежуточными результатами (количество вычислений, левый конец промежутка, его длина, значение интеграла на этом промежутке), если нулю, то не выдается.
Последние два параметра являются необязательными.
Выходные значения:
i – значение интеграла;
n – количество значений функции, которое потребовалось вычислить для нахождения значения интеграла.
При использовании этих численных методов можно задавать требуемую точность вычислений, а шаг подбирается автоматически (в отличие от функции trapz). По умолчанию точность равна 10-6.
Как мы уже знаем, функция может быть задана различными способами
(либо как символьная константа, либо как имя m-файла, в котором записана функция, либо как анонимная функция.).
Если функция задана одним оператором, то удобнее использовать вариант с указателем на функцию (анонимная функция). Например, будем использовать ту же функцию exp(-x^2)
Функцию можно описать ее отдельной командой f = @ (x) (exp(-x.^2)), а затем использовать это имя:
f = @ (x) (exp(-x.^2));
[i, n]= quadl (f, 0, pi, 1e-8,0) i = 0.886219059172834
n=
138
22
Или указать прямо в команде вычисления интеграла:
>> [i, n]= quadl (@ (x) (exp(-x.^2)), 0, pi, 1e-8, 1)
18 0.00000 |
1.5707963 |
0.88616 |
|
|
00000 |
3e+000 |
00099 |
23 0.00000 |
1.4412324 |
0.28045 |
|
|
00000 |
8e-001 |
85210 |
28 0.28824 |
2.9003417 |
0.41128 |
|
|
64966 |
9e-001 |
28181 |
33 0.28824 |
2.6611131 |
0.04819 |
|
|
64966 |
7e-002 |
00338 |
38 0.34146 |
5.3552343 |
0.09157 |
|
|
87600 |
7e-002 |
03542 |
43 0.44857 |
6.4853613 |
0.09958 |
|
|
34474 |
9e-002 |
47932 |
48 0.57828 |
6.4853613 |
0.08574 |
|
|
06752 |
9e-002 |
82019 |
53 0.70798 |
5.3552343 |
0.05998 |
|
|
79030 |
7e-002 |
02482 |
58 0.81509 |
2.6611131 |
0.02620 |
|
|
25903 |
7e-002 |
91868 |
63 0.86831 |
3.5124073 |
0.17115 |
|
|
48537 |
7e-001 |
91410 |
68 0.86831 |
3.2226938 |
0.02865 |
|
|
48537 |
0e-002 |
10329 |
73 0.93276 |
6.4853613 |
0.04801 |
|
|
87298 |
9e-002 |
02371 |
78 1.06247 |
7.8539816 |
0.04286 |
|
|
59576 |
3e-002 |
77948 |
83 1.21955 |
7.8539816 |
0.02926 |
|
|
55902 |
3e-002 |
97717 |
88 1.37663 |
6.4853613 |
0.01631 |
|
|
52229 |
9e-002 |
03789 |
93 1.50634 |
3.2226938 |
0.00604 |
|
|
24507 |
0e-002 |
99256 |
98 1.57079 |
3.5124073 |
0.02217 |
|
|
63268 |
7e-001 |
00092 |
10 |
1.57079 |
3.2226938 |
0.00494 |
3 |
63268 |
0e-002 |
16447 |
10 |
1.63525 |
6.4853613 |
0.00725 |
8 |
02029 |
9e-002 |
43988 |
11 |
1.76495 |
7.8539816 |
0.00531 |
3 |
74307 |
3e-002 |
28603 |
11 |
1.92203 |
7.8539816 |
0.00291 |
8 |
70633 |
3e-002 |
17921 |
12 |
2.07911 |
6.4853613 |
0.00132 |
3 |
66960 |
9e-002 |
32772 |
12 |
2.20882 |
3.2226938 |
0.00042 |
8 |
39238 |
0e-002 |
60361 |
13 |
2.27327 |
2.9003417 |
0.00110 |
3 |
77999 |
9e-001 |
80957 |
23
13 2.85334 1.4412324 0.00004
8 61570 8e-001 04741 i = 0.886219059172834
n=
138
Примерно такое же значение интеграла получим, если не укажем два необязательных параметра, но количество значений другое (т.к. другая точность вычислений):
[i, n]=quadl(f, 0, pi ) i = 0.886219059165851
n =
48
Для достижения разной точности понадобилось различное количество вычислений. Можно при вызове функции не указывать выходной параметр n. В
этом случае не выводится количество значений функции, которое потребовалось, чтобы вычислить для нахождения значения интеграла.
[i, n]= quad (f, 0, pi, 1e-8, 0) i = 0.886219059339376
n = 89
n=quadgk (f, 0, pi) i = 0.886219059172853
Если требуется проиллюстрировать графическую интерпретацию интеграла, а подынтегральная функция задана в виде функции, то
y=-1:0.01:5; plot(y,f(y)) hold on;
x=0:1:pi;% при использовании area шаг не имеет значения
%bar(х,f(х)) или area(х,f(х))
24