Решение типовых задач алгебры и анализа презентация

Содержание

Слайд 2

Задачи линейной алгебры


В системе MATLAB для решения задачи линейной алгебры – нахождение корней

систем линейных уравнений – предусмотрены знаки операций / и \ .

Чтобы решить систему линейных уравнений:
которую обычно кратко записывают в виде:
Ax = B
где A – заданная квадратная матрица (размером NxN) коэффициентов при неизвестных , a B – заданный вектор-столбец длины N свободных членов , достаточно применить операцию \ и вычислить выражение x=A\B.
Операция \, называется левым делением матриц и, будучи примененная к матрицам A и B в виде A\B, эквивалентна вычислению выражения inv(A)*B. Здесь под inv(A) понимается вычисление матрицы, обратной к матрице A.
Для вычисления определителя квадратной матрицы А предназначена встроенная функция det(A).

Слайд 3

Задачи линейной алгебры


Слайд 4

Нахождение нулей функций


Функция fzero позволяет приближенно вычислить корень уравнения на некотором интервале или

ближайший к заданному начальному приближению. В простейшем варианте fzero вызывается с двумя входными и одним выходным аргументом x = fzero(func_name, x0), где func_name – имя файл-функции, вычисляющей левую часть уравнения, x0 — начальное приближение к корню, х – найденное приближенное значение корня. Решим, например, на отрезке [-5, 5] уравнение:

Перед нахождением корней полезно построить график функции, входящей в левую часть уравнения. Для получения графика можно прибегнуть к plot, но все равно понадобится запрограммировать функцию, поэтому имеет смысл воспользоваться fplot, которая к тому же позволяет получить более точный график по сравнению с plot. Текст требуемой файл-функции:
function y = myf(x)
y = sin(x) - x.^2.*cos(x);
Теперь построим график функции myf, используя fplot, и нанесем сетку.
>> fplot('myf', [-5 5])
>> grid on

Слайд 5

Нахождение нулей функций


Из графика функции, изображенного на рисунке (пояснения на графике нанесены средствами

MATLAB), видно, что на этом отрезке имеются четыре корня. Один корень равен нулю, в чем несложно убедиться, подставив х = 0 в базовое уравнение.

Слайд 6

Нахождение нулей функций


Уточним значение корня, расположенного вблизи х = - 5, при помощи

fzero:
>> xl = fzero('myf', -5)
xl =
-4.7566
Итак, приближенное значение корня равно -4.7566. При указании начального приближения к корню алгоритм fzero автоматически отделяет корень, т.е. вблизи заданного начального приближения находится отрезок, содержащий корень. Проверим ответ, вычислив значение функции myf в точке x1:
>> myf(xl)
ans =
2.6645e-015
Гарантированная точность приближенного значения определяется расстоянием до его истинного значения или (что фактически то же самое) количеством верных значащих цифр. Как задать точности вычислений мы рассмотрим позже, когда будем рассматривать вопрос управление ходом вычислений.

Слайд 7

Нахождение нулей функций


Вместо начального приближения вторым параметром fzero можно задать интервал, на котором

следует найти корень:
>> x2 = fzero('myf',[-3 -1])
x2 =
-1.8539
На границах указываемого интервала функция должна принимать значения разных знаков, иначе выведется сообщение об ошибке!
В качестве исследуемой функции может выступать и встроенная математическая функция, например:
>> x=fzero('cos', 1)
x =
1.5708
Формат вызова функции fzero, имеет вид:
x = fzero(func_name, x0)
Необходимо отметить, что имя функции func_name, задающее исходное выражения, для fzero (это также справедливо для большинства других функций MATLAB, таких как fplot, fminbnd и др.) можно задавать как:
• как имя m-файла (в апострофах и без расширения m) – 'MyFunc1', 'cos'
• как указатель на функцию – @MyFunc1, @cos
• или как формула с одним неизвестным x, которую необходимо заключить в апострофах – 'cos(x)+x^3-x', 'cos(x)'

Слайд 8

Вычисление всех корней полинома


Полином в MATLAB задается вектором его коэффициентов, например, для определения

полинома следует использовать команду:
>> p = [1, 0, 3.2, -5.2, 0, 0.5, 1, -3];

Число элементов вектора, т. е. число коэффициентов полинома, всегда на единицу больше его степени, нулевые коэффициенты должны содержаться в векторе.
Функция polyval предназначена для вычисления значения полинома от некоторого аргумента:
>> polyval(p,1)
ans =
-2.5000
Нахождение всех корней полиномов осуществляется при помощи функции roots, в качестве аргумента которой указывается вектор с коэффициентами полинома. Функция roots возвращает вектор корней полинома, в том числе и комплексных:
>> r = roots(p)
r =
-0.5668 + 2.0698i
-0.5668 - 2.0698i
-0.6305 + 0.5534i
-0.6305 - 0.5534i
1.2149
0.5898 + 0.6435i
0.5898 - 0.6435i

