- •Основные понятия 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
- •Преобразование символьных выражений
- •Построение графиков символьных функций
- •Решение уравнений и систем
- •Решение дифференциальных уравнений и систем
- •Вычисление пределов
- •Определение производной
- •Вычисление интеграла
Символьные вычисления в ML
Мы познакомились с вычислительными возможностями ML. Теперь рассмотрим символьные вычисления и аналитические преобразования. Расчеты можно выполнять в символьном виде, т.е. расчеты, в которых используются символьные переменные, а в результате получают символьные (аналитические)
выражения. Это обеспечиваются пакетом Symbolic Math Toolbox, который входит в систему ML.
Кзадачам, которые решаются в символьном виде, относятся
Аналитическое преобразование выражений
Построение графиков, заданных символьными функциями
Аналитическое решение линейных и нелинейных уравнений и систем
Решение систем дифференциальных уравнений
Вычисление пределов, производных, интегралов
Разложение функций в ряд и др.
Основой аналитических вычислений являются символьные переменные.
Значения символьным переменным не присваивается. Значением символьных переменных являются их названия.
Символьные переменные предварительно необходимо объявить. Они
определяются с помощью команды
syms <имя1> <имя2>….
В символьном виде удобно задавать функции и выражения. Для этого аргументы функции надо объявить как символьные. Например, объявим две символьные переменные:
>> syms x y
Затем на основе этих переменных зададим значение переменной f
>> f=sin(2*x)
f = sin(2*x)
Результат символьного типа, это не число и не функция, а попросту говоря,
это формула.
32
Теперь эту функцию можно использовать, например в команде ezplot(f, [-2*pi 2*pi]) при построении графика функции.
Построим еще одно выражение
>> g=x+y
g = x+y
На основе одних выражений можно строить другие
>> f1=f / g
f1 = sin(2*x)/(x+y)
Для объявления символьных переменных и создания функций и выражений
(символьную функцию можно создать и без предварительного объявления) можно использовать функцию sym (), например,
>> d=sym('(a+b)/(2*a)')
d =
(a+b)/(2*a)
>> b=0.2
b =
0.2000
>> c=sym (b) % Аналитическое представление в виде рац.дроби
c =
1/5
>> s=sym ('3/5')+sym ('2/7')
s =
31 / 35 % Результат символьный
Существует возможность получить более естественный вид выражения (в
математическом виде) в данном случае в виде дроби:
>> pretty(s)
31
--
35
33
Для преобразования символьного числового выражения в числовой формат
(вещественный или целый) используется функция vpa () – её результат тоже
символьный, но с ним можно выполнять арифметические действия
>> s1= vpa (s)
s1 =
.88571428571428571428571428571429
>> s1= vpa (s, 6) % 2-й параметер – количество значащих цифр в
дробной части числа
s1 =
.885714
>> k=vpa(s1+2,4)
k = 2.886
Для преобразования символьного числового выражения к вещественному типу иногда используют функцию double, например
>> k=double(s)
Преобразование символьных выражений
В математике с алгебраическими выражениями допустимы некоторые операции, например, можно вычислить значение выражения, упростить его,
разложить на простые множители и т.д. Рассмотрим средства ML для решения подобных задач.
Функция subs () позволяет произвести подстановку одного выражения в другое. Она может вызываться с различным количеством аргументов. В общем случае она вызывается с тремя аргументами: именем символической функции,
переменной, которую надо заменить и выражением, которое надо подставить.
Рассмотрим различные варианты вызовов.
Можно вычислить значение функции в определённой точке, используя функции. subs:
% предварительно x была объявлена как символьная
>> syms x
34
% Значение функции f = sin (2*x) при х=1 (замена х на 1)
>>f = sin (2*x);
>>subs( f, x, 1)
ans =
0.9093
Либо такой вариант
>>syms x
>>x=1; f = sin (2*x); subs( f, x) ans =
0.9093
или
>>x=1;
>>subs (f)
ans = 0.9093
Вычислим значение функции f=sin(2*x) при х=pi
>> subs (f, pi) ans =
-2.4493e-016
>> syms x, y
1). Замена х на у в функции f=sin(2*x)
>> subs( f, y)
ans =
sin (2*y)
или так
>> subs( f, x, y)
ans =
sin(2*y)
2). Замена х на у+1 в ф-ции f=sin(2*x)
>> subs(f, y+1)
ans =
sin(2*y+2)
3). Подстановка х=1
>> subs (f,1)
35
ans = 0.9093
Если в выражение входит несколько переменных, то функцию subs()
используют в другом формате.
Значение ф-ции d = (a+b)/(2*a) при a=1, а – не объявлена как символьная
>> subs(d, 'a', 1)
ans =
1/2+1/2*b
Значение функции d = (a+b)/(2*a) при a=1, b=2
>> subs ( subs (d,'a',1), 'b', 2)
ans = 1.5000
Сложные алгебраические и тригонометрические выражения в ML могут быть приведены к эквивалентным путем упрощения (преобразованиям) с помощью специальных функций expand, simple, simplify, collect, factor .
Такое преобразование, состоящее в упрощении выражения, может выполняться несколькими способами:
1). Функция expand (expr) представляет выражение в виде элементарных функций (суммой степеней без приведения подобных слагаемых), т.е. раскрывает скобки в выражении
>>syms x y
>>q=(x^2-y^2)/(x-y)
q =
(x^2-y^2) / (x-y)
Вывод в математическом виде
>> pretty (q)
22
x- y
-------
36
x - y
>> expand (q)
ans =
1 / (x-y)*x^2-1/(x-y)*y^2
В математическом виде:
>> pretty (expand(q)) x2/x-y-y2/x-y
22
xy
----- - -----
x- y x - y
2). Упрощение выражений может производиться разными функциями,
которые основаны на разных подходах. Функция simple (expr) упрощает символьное выражение. Используется несколько алгоритмов упрощения (выводятся их промежуточные результаты) и в качестве результата выбирается выражение,
записанное меньшим количеством символов.
>> simple (q)
simplify:
x+y
radsimp:
x+y
combine(trig):
x+y
factor:
x+y
expand: 1/(x-y)*x^2-1/(x-y)*y^2 combine: (x^2-y^2)/(x-y) convert(exp): (x^2-y^2)/(x-y)
37
convert(sincos): (x^2-y^2)/(x-y) convert(tan):
(x^2-y^2)/(x-y) collect(x): (x^2-y^2)/(x-y) ans =
x+y
3). Функция simplify (expr) реализует более мощный алгоритм упрощения символьного выражения.
>> simplify(q)
ans =
x+y
4). Функция collect (expr, var) вычисляет коэффициенты полинома при степенях переменной var (раскрывает скобки и приводит подобные); если второй параметр отсутствует, то выбирается переменная х.
>> pol=y*(x+1)^2+(x-2)+(x+y)
pol = y*(x+1)^2+2*x-2+y
Преобразуем к виду, содержащему степени х (коэффициенты при х)
>> collect (pol)
ans =
y*x^2+( 2*y+2) * x+2*y - 2
запись в математическом виде:
>> pretty(collect(pol))
2
y x + (2 y + 2) x + 2 y - 2
Преобразуем к виду, содержащему степени у (коэффициенты при у )
>> collect (pol, y) ans =
((x+1) ^ 2+1) * y+2 * x - 2
38