Поиск минимума функции
Решение типовых задач алгебры и анализа Решение систем линейных уравнений в системе MATLAB для решения систем линейных уравнений предусмотрены знаки операций / и \. Чтобы решить систему линейных уравнений вида A⋅ y = B , где A – заданная квадратная матрица размером NxN, a B – заданный вектор – столбец длины N, достаточно применить операцию \ и вычислить выражение A\ B . Операция \ называется левым делением матриц и, будучи примененная к матрицам A и B в виде A\ B , примерно эквивалентна вычислению выражения inv(A)*B. Здесь под inv(A) понимается вычисление матрицы, обратной к матрице A . Операцию / называют правым делением матрицы. Выражение A/ B примерно соответствует вычислению выражения B*inv(A). Значит, эта операция позволяет решать системы линейных уравнений вида y⋅A=B.
Нахождение нулей функций Решение уравнения F(x)=0, или нахождение нулей функции, осуществляется с помощью функции: fzero(name, x0) . В качестве первого аргумента ей передается имя функции, задающей исходное уравнение, вторым аргументом служит начальное приближение к корню. Возвращаемым значением функции fzero является нуль функции name в окрестности точки x0 . Определим, в качестве примера, нули функции cos(x) на отрезке от 0 до pi. В качестве начального приближения примем x0=1. » x=fzero('cos', 1) x = 1.5708 Если требуется найти корень функции, отличной от стандартной (встроенной в систему MATLAB) и тем самым не имеющей в рамках системы MATLAB фиксированного имени, то нужно приписать некоторое имя выражению, вычисляющему функцию. Пусть, например, требуется найти корни уравнения cos(x) = x , что эквивалентно нахождению нулей функции, вычисляемой по формуле y = cos(x)-x , не имеющей в рамках системы MATLAB фиксированного имени. В этом случае нужно в любом простейшем текстовом редакторе (можно в окне редактора-отладчика MATLAB) набрать две строки следующего кода: function y=MyFunction1(x) y=cos(x)-x; и запомнить их в файле MyFunction1.m, который нужно разместить в текущем каталоге системы MATLAB (узнать его можно командой cd). После этого можно воспользоваться функцией fzero: » x=fzero('MyFunction1',pi/2) x = 0.7391 Если найдено абсолютно точное значение корня, то значение функции в этой точке равно нулю. Таким образом, величина функции в приближенно найденном нуле косвенно характеризует погрешность результата. Чтобы управляв погрешностью, нужно осуществлять вызов функции fzero с тремя аргументами: fzero( name, x0, tol ), где параметр tol задает требуемую величину погрешности (ошибки). Повторив предыдущие вычисления, потребовав большей точности расчетов (то есть меньшей погрешности): »format long х = fzero('MyFunction1',pi/2, le-8) x =0.73908513263090 MyFunction1(x) ans = 9.778322596076805e-010, откуда видно, что действительно достигнута большая точность нахождения нуля функции. Еще раз подчеркнем, что функция fzero находит нули только вещественно-значных функций одной вещественной переменной. Однако часто бывает необходимо найти комплексные корни вещественнозначных функций, особенно в случае многочленов. Для этой цели в системе MATLAB существует специальная функция roots, которой в качестве аргумента передается массив коэффициентов многочлена. Например, для многочлена х4 – Зх3 + Зх2 - Зх + 2, имеющего два вещественных (1 и 2) и два комплексных корня (i и -i), нужно сначала сформировать массив его коэффициентов (расположив по порядку убывания степени х): Coef = [ 1, -3, 3, -3, 2 ], после чего вызвать функцию roots: г = roots( Coef ) г = 2.00000000000000 0.00000000000000 +1.OОOOOOOOOOOOOOi 0.00000000000000 -1.OOOOOOOOOOOOOOi 1.00000000000000 В задаче о нахождении нулей функции сложным моментом является нахождение начального приближения к нулю функции, а также априорная оценка их количества. Поэтому важно параллельно с применением функций типа roots или fzero визуализировать поведение искомых функций на том или ином отрезке значений аргумента (построить график функции). Поиск минимума функции В системе MATLAB имеются специальные функции для поиска минимума заданных функций. При этом возможен поиск минимума как для функции одной вещественной переменной, так и для функций многих переменных. Для функций одной переменной их минимумы разыскивает функция fmin: fmin( name, x0, x1 ). Здесь name представляет имя функции, у которой находятся минимумы, а x0 и x1 задают отрезок поиска. Для поиска минимума функции нескольких переменных применяется функция fmins: xmin = fmins( name, x0 ). Здесь name является именем функции нескольких переменных, для которой ищется минимум, а x0 - это вектор ее аргументов, с которого начинается поиск. Для иллюстративного примера создадим простую функцию двух переменных имеющую минимумом точку (0,0). function у = MyFunc2 ( х ) у = x(1)^2+ x(2)^2; Этот текст надо записать в файл MyFunc2.m в текущий каталог системы MATLAB. После этого можно вызвать функцию fmins: xmin = fmins( 'MyFunc2', [1,1] ); которая приближенно находит вектор xmin координат точки минимума: xmin(1) ans =-2.102352926236483е-005 xmin(2) ans =2.548456493279544е-005 Обе найденные координаты близки к своим точным значениям, равным нулю. Для функций нескольких переменных еще важнее, чем для ранее рассмотренных функций одной вещественной переменной, постараться априорно оценить количество и приблизительное нахождение локальных минимумов, и тут могут существенно помочь трехмерные графики.
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему стероиды повышают давление?: Основных причин три... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1589)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |