Теорема Больцано-Коши о промежуточных значениях непрерывной функции утверждает, что если непрерывная функция принимает два значения, то она принимает и любое значение между ними.
Следствие (теорема о нуле непрерывной функции): если непрерывная функция принимает на концах отрезка положительное и отрицательное значение, то существует точка, в которой она равна нулю.
Функция fzero позволяет приближенно вычислить корень уравнения на некотором интервале или ближайший к заданному начальному приближению.
В простейшем варианте fzero вызывается с двумя входными и одним выходным аргументом
х = fzero ('func_name’, х0),
где func_name – ИМЯ файл-функции, вычисляющей левую часть уравнения,
х0 – начальное приближение к корню,
х – найденное приближенное значение корня.
Пример 1. Нахождение корней уравнения sin(x)-x*cos(x)= 0 на отрезке [-5, 5]
Перед нахождением корней нужно построить график функции, входящей в левую часть уравнения.
Задание 1. Создать файл-функцию myf(x), вычисляющую левую часть уравнения из примера 1. Построить график функции, входящей в левую часть уравнения, sin(x)-x*cos(x)= 0 на отрезке [-5, 5].
|
|
Уточните значение корня, расположенного вблизи х = - 5, при помощи fzero:
x1=fzero('myf',-5)
x1 =
-4.4934
Итак, приближенное значение корня равно -4.7566. При указании начального приближения к корню алгоритм fzero автоматически отделяет корень, т. е. вблизи заданного начального приближения находится отрезок, содержащий корень. В этом случае fzero может использовать больший интервал определения функции, чем исходный отрезок [-5, 5].
Проверьте ответ, вычислив значение функции myf в точке xl
myf(x1)
ans =
1.1102e-016
Проверьте работу fzero, вычислив корень myf, расположенный вблизи нуля, там, где точное значение корня равно нулю.
x4=fzero('myf',0.1)
x4 =
-7.4135e-009
Задание 2. Найти корень х2, расположенный около точки 5.
Вместо начального приближения вторым параметром fzero можно задать интервал, на котором следует найти корень:
x2=fzero('myf',[-5 -1])
x2 =
-4.4934
На границах указываемого интервала функция должна принимать значения разных знаков (см. теорему о нуле непрерывной функции), иначе выведется сообщение об ошибке!
В качестве исследуемой функции может выступать и встроенная математическая функция, например
fzero('sin', [2 4])
ans =
3.1416
Допустимы другие способы вызова fzero. Во-первых, функцию с исследуемой математической функцией можно задать при помощи указателя на нее:
>> x2=fzero(@myf,[-5 -1])
x2 =
-4.4934
Во-вторых, воспользовавшись функцией inline:
>> fun = inline('sin(x) - x.*cos(x)')
fun =
Inline function:
fun(x) = sin(x) - x.*cos(x)
>> xl = fzero(fun, -5)
xl =
-4.4934
В-третьих, создав анонимную функцию:
|
|
>> fun = @(x) sin(x)-x.*cos(x)
fun =
@(x)sin(x)-x.*cos(x)
>> xl = fzero(fun,-5)
xl =
-4.4934
Обращение к fzero с двумя выходными аргументами позволяет не только приближенно найти корень, но и получить значение функции в найденной точке.
>> [x2, f] = fzero(@myf, -2)
x2 =
6.2926e-009
f =
Важной особенностью fzero является то, что она вычисляет только те корни, в которых функция меняет знак, а не касается оси абсцисс. Найти корень уравнения х^2 = 0 при помощи fzero не удается:
>> fun=inline('х.^2');
>> x = fzero(fun, -0.1)
??? Error using ==> fzero at 301
FZERO cannot continue because user supplied inline object ==> fun
failed with the error below.
Error: The expression to the left of the equals sign is not a valid target for an assignment.
В данном примере fzero пыталась найти промежуток, на границах которого значения функции myf имеют различные знаки, что гарантировало бы существование корня на этом промежутке. Такой промежуток, естественно, определить не удалось, и fzero вывела сообщение об ошибке в командное окно.
Задание 3. Решите по два нелинейных алгебраических уравнения из табл. 1 с помощью функции fzero.
Порядок выполнения задания 1.
Для каждого из уравнений выполните е шаги 1-2.
1. Приравняйте уравнение к нулю, если это необходимо.
2. Постройте график левый части приравненного к нулю уравнения.
3. Выберете интервал локализации любого корня для первого уравнения. В контексте поиска корня нелинейного алгебраического уравнения интервал локализации – отрезок, на концах которого функция имеет разный знак. Кроме того, на этом отрезке функция должна быть монотонна. Данные условия, вытекающие из теоремы о нуле непрерывной функции, являются необходимыми и достаточными для существования единственного корня на отрезке.
4. Создайте inline функцию для левой части первого уравнения.
5. Вызовите функцию fzero, входными аргументами которой будут inline функция и интервал локализации.
6. Создайте анонимную функцию для левой части второго уравнения.
7. Вызовите функцию fzero, входными аргументами которой будут анонимная функция и произвольная точка в окрестности корня.
Табл. 1. К заданию 4.
№ | ||
3x4+4x3-12x2-5=0 | ln(x)+(x+1)3=0 | |
2x3-9x2-60x+1=0 | x×2x=1 | |
x4-x-1=0 | x+cos(x)=1 | |
2x4 - x2-10=0 | x+lg(1+x)=1.5 | |
3x4+8x3+6x2-10=0 | lg(2+x)+2x=3 | |
x4 -18x2+5x-8=0 | 2x+5x-3=0 | |
x4+4x3-12x2+1=0 | 5x+3x =0 | |
x4 - x3-2x2+3x-3=0 | 3ex=5x+2 | |
3x4+4x3-12x2+1=0 | 5x=6x+3 | |
3x4-8x3-18x2+2=0 | 2ex+5x-6=0 | |
2x4-8x3+8x2-1=0 | 2arctg(x)-x+3=0 | |
2x4+8x3+8x2-1=0 | (x-3) × cos(x)=1 | |
x4-4x3-8x2+1=0 | xx= 20-9x | |
2x4-9x3-60x2+1=0 | x × lg(x)=1 | |
x5 +x2-5=0 | tg3x=x-1 | |
3x4+4x3-12x2-7=0 | 5x =1+e-x | |
3x4+8x3+6x2-11=0 | 5x =3-ex | |
x4 -18x3-10=0 | arctg(x2+1/x)=x | |
3x4-8x3-18x2+2=0 | tg(0.55x+0.1)=x2 | |
x4 -18x -10=0 | 5x-6x =7 | |
x4 +18x -10=0 | 5x-6x =3 | |
x4 +18x3-6x2+x-10=0 | 5x =1+e-2x | |
x5 +12x3-6x2+x-10=0 | 7x-6x =2 | |
3x5-8x3-18x2+2=0 | 5x =2+e-2x | |
x3 -18x -10=0 | x×2x=3 |