Слайд 9

Поиск минимума функций


Функции одной вещественной переменной.
Поиск локального минимума функции одной переменной на

некотором отрезке осуществляется при помощи fminbnd, использование которой схоже с fzero. Найдем локальные минимумы функции:
на отрезке [-1.5,1.5]. Требуется предварительно создать соответствующую файл-функцию, назвав ее, к примеру ftest, или ввести inline. Приведем пример использования функции inline:
>> ftest=inline('exp(x.^2)+sin(3*pi*x)');
Перед нахождением локальных минимумов нам необходимо исследовать поведение функции ftest на заданном отрезке. Для этого построим график исследуемой функции командой fplot.
>> fplot(ftest, [-1.5 1.5])

Слайд 10

Поиск минимума функций


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

аргументом fminbnd имя файл-функции или указатель на нее, а вторым и третьим – границы отрезка, на котором ищется локальный минимум.
>> x2 = fminbnd(ftest, -0.5, 0)
x2 =
-0.1629
Для одновременного вычисления значения функции в точке минимума следует вызвать fminbnd с двумя аргументами:
>> [x2,f] = fminbnd(ftest, -0.5, 0)
x2 =
-0.1629
f =
0.0275

Слайд 11

Поиск минимума функций


Функции нескольких переменных.
Минимизация функции нескольких переменных является более сложной задачей

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

Рассмотрим теперь минимизацию функций нескольких переменных на примере функции двух переменных:

Для анализа поведения функции, сначала построим трехмерный график (сетчатый, с функциональной заливкой), с контурными линиями, используя функцию surfc:
[X, Y] = meshgrid(0:0.02:2);
Z = sin(pi*X).*sin(pi*Y);
surfc(X,Y,Z)

Слайд 12

Поиск минимума функций


На получившемся графике видно расположение локальных минимумов и максимумов.

Слайд 13

Поиск минимума функций


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

аргументом файл-функции должен быть вектор, первый элемент которого соответствует переменной х, а второй – у. Текст требуемой файл-функции приведен ниже:
function f = ftest2(v)
x = v(1);
y = v(2);
f = sin(pi*x).*sin(pi*y);
Теперь для нахождения локального минимума вызовите fminsearch с двумя входными аргументами – именем файл-функции и начальным приближением и выходным аргументом –вектором с координатами искомой точки минимума:
>> M = fminsearch('ftest2', [1.4, 0.6])
M =
1.5000 0.5000
Для получения не только вектора с координатами точки минимума, но и значения функции следует вызвать fminsearch с двумя выходными аргументами:
>> [M,F] = fminsearch('ftest2', [1.4, 0.6])
M =
1.5000 0.5000
F =
-1.0000

Слайд 14

Управление ходом вычислением


Функции fzero, fminbnd и fminsearch допускают определение дополнительных параметров для управления

вычислительным процессом и контроля за ним. Формат вызова:
fzero(fname, x0, options)
fminbnd(fname, x1, x2, options)
fminsearch(fname, x0, options)
Параметры задаются в управляющей структуре, которую мы будем называть options, как в справочной системе MATLAB, хотя имя может быть произвольным. Перед вызовом вычислительных функций следует предварительно сформировать переменную options в соответствии с характером требуемого контроля, воспользовавшись функцией optimset. Переменная options на самом деле является структурой.
Приступим к формированию структуры options на примере минимизации функции одной переменной при помощи fminbnd. Для изменения точности следует сформировать структуру options, указав требуемую точность (например 10-9) по аргументу при помощи параметра TolX:
>> format long
>> options = optimset('TolX', 1.0e-09);
>> x2 = fminbnd(ftest, -0.5, 0, options)
x2 =
-0.16289942841268

Слайд 15

Управление ходом вычислением


В общем случае входные аргументы optimset задаются попарно:
options = optimset('Свойство1',

Знач1, 'Свойство2', Знач2, ...);
Некоторые возможные сочетания свойств и их значений приведены в следующей таблице:

Слайд 16

Вычисление определенных интегралов


Первым шагом является создание функции, вычисляющей подынтегральное выражение, ее текст:
function

