русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 3298; Нарушение авторских прав


 

Команда 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 будут найдены другие решения рассмотренных выше систем уравнений, в том числе и комплексные.



<== предыдущая лекция | следующая лекция ==>
 | Минимизация функции одной переменной


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.