- •Основные понятия 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
- •Преобразование символьных выражений
- •Построение графиков символьных функций
- •Решение уравнений и систем
- •Решение дифференциальных уравнений и систем
- •Вычисление пределов
- •Определение производной
- •Вычисление интеграла
Решение уравнений
Часто приходится решать уравнения вида f(x)=0 на интервале a<x<b, где функция f(x) определена и непрерывна на заданном интервале.
Если функция представляет собой многочлен, то уравнение называется алгебраическим, если же в функцию входят тригонометрические,
показательные, логарифмические функции, то оно называется
трансцендентным.
Всякое x, обращающее функцию в 0 называется корнем уравнения, а
способ нахождения этого x – решением f(x)=0.
Найти корни уравнения аналитически удается лишь в частных случаях,
поэтому разработаны приближенные методы.
Для решения уравнений вида f(x)=0 (нахождения нулей функции f(x))
предназначена функция fzero, которая находит приближенное значение корня уравнения по заданному начальному приближению. Функция fzero находит значение аргумента, при котором функция обращается в ноль:
fzero(fun, x0),
где
fun – может быть указатель на функцию, или имя файл-функции (m-файла),
заключенное в апострофы, или символьное выражение, определяющее функ-
циональную зависимость (формулу), заключенное в апострофы. Для последнего искомая переменная должна обязательно называться x.
х0 – начальное значение х, от которого начнётся процесс поиска решения; Если в задаче не задано начальное приближение, то сначала рекомендуется построить график этой функции на определенном отрезке. Затем, если корней несколько, то, задавая различные начальные значения, можно найти различные корни.
Вместо начального приближения вторым параметром можно задать отрезок, на котором лежит корень.
25
fzero(fun, [<нижн.гр. отр.> <верхн. гр. отр.>]),
Например, решим уравнение sin(x)-x2*cosx=0 на отрезке [-5 5].
Зададим анонимную функцию:
>> f=@ (x)(sin(x)-x.^2.*cos(x));
Построим график этой функции
>>fplot(f, [-5 5]) >>grid on
Из графика видно, что функция на этом отрезке имеет 4 корня: явно, при x=0,
а остальные корни надо уточнять при различных начальных значениях. Получим различные корни:
Найдем 1-й корень вблизи x=-5 >> x1=fzero(f,-5) x1
=
-4.7566
Найдем 2-й корень вблизи x=-2 >> x2=fzero(f,-2) x2 =
-1.8539
Найдем 3-й корень вблизи x=5
>> x3=fzero(f,5) x3 = 4.6665
Для получения более точных значений можно установить формат long. По умолчанию корни находятся с точностью eps (встроенная переменная, равная
2.2204e-016).
Функция fzero() вычисляет только корни, в которых функция меняет знак, а
не касается оси абсцисс.
В функции fzero первым параметром может быть встроенная функция,
например:
>> fzero('sin',[2 4]) ans =
3.1416
26
При работе с этой функцией можно не только найти корень, но и получить значение функции в точке корня уравнения (проверка).
>> [x, res]=fzero(f, [2 5]) x = 4.6665
res = -8.5487e-015
Значение корня находится приближенно, поэтому и значение функции отлично от 0.
При необходимости можно самостоятельно написать свою функции для решения уравнений, а затем использовать её как встроенную.
Нахождение минимума функции на заданном отрезке
Вычисление локального минимума функции одной переменной на заданном отрезке выполняет функция fminbnd. При использовании функции поиска минимума рекомендуется предварительно построить график исследуемой функции, чтобы точнее определить отрезки поиска минимума:
[x, y] = fminbnd(fun, a, b),
где fun – может быть указатель на функцию, или имя файл-функции (m-
файла), заключенное в апострофы, или символьное выражение, определяющее функциональную зависимость (формулу), заключенное в апострофы. a, b –
границы отрезка, на котором ищется минимум.
Результат – вектор, состоящий из двух значений: x – аргумент функции
(вычисленное значение), при котором достигается минимум; y – значение функции в точке минимума;
Например, найдем локальные минимумы для функции e-x*sin(3pi*x) на отрезке [0 2]
f=@ (x) (exp(-x).*sin(3*pi.*x));
>>fplot(f,[0 2])
>>grid on
27
Из графика видно, что на этом у этой функции 3 локальных минимума.
Можно последовательно найти локальные минимумы на 3-х отрезках.
1-ый локальный минимум
>> [x,y]=fminbnd(f, 0, 1) x = 0.4888
y = -0.6099
Можно его показать на графике plot(x,y,’*r’); 2-
ой локальный минимум
>> [x,y]=fminbnd(f, 1, 1.5) x = 1.1555
y = -0.3132
3-ий локальный минимум
>> [x,y]=fminbnd(f, 1.5, 2)
x=
1.8221
y=
-0.1608
Если хотим получить только значение аргумента, при котором функция будет иметь минимальное значение, то обращение к функции будет таким:
>> х=fminbnd(f,1,1.5) х =
28