f = fint(x)
f = exp(-x).*sin(x);
Теперь для вычисления интеграла вызовите quad, задав первым аргументом ссылку на функцию fint, а вторым и третьим – нижний и верхний пределы интегрирования. В качестве выходного аргумента можно указать имя переменной, в которую следует записать найденное значение:
>> format long
>> I = quad(@fint,-1,1)
I =
-0.66349146785310
По умолчанию функция quad вычисляет приближенное значение интеграла с точностью 10-6. Для изменения точности вычислений следует задать дополнительный четвертый аргумент:
>> I = quad(@fint,-1,1,1.0e-07)
I =
-0.66349366574399

Слайд 17

Вычисление двойных интегралов


В MATLAB определена функция dblquad для приближенного вычисления двойных интегралов. Как

и в случае вычисления определенных интегралов, следует написать файл-функцию для вычисления подынтегрального выражения.
Функция fint2 должна содержать два входных аргумента х и у, ее текст:
function f = fint2(x, y)
f = exp(x).*sin(y) + exp(-x).*cos(y);
Функция dblquad имеет пять входных аргументов, при ее вызове необходимо учесть, что первыми задаются пределы внутреннего интеграла по х, а вторыми – внешнего по у:
>> dblquad(@fint2, -pi, pi, 0, 1)
ans =
30.0537
Дополнительным шестым параметром можно задать точность вычисления интеграла.
>> format long
>> dblquad(@fint2, -pi, pi, 0, 1, 1.0e-012)
ans =
30.05371586580528

Слайд 18

АНАЛИТИЧЕСКИЕ ВЫЧИСЛЕНИЯ

Слайд 19

Символьные переменные и функции


Создание символьных переменных.
Допустим, что требуется выполнить сложение (символьное, а

не численное) алгебраического выражения x+y и выражения 3y.
Получить такой результат средствами ядра пакета MATLAB нельзя, так как там осуществляются только численные расчеты, а в сформулированной задаче вообще не заданы никакие численные значения для переменных x и y, входящих в исходное выражение.
Вот здесь на помощь и приходит Symbolic Math Toolbox.
x=sym('x'); y=sym('y');
x+y+3*y
ans =
x+4*y
Этот пакет осуществляет сложение над объектами нового типа – sym-объекты. Такие объекты получаются после вызова одноименной функции конструктора таких объектов. Над объектами типа sym производятся манипуляции в соответствии с правилами алгебры и математического анализа.

Слайд 20

Символьные переменные и функции


Другой способ создания переменных типа sym, который позволяет достаточно компактно

инициализировать большое количество переменных, это использование функции syms. Например, инициализацию переменных x и y из прошлого примера, можно записать в виде:
syms x, y
Можно создавать переменные типа sym, сразу инициализируя их алгебраические выражения, например:
Expr1 = sym('x+4*y');

Слайд 21

Символьные переменные и функции


Упрощение, преобразование и вычисление выражений.
Функция simplify (упрощать) осуществляет поэлементное

упрощение символьных выражений. Если упрощение невозможно, возвращается исходное выражение. Например:
>> simplify((x^2-2*x*y+y^2)/(x-y))
ans =
x-y
Дополнительные возможности обеспечивает функция simple(s). При обращении к функции simple в форме [R,HOW]=simple(s) промежуточные результаты не выводятся. Конечные результаты упрощений содержатся в векторе R, а в строковом векторе HOW указывается выполняемое преобразование.
syms x
[R1,HOW1]=simple(cos(x)^2-sin(x)^2)
[R2,HOW2]=simple(2*cos(x)^2-sin(x)^2)
возвращает следующие результаты:
R1 =
cos(2*x)
HOW1 =
combine
R2 =
3*cos(x)^2-1
HOW2 =
simplify

Слайд 22

Символьные переменные и функции


Функция expand (раскрывать) призвана раскрывать алгебраические и функциональные выражения.
>>

expand(sin(x+y))
ans =
sin(x)*cos(y)+cos(x)*sin(y)
Ясно, что так можно запрашивать подсказки по забытым формулам алгебры и тригонометрии. Можно просто перемножать многочлены.
>> expand((x+y)*(x-y)*(2*x-3*y))
ans =
2*x^3-3*x^2*y-2*y^2*x+3*y^3
Функция pretty(Expr).
С помощью функции factor (множитель, сомножитель) можно раскладывать многочлены на простые множители:
>> factor(x^4+2*x^3-3*x^2)
ans =
(x-1)*(x+3)*x^2

Слайд 23

Пределы, дифференцирование и интегрирование


Функция limit находит предел функции в некоторой точке, включая и

плюс или минус бесконечность. Первым входным аргументом limit является символьное выражение, вторым – переменная, а третьим – точка, в которой разыскивается предел.
limit(f,a) – возвращает предел в точке a символьного выражения f по независимой переменной.
limit(f) – возвращает предел в точке a=0 символьного выражения f по независимой переменной.
limit(f,x,a) – возвращает предел символьного выражения f в точке x=a.
limit(f,x,a,'right') – возвращает предел символьного выражения f в точке x=a+0 (справа).
limit(f,x,a,'left') – возвращает предел символьного выражения f в точке x=a-0 (слева).

