Числовой корень для положительно определенной функции в Python

У меня есть очень сложная положительно определенная линейная непрерывная функция одной переменной k для которого я пытаюсь найти все корни в данном диапазоне k; сказать -4 < k < 4,

До сих пор я сначала оценивал минимумы функции, ища точки k_j где оба $k_{j+1}>k_j$ а также $k_{j-1}>k_j$, Затем, используя каждую из этих точек в качестве отправной точки, я применяю функцию оптимизации, scipy.optimize.newton, В какой-то степени этот метод сработал. Однако, поскольку мои функции усложняются, поиск минимумов становится все более трудоемким и, возможно, неточным.

Есть ли встроенная функция в numpy или же scipy который ищет в данном домене (например, -4 < k < 4) функции и находит все корни. Я готов пожертвовать некоторой вычислительной эффективностью, чтобы мне не пришлось указывать точные точки для поиска рядом.

Спасибо

1 ответ

Вы можете использовать диапазон:

k_list = range(-4, 4)

Но это только целые числа, проблема здесь заключается в указании вашего шага. Очевидно, что между -4 и 4 есть бесконечные десятичные дроби, поэтому вам нужно указать, сколько десятичных знаков вы хотите использовать.

Ты можешь использовать numpy.arange для того, чтобы составить список из диапазона и установить значение приращения

Например

k_list = numpy.arange(-4, 4, 0.5)

будет увеличиваться на 0,5

>>> numpy.arange(-4, 4, 0.5)
>>> [-4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4]

если вы хотите увеличить на меньшую величину и, следовательно, получить больший диапазон значений, то сделайте 0,5 меньше.

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

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

for k in k_list:
    some_function(k)
    return root

РЕДАКТИРОВАТЬ:

Чтобы это работало, вам, конечно, понадобится функция, которая находит корень из k, однако, если я правильно понял ваш вопрос, это будет просто ваше линейное уравнение, если использовать простой пример: root = 2k (математический способ написания этого, конечно, y=2x,

Ради простоты давайте просто скажем, что ваша функция y=2x в этот момент ваш сценарий станет

k_list = numpy.arange(-4, 4, 0.5)

for k in k_list:
    root = 2*k
    return root

А затем вы просто указываете свое собственное значение для 0,5, чтобы решить, какой десятичный ваш k значения

Если, конечно, вы не смотрите на форму квадратичного. В этом случае мы можем иметь что-то вроде

y = x^2 - 2x +2

Это делает ваш вопрос немного более запутанным. Вы, очевидно, найдете корень х, установив y=0 однако теперь у вас есть одна переменная, которую я представляю себе, что вы подразумеваете под k, которую вы указываете, оставляя сумму, а не формулу.

В этом случае я бы позволил y=k а затем укажите свой k цени и реши найти свой корень.

например:

y = 32x^2 - 7.2x + 12
let y = k
k = 32x^2 - 7.2x +12
let k = -4 (we'd iterate through your range in reality)
4 = 32x^2 - 7.2x + 12
0 = 32x^2 - 7.2x + 8
and solve for x (aka. root)

Я ожидаю, что есть numpy или же scipy метод для решения формул с несколькими экземплярами одной и той же переменной. Я не являюсь экспертом ни в одной из библиотек, поэтому я не смогу проконсультировать вас в этом направлении.

Смотрите также: http://docs.scipy.org/doc/numpy/reference/generated/numpy.roots.html http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyval.html

Другие вопросы по тегам