6

Есть ли алгоритм проверки, является ли данная (возможно, нелинейная) функция f всегда положительной?Алгоритм проверки, является ли нелинейная функция f всегда положительной.

Идея, что я в настоящее время имею, - это найти корни функции (используя алгоритм Ньютона-raphson или аналогичные методы, см. http://en.wikipedia.org/wiki/Root-finding_algorithm) и проверить производные или найти минимум f, но они не кажутся чтобы быть наилучшим решением этой проблемы, также существует множество проблем конвергенции с алгоритмами поиска корней.

Например, в Maple функция подтверждает, что может это сделать, но мне нужно реализовать ее в своей собственной программе. Maple Помощь по подтверждению: http://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells Пример клена: Предположим (x, 'real'); проверить (x^2 + 1,0, 'больше_than'); -> возвращает true, так как для каждого x имеем x^2 + 1> 0

Некоторая предпосылка на вопрос: Функция $ f $ - это дифференциальная нелинейная модель правой стороны для схемы , Нелинейную схему можно моделировать как набор обыкновенных дифференциальных уравнений путем применения модифицированного узлового анализа (MNA), для простоты рассмотрим только системы с 1 размерностью, поэтому $ x '= f (x) $, где $ f $ описывает схема, например $ f $, может быть $ f (x) = 10x - 100x^2 + 200x^3 - 300x^4 + 100x^5 $ (модель для нелинейного туннельного диода) или $ f = 10 - 2sin (4x) + 3x $ (модель для josephson-перехода).

$ x $ ограничен, а $ f $ определяется только в интервале $ [a, b] \ in R $. $ f $ непрерывна. Я также могу предположить, что $ f $ является липшицем с константой Липшица L> 0, но я не хочу, если только это не нужно.

+0

Выполняет ли «проверка» работы Maple для всех возможных функций? Как насчет, скажем, десятичного полинома? – Kevin

+2

Я предполагаю, что вы имеете в виду ** непрерывную **, возможно ** многочленную ** функцию * (в конце концов, 'f (x) = -1 iff program X halts else + 1' является допустимой функцией) *? Если да, то в чем проблема? Вы упомянули два решения: найдите корни функции * (проверьте значение функции в одной точке между каждым корнем) * или корни производной * (проверьте значение функции в каждой из этих точек) * - либо один из них должен работать. –

+0

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

ответ

3

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

Если ваша функция является полиномом, я думаю, что может применяться Sturm's theorem. Статья в Википедии утверждает, что предпочтительны две другие процедуры, поэтому вы также можете проверить их. Я не уверен, работает ли Descartes' rule of signs с интервалом, но Budan's theorem действительно выглядит.

 Смежные вопросы

  • Нет связанных вопросов^_^