Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Технология решения нелинейных уравнений в среде MatLab




 

В математическом пакете MatLab имеются как программные средства для реализации алгоритмов уточнения корней уравнений, приведенных в п.6.2.2, так и встроенные функции для численного и аналитического вычисления корней уравнений.

Рассмотрим программные средства MatLabна примерах.

Пример 6.2.4-10. Локализовать корни уравнения f(x)=x3–cos(x)+1 средствами пакета MatLab.

Пример 6.2.4-10
>> f = inline('x.^3 - cos(x) + 1'); >> x = linspace(-10,10,100); >> figure('Name', '[-10,10]'); >> axes('NextPlot', 'Add'); >> grid on >> plot(x, f(x)); >> figure('Name', '[-1,1]'); >> axes('NextPlot', 'Add'); >> grid on >> x = linspace(-1,1,100); >> plot(x, f(x)); >> figure('Name', '[-0.6,-0.4]'); >> axes('NextPlot', 'Add'); >> grid on >> x = linspace(-0.6,-0.4,100); >> plot(x, f(x)); >> figure('Name', '[-0.2,0.2]'); >> axes('NextPlot', 'Add'); >> grid on >> x = linspace(-0.2,0.2,100); >> plot(x, f(x)); >>

Решение алгебраических и трансцендентных уравнений в среде MatLAB проще реализовать с помощью встроенных функций: solve(), fzero(), roors().

Для нахождения вещественных корней уравнений вида f(х)=0 используется функция fzero(). Алго­ритм, реализованный этой функцией, представляет собой комбинацию хорошо известного метода дихотомии (деления пополам), метода секущих и метода обрат­ной квадратичной интерполяции. В простейшем варианте обращения кроме указателя на функцию, корень которой ищется, задается окрестность х0, с которой начинается поиск: х = fzero(f, x0).

Аргументf может быть задан одним из способов:

· как формула с неизвестным х, заключенная в апострофы;

· как имя m-файла (в апострофах и без расширения m);

· как указатель на функцию (например, @f_name);

· как указатель на анонимную функцию (например, f_handie).

 

Необходимо обратить внимание на то, что формула, заключенная в апострофы, в качестве независимой переменной мо­жет содержать только х. Использование независимой переменной с другим именем вызовет сообщение об ошибке.

Аргумент х0 может быть задан одним из двух способов:

· как вектор [a;b], представляющий интервал (а<b), на концах которого функция f() меняет знак, что гарантирует нахождение, по крайней мере, одного корня на этом интервале;

· как скалярное значение, в окрестности которого предполагается нахождение корня. В этом случае функцияfzero() сама пытается найти отрезок с центром в заданной точке х0, на концах которого функцияf () меняет знак.

 

Чтобы облегчить работу по выбору начального приближения, разумнее всего построить график функции y=f (x).

Пример 6.2.4-11. Построить график функции f(x)= x∙e-x + sin(x) для локализации корня.

Пример 6.2.4-11
x = 0 : 0.1 : 2* pi; y = x.*exp(-x)+sin(x); plot(x, y) grid on title('y=x*exp(-x)+sin(x) ')

 

Из графика видно, что один из корней находится на интервале [3;4]. И этой информацией естественно воспользоваться при обращении к функ­ции fzero( ):

 

Пример 6.2.4-11
>> x=fzero('x.*exp(-x)+sin(x)',[3,4]) x= 3.2665 >>

 

Вместо явного задания формулы для функции f мы могли бы объявить соответствующую функцию, запомнив ее в виде автономного m-файла или включив ее в качестве подфункции в файл нашей программы.

 

Пример 6.2.4-11
function fzerol x=fzero(@f1, [3;4]) function y=f1(z) y= z*exp(-z)+sin(z);

 

Если мы хотим получить не только значение корня, но и узнать значение функции в найденной точке, то к функции fzero( ) можно обратиться с двумя выходными параметрами.

В ряде задач такая точность может оказаться излишней. MatLab предо­ставляет пользователю возможность формировать различные условия прекращения итерационного процесса - по точности вычисления координаты х, по модулю значения функции f(), по количеству обращений к функции f( ) и т. д.

В некоторых случаях применение функции fzero() может дать парадоксаль­ные результаты.

Пример 6.2.4-12. Найти решения tg(x) = 0 на интервале [1;2].

Пример 6.2.4-12
>> [x,f]=fzero('tan(x) ', [1,2]) х = 1.5708 f = -1.2093e+015 >>

Якобы «корень», соответствующий приближенному значению /2, на самом деле является точкой разрыва, при переходе через которую функция меняет знак. Выведенное значение функции в найденной точке убеждает нас в том, что найден не корень.

 

Функцияfzero() может возвратить еще два выходных параметра.

 

Пример 6.2.4-12
>> [x,f,e_flag,inform] = fzero{f,x0) >>

 

Положительное значение e_fiag (обычно, это 1) означает, что удалось най­ти интервал, на концах которого функция f( ) меняет знак (пример с tg(x) не должен притупить вашу бдительность). Если такой интервал не обнару­жен, то e_fiag=-1. Структура inform содержит три поля с именами iterations, funcCount и algorithm. В первом из них находится количество итераций, выполненных при поиске корня, во втором – количество обра­щений к функции f( ), в третьем – наименование алгоритма, использован­ного для нахождения корня.


Поделиться:

Дата добавления: 2015-08-05; просмотров: 68; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты