Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Решение уравнений и их систем



 

Команда fzero вычисляет вещественный корень уравнения f(x)=0.

Команда fzero имеет следующие модификации:

fzero('f(x)', x0);

fzero('f(x)', [x1, x2])., kk

В выражениях функции приняты следующие обозначения:

'f(x)' – решаемое уравнение или имя файл-функции (в одинарных кавычках), вычисляющей левую часть уравнения;

x0 – начальное приближение (значение) искомого корня;

[x1, x2] – область изоляции корня.

Команда fzero имеет и другие модификации, о которых можно узнать с помощью команды doc fzero.

Пример:

Вычислить корни уравнения lnx - x+3 = 0 на отрезке [0; 5].

Решение:

Создадим файл-функцию myfun, вычисляющую значение функции lnx - x+3 при заданном значении аргумента x:

function y=myfun(x)

y=log(x)-x+3;

Перед нахождением корней построим график исследуемой функции командой fplot и нанесем сетку (рис. 6.1):

> > fplot ('myfun', [0, 5])

grid

 

 

Рис. 6.1

Пояснения на графике нанесены средствами MATLAB. На графике видно, что функция на этом отрезке имеет два корня, расположенные вблизи 0, 1 и 4, 5. Уточним значение второго корня при помощи fzero:

> > x2=fzero('myfun', 4.5)

x2 =

4.5052

Итак, приближенное значение второго корня равно х2 = 4, 5052. Вместо начального приближения 4, 5 вторым параметром fzero можно задать интервал [4; 5], на котором следует найти корень:

> > x2=fzero('myfun', [4, 5])

x2 =

4.5052

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

Получить приближенное значение корня и значение функции в этой точке позволяет вызов fzero с двумя выходными аргументами:

> > [x2, f]=fzero('myfun', [4, 5])

x2 =

4.5052

f =

-4.4409e-016

То, что значение функции близко к нулю, вообще говоря, не означает, что приближенное значение корня расположено достаточно близко к его точному значению.

Для того, чтобы увидеть больше значащих цифр корня х2, установим формат long и выведем х2 еще раз (точность вычислений не зависит от формата вывода результата):

> > format long

> > x2

x2 =

4.50524149579288

Найдем корень х1, расположенный около 0, 1:

> > format long

> > x1=fzero('myfun',.1)

x1 =

0.05246909745771

Возникает вопрос, сколько в ответе точных значащих цифр, т. е. с какой точностью найдено решение? Задание точности вычислений обсуждается ниже в разделах 6.4, 6.5.

Важной особенностью fzero является то, что она вычисляет только те корни, в которых функция меняет знак, а не касается оси абсцисс. Найти корень уравнения x2 = 0 при помощи fzero нельзя (получим сообщение об ошибке).

Многомерным аналогом fzero является команда fsolve, предназначенная для решения системы нелинейных уравнений F(X) = 0. Одна из модификаций fsolve имеет вид fsolve('file', x0). Здесь

file – имя файл-функции, вычисляющей вектор-столбец левых частей системы уравнений,

x0 – вектор-столбец начальных приближений.

Первый входной аргумент можно задать как указатель на файл-функцию @»file.

Пример:

Решить cистему нелинейных уравнений

 

 

Решение:

Возникают вопросы:

1) имеет ли система вещественные решения?;

2) если вещественные решения есть, то как определить их начальные приближения?

Т. к. система имеет второй порядок, то ответ на эти вопросы легко найти графическим способом. С помощью команды ezplot (см. разд. 7.16), cтроим совместно графики парабол x2+y=3 и y2+x=2 на рис. 6.2:

> > ezplot('x^2+y-3')

> > hold

Current plot held

> > ezplot('x+y^2-2')

> > grid

 

 

Рис. 6.2

Как видно на рис. 6.2 система имеет 4 вещественных решения (количество точек пересечения графиков), а одно из них имеет начальное приближение (-1; 2). Уточним его с помощью команды fsolve.

Создадим файл-функцию mfun2, вычисляющую вектор-столбец левых частей системы уравнений:

function F=mfun2(x)

F=[x(1)^2+x(2)-3; x(2)^2+x(1)-2];

Программа и результаты решения системы уравнений имеют вид:

> > x0=[-1; 2];

> > X=fsolve('mfun2', x0)

X =

-1.1117

1.7640

Получить одновременно приближенное решение и значения левых частей системы уравнений (функций x2+y - 3 и y2+x - 2) при подстановке в них этого решения позволяет вызов fsolve с двумя выходными аргументами:

> > [X, f]=fsolve(@mfun2, x0)

X =

-1.1117

1.7640

f =

1.0e-008 *

0.0445

0.2242

Таким образом, (x; y)=(-1, 1117; 1, 7640) – одно из приближенных вещественных решений системы. Изменяя стартовые значения (согласно рис. 6.2), можно найти и остальные вещественные решения.

Пример:

Решить cистему уравнений третьего порядка

 

 

Решение:

Для такой системы нельзя найти области начальных приближений графическим способом. Создадим файл-функцию mfun3, вычисляющую вектор-столбец левых частей системы уравнений:

function F=mfun3(x)

F=[x(1)+x(1)^2-2*x(2)*x(3)-.1; x(2)-x(2)^2+3*x(1)*x(3)+.2; x(3)+x(3)^2+2*x(1)*x(2)-.3];

Для произвольного стартового значения решения (-1; 0; 0) программа и результаты решения системы уравнений имеют вид:

> > x0=[-1; 0; 0];

> > [X, f]=fsolve('mfun3', x0)

X =

-1.0880

-0.1303

0.0161

f =

1.0e-007 *

0.3447

-0.2521

0.2590

Итак, (x; y; z)=(-1, 0880; -0, 1303; 0, 0161) – одно из приближенных вещественных решений системы. Изменяя стартовые значения, можно попытаться найти и другие вещественные решения этой системы.

Команда fsolve имеет и другие модификации, о которых можно узнать с помощью команды doc fsolve.

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

> > fsolve(@sin, [0: 3: 12])

ans =

0 3.1416 6.2832 9.4248 12.5664

дает совокупность решений уравнения sin(x) = 0, наиболее близких к соответственным стартовым точкам массива х0.

При решении используется оптимизационный алгоритм, осуществляющий минимизацию невязки F(X). Поэтому команда fsolve способна найти нули, в том числе и таких функций, как x2 и.

Существенный недостаток команд fzero и fsolve состоит в том, что они не определяют комплексных решений уравнений и систем уравнений. Команда solve пакета Symbolic дополняет эти команды. С ее помощью в разделе 7.13 будут найдены другие решения рассмотренных выше систем уравнений, в том числе и комплексные.


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 388; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.024 с.)
Главная | Случайная страница | Обратная связь