Для получения ответа определите a и x, как символьные переменные, и используйте inf в качестве точки предела:
syms a x
limit((1 + 1/x)^(x*a), x, Inf)
ans =
exp(a)

Слайд 24

Пределы, дифференцирование и интегрирование


Операции символьного дифференцирования и символьного интегрирования. Первая из них выполняется

функцией diff.
diff(s) – возвращает символьное значение первой производной от символьного выражения или массива символьных выражений s по независимой переменной.
diff(s,n) – возвращает символьное значение n-й производной от символьного выражения или массива символьных выражений s по независимой переменной
diff(s,'v') или diff(s,sym('v')) – возвращает символьное значение первой производной от символьного выражения или массива символьных выражений s по переменной v.
diff(s,'v',n) или diff(s,n,'v') – возвращает символьное значение n-й производной от символьного выражения или массива символьных выражений s по переменной v.

Вот соответствующие примеры:
>> y=x^2-4*x-7;
>> diff(y,x)
ans =
2*x-4
Здесь выражение diff(y,x) означает «продифференцировать» y по x. Чтобы найти производную порядка n необходимо его указать дополнительным параметром:
>> syms x t
>> y2=diff(2*x+x*t^6,t,5)
y2 =
720*x*t

Слайд 25

Пределы, дифференцирование и интегрирование


Для вычисления определенных и неопределенных интегралов в символьном виде служит

функция int.
int(s) – возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений s по переменной. Если s – константа, то вычисляется интеграл по переменной 'x'.
int(s,a,b) – возвращает символьное значение определенного интеграла на отрезке интегрирования [a,b] от символьного выражения или массива символьных выражений s по переменной. Пределы интегрирования a, b могут быть как символьными, так и числовыми.
int(s,v) – возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений s по переменной v.
int(s,v,a,b) – возвращает символьное значение определенного интеграла от символьного выражения или массива символьных выражений s по переменной v с пределами интегрирования [a,b].

Слайд 26

Пределы, дифференцирование и интегрирование


А теперь пример на интегрирование:
y=1/sin(x);
int(y,x)
ans =
log(csc(x)-cot(x))


Примеры интегрирования по разным переменным:
>> syms x t y1 y2
>> y1=int(t*sin(x),x)
y1 =
-t*cos(x)
>> y2=int(t*sin(x),t)
y2 =
1/2*t^2*sin(x)
В первом случае пределы интегрирования являются символьными, а во втором числовыми.

И пример на вычисление определенного интеграла:
>> syms x y a b
>> y=cos(x);
>> int(y, x, a, b)
ans =
sin(b)-sin(a)
>> int(y, x, -pi/2, pi/2)
ans =
2

Слайд 27

Вычисление сумм рядов


где i – переменная суммирования, служит функция symsum. Параметр b может

быть конечным или бесконечном (inf).
symsum(s) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования, найденной автоматически.
symsum(s,a,b) – возвращает символьное значение суммы ряда по переменной суммирования, найденной автоматически, при изменении этой переменной от а до b.
symsum(s,v) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования v.
symsum(s,v,a,b) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования v при изменении этой переменной от а до b.
Пример:
>> syms k n
>> y1=simple(symsum(k))
>> y2=simple(symsum(k,0,n-1))
>> y3=simple(symsum(k,0,n))
>> y4=simple(symsum(k^2,0,n))

возвращает следующие результаты:
y1 =
1/2*k*(k-1)
y2 =
1/2*n*(n-1)
y3 =
1/2*n*(n+1)
y4 =
1/6*n*(n+1)*(2*n+1)

Слайд 28

Разложение в ряд Тейлора


При a =0 этот ряд называется рядом Маклорена. Для получения

разложений аналитических функций в ряд Тейлора служит функция taylor.
taylor(f) – возвращает 6 членов ряда Маклорена.
taylor(f,n) – возвращает члены ряда Маклорена до (n-1)-го порядка.
taylor(f,a) – возвращает 6 членов ряда Тейлора в окрестности точки a.
taylor(f,a,n) – возвращает члены ряда Тейлора до (n-1)-го порядка в окрестности точки a.
Пример использования:
y=sin(x);
taylor(y,0,6)
ans =
x-1/6*x^3+1/120*x^5
Имя файла: Решение-типовых-задач-алгебры-и-анализа.pptx
Количество просмотров: 6
Количество скачиваний: 0