Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект.pdf
Скачиваний:
51
Добавлен:
23.07.2020
Размер:
2.68 Mб
Скачать

Решение уравнений

Часто приходится решать уравнения вида f(x)=0 на интервале a<x<b, где функция f(x) определена и непрерывна на заданном интервале.

Если функция представляет собой многочлен, то уравнение называется алгебраическим, если же в функцию входят тригонометрические,

показательные, логарифмические функции, то оно называется

трансцендентным.

Всякое x, обращающее функцию в 0 называется корнем уравнения, а

способ нахождения этого x – решением f(x)=0.

Найти корни уравнения аналитически удается лишь в частных случаях,

поэтому разработаны приближенные методы.

Для решения уравнений вида f(x)=0 (нахождения нулей функции f(x))

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

fzero(fun, x0),

где

fun – может быть указатель на функцию, или имя файл-функции (m-файла),

заключенное в апострофы, или символьное выражение, определяющее функ-

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

х0 – начальное значение х, от которого начнётся процесс поиска решения; Если в задаче не задано начальное приближение, то сначала рекомендуется построить график этой функции на определенном отрезке. Затем, если корней несколько, то, задавая различные начальные значения, можно найти различные корни.

Вместо начального приближения вторым параметром можно задать отрезок, на котором лежит корень.

25

fzero(fun, [<нижн.гр. отр.> <верхн. гр. отр.>]),

Например, решим уравнение sin(x)-x2*cosx=0 на отрезке [-5 5].

Зададим анонимную функцию:

>> f=@ (x)(sin(x)-x.^2.*cos(x));

Построим график этой функции

>>fplot(f, [-5 5]) >>grid on

Из графика видно, что функция на этом отрезке имеет 4 корня: явно, при x=0,

а остальные корни надо уточнять при различных начальных значениях. Получим различные корни:

Найдем 1-й корень вблизи x=-5 >> x1=fzero(f,-5) x1

=

-4.7566

Найдем 2-й корень вблизи x=-2 >> x2=fzero(f,-2) x2 =

-1.8539

Найдем 3-й корень вблизи x=5

>> x3=fzero(f,5) x3 = 4.6665

Для получения более точных значений можно установить формат long. По умолчанию корни находятся с точностью eps (встроенная переменная, равная

2.2204e-016).

Функция fzero() вычисляет только корни, в которых функция меняет знак, а

не касается оси абсцисс.

В функции fzero первым параметром может быть встроенная функция,

например:

>> fzero('sin',[2 4]) ans =

3.1416

26

При работе с этой функцией можно не только найти корень, но и получить значение функции в точке корня уравнения (проверка).

>> [x, res]=fzero(f, [2 5]) x = 4.6665

res = -8.5487e-015

Значение корня находится приближенно, поэтому и значение функции отлично от 0.

При необходимости можно самостоятельно написать свою функции для решения уравнений, а затем использовать её как встроенную.

Нахождение минимума функции на заданном отрезке

Вычисление локального минимума функции одной переменной на заданном отрезке выполняет функция fminbnd. При использовании функции поиска минимума рекомендуется предварительно построить график исследуемой функции, чтобы точнее определить отрезки поиска минимума:

[x, y] = fminbnd(fun, a, b),

где fun – может быть указатель на функцию, или имя файл-функции (m-

файла), заключенное в апострофы, или символьное выражение, определяющее функциональную зависимость (формулу), заключенное в апострофы. a, b

границы отрезка, на котором ищется минимум.

Результат – вектор, состоящий из двух значений: x – аргумент функции

(вычисленное значение), при котором достигается минимум; y – значение функции в точке минимума;

Например, найдем локальные минимумы для функции e-x*sin(3pi*x) на отрезке [0 2]

f=@ (x) (exp(-x).*sin(3*pi.*x));

>>fplot(f,[0 2])

>>grid on

27

Из графика видно, что на этом у этой функции 3 локальных минимума.

Можно последовательно найти локальные минимумы на 3-х отрезках.

1-ый локальный минимум

>> [x,y]=fminbnd(f, 0, 1) x = 0.4888

y = -0.6099

Можно его показать на графике plot(x,y,’*r’); 2-

ой локальный минимум

>> [x,y]=fminbnd(f, 1, 1.5) x = 1.1555

y = -0.3132

3-ий локальный минимум

>> [x,y]=fminbnd(f, 1.5, 2)

x=

1.8221

y=

-0.1608

Если хотим получить только значение аргумента, при котором функция будет иметь минимальное значение, то обращение к функции будет таким:

>> х=fminbnd(f,1,1.5) х =

28