Similar presentations:
Решение типовых задач алгебры и анализа
1.
12.
Задачи линейной алгебрыВ системе MATLAB для решения задачи линейной алгебры –
нахождение корней систем линейных уравнений – предусмотрены знаки
операций / и \ .
Чтобы решить систему линейных уравнений:
которую обычно кратко записывают в виде:
Ax = B
где A – заданная квадратная матрица (размером NxN) коэффициентов
при неизвестных , a B – заданный вектор-столбец длины N свободных
членов , достаточно применить операцию \ и вычислить выражение
x=A\B.
Операция \, называется левым делением матриц и, будучи
примененная к матрицам A и B в виде A\B, эквивалентна вычислению
выражения inv(A)*B. Здесь под inv(A) понимается вычисление
матрицы, обратной к матрице A.
Для вычисления определителя квадратной матрицы А
предназначена встроенная функция det(A).
2
3.
Задачи линейной алгебры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
4
5.
Нахождение нулей функцийИз графика функции, изображенного на рисунке (пояснения на графике
нанесены средствами MATLAB), видно, что на этом отрезке имеются четыре
корня. Один корень равен нулю, в чем несложно убедиться, подставив х = 0 в
базовое уравнение.
5
6.
Нахождение нулей функцийУточним значение корня, расположенного вблизи х = - 5, при помощи fzero:
>> xl = fzero('myf', -5)
xl =
-4.7566
Итак, приближенное значение корня равно -4.7566. При указании
начального приближения к корню алгоритм fzero автоматически отделяет корень,
т.е. вблизи заданного начального приближения находится отрезок, содержащий
корень. Проверим ответ, вычислив значение функции myf в точке x1:
>> myf(xl)
ans =
2.6645e-015
Гарантированная точность приближенного значения определяется
расстоянием до его истинного значения или (что фактически то же самое)
количеством верных значащих цифр. Как задать точности вычислений мы
рассмотрим позже, когда будем рассматривать вопрос управление ходом
вычислений.
6
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)'
7
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
8
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])
9
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
10
11.
Поиск минимума функцийФункции нескольких переменных.
Минимизация функции нескольких переменных является более сложной задачей по
сравнению с минимизацией функции одной переменной, однако комбинированный
адаптивный алгоритм функции fminsearch позволяет во многих случаях успешно
решить эту задачу. Функция fminsearch требует указания начального приближения
для искомой точки минимума, которое в случае функции одной переменной должно
быть числом, а для функции нескольких переменных – вектором.
Рассмотрим теперь минимизацию функций нескольких переменных на примере
функции двух переменных:
Для анализа поведения функции, сначала построим трехмерный график (сетчатый,
с функциональной заливкой), с контурными линиями, используя функцию surfc:
[X, Y] = meshgrid(0:0.02:2);
Z = sin(pi*X).*sin(pi*Y);
surfc(X,Y,Z)
11
12.
Поиск минимума функцийНа получившемся
максимумов.
графике
видно
расположение
локальных
минимумов
и
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
13
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
14
15.
Управление ходом вычислениемВ общем случае входные аргументы optimset задаются попарно:
options = optimset('Свойство1', Знач1, 'Свойство2', Знач2, ...);
Некоторые возможные сочетания свойств и их значений приведены в следующей
таблице:
15
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
16
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
17
18.
1819.
Символьные переменные и функцииСоздание символьных переменных.
Допустим, что требуется выполнить сложение (символьное, а не
численное) алгебраического выражения 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
производятся манипуляции в соответствии с правилами алгебры и
математического анализа.
19
20.
Символьные переменные и функцииДругой способ создания переменных типа sym, который позволяет
достаточно компактно инициализировать большое количество переменных,
это использование функции syms. Например, инициализацию переменных x и y
из прошлого примера, можно записать в виде:
syms x, y
Можно создавать переменные типа sym, сразу инициализируя их
алгебраические выражения, например:
Expr1 = sym('x+4*y');
20
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
21
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
22
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)
23
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 =
24
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].
25
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 =
>> syms x y a b
-t*cos(x)
>> y=cos(x);
>> y2=int(t*sin(x),t)
>> int(y, x, a, b)
y2 =
ans =
1/2*t^2*sin(x)
sin(b)-sin(a)
>> int(y, x, -pi/2, pi/2)
ans =
2
В первом случае пределы интегрирования являются символьными, а во втором
числовыми.
26
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)
27
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
28
29.
Графическое представление функцийВизуализация символьной функции одной переменной осуществляется при помощи
ezplot. Самый простой вариант использования ezplot состоит в указании символьной
функции в качестве единственного входного аргумента, при этом в графическое окно
выводится график функции на отрезке [-2 π, 2π].
>> f = sym('x^2*sin(x)');
>> ezplot(f);
Автоматически создается соответствующий заголовок. По умолчанию в качестве
отрезка, на котором строится график, принимается промежуток пересечения
области определения функции и интервала [-2 π, 2π]. Вторым аргументом может
быть задан вектор с границами отрезка, на котором требуется построить график
функции ezplot(f, [-3 2]).
Symbolic Math Toolbox предоставляет
пользователю целый набор средств для
визуализации
символьных
функций:
ezmesh, ezmeshc, ezplot, ezplot3, ezpolar,
ezsurf,
ezsurfc.
Функция
ezsurf
отображает
график
символьной
функции только для допустимых
значений
аргументов,
остальные
значения
отбрасываются,
что
позволяет
исследовать
область
определения функции двух переменных.
29