Функция касается оси абсцисс. Численным методом найти ноль функции.





Здравствуйте.

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

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

Как решить подобную задачу?

  • Учебное заведение: МТУ МИРЭА

Всего: 8 комментариев.
Добавить комментарий

Александр Емелин    05.10.2016 в 10:33
Хотелось бы уточнить:
Рассмотрим, например, параболу f(x)=x^2+1, которая НЕ касается оси OX. На отрезке от -1 до 1 производная f'(x)=2x меняет знак. Вы имеете ввиду, нужно аналитически выяснить есть ли у функции ноль на этом отрезке?
Вычисляем значения функции на краях отрезка:
f(-1)=2, f(1)=2 - оба значения положительны, поэтому вопрос о нуле функции остаётся открытым.
В случае, если функция сначала возрастает, затем убывает (производная меняла знак с + на -) - можно сразу сказать, что нуля нет (т.к. f(-1)>0, f(1)>0). Но это не наш случай.

Александр Емелин    05.10.2016 в 10:34
Вычисляем значение функции в точке минимума:
f(0)=1 - и поскольку это значение тоже >0, то нулей функции нет.
Если бы это значение равнялось нулю, то ноль был бы найден;
если бы оно было <0, то обнаружилось бы, что здесь два нуля (при условии непрерывности функции конечно).

Проведите аналогичное рассуждение для зеркального случая, когда на отрезке от a до b:
f(а)<0, f(b)<0
и производная тоже меняет знак на нём.

С формализацией алгоритма трудностей вроде как возникнуть не должно.

Дмитрий    09.10.2016 в 15:29
Здравствуйте, Александр.
В данном случае речь идет о численном методе для языка C++. Возьмем параболу f(x)=x^2+1. Точка, в которой функция меняет знак f(0)=1. Возьмем окрестность точки [-r+0;0+r], пусть r=0.1. Разобьем окрестность на h шагов. Для каждого шага вычислим значение функции. Найдем минимальное. Скорее всего оно будет похоже на 1. 00986... ну что-то такое. Тут мы четко понимаем, что функция ось абсцисс не пересекает.

Возьмем параболу f(x)=x^2+10^(-10). Проводя аналогичные действия получим минимум порядка 10^(-10).

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

Дмитрий    09.10.2016 в 15:35
Как численным методом подобраться к нулю функции, которая не пересекает ось абсцисс, а касается? Ведь, вообще говоря, очень хочется сказать, что парабола f(x)=x^2+10^(-10) отстает от оси абсцисс всего-лишь на размер электрона, и можно считать это за ноль, но это вранье. Раз в жизни может попасться и такая функция.

Дмитрий    09.10.2016 в 22:15
Update
Ознакомился со статьей "Метод касательных". Грусть приходит, когда рассматриваем модуль отношения функции к производной. Частное перестанет сходиться к чему-либо похожему на приближение. Если вам интересно, то на dxdy задал этот вопрос (http://dxdy.ru/topic111955.html)
Реакция неоднозначная, как, собственно, и решение.
Казалось бы задача: найти ноль функции численным методом в точке касания. А такой трэш.

Александр Емелин    10.10.2016 в 07:42
Дмитрий, НО, прежде чем "подбираться" к нулю, крайне целесообразно установить СУЩЕСТВОВАНИЕ этого самого нуля. Это легко сделать аналитически (см. 2 первых поста). Вот краткая выжимка:

Пусть на отрезке от a до b дана непрерывная функция f(x) и ПРОИЗВОДНАЯ этой функции меняет знак в точке c (данного отрезка). Тогда:

1) Если f(a) > 0, f(b) > 0 и f(с) > 0, то нуля не существует .

2) Если f(a) < 0, f(b) < 0 и f(с) < 0, то нуля тоже не существует.

Во всех других случаях хотя бы один ноль есть (здесь я не буду детализировать алгоритм)

И эту проверку осуществить очень просто!

Итак: если нуля не существует, то программа сразу должна выдать этот ответ! В противном случае запускаются вычисления.

Александр Емелин    10.10.2016 в 08:06
З.Ы. Для параболы y=x^2 и, например, отрезка от -1 до 1 метод касательных преспокойно работает, при этом в качестве начального приближения можно выбрать любой конец отрезка

Дмитрий    18.10.2016 в 22:11
Извините, что долго не отвечал. После некоторых размышлений, записал свои мысли, которые прошу вас посмотреть по этим ссылкам (одна .pdf, вторая .docx)
(https://drive.google.com/open?id=0B3m0DBSUuNpQSE83dU80VUVjTXc)
(https://drive.google.com/open?id=0B3m0DBSUuNpQOWVJRmNjVnljejQ)
К сожалению, прикрепить их здесь не могу. Спасибо.