2010-06-28 1 views
2

У меня есть неявная функция, например:Найти корень неявной функции в Python

f(x,y) = x**y + y**y - 3*x 

Я хочу, чтобы решить корень на meshgrid. Таким образом, е (х, у) = 0

Обращая решение легко:

x = linspace(-2,2,11) 
y = linspace(-2,2,11) 
(X,Y) = meshgrid(x,y) 

A = X**Y + Y**Y - 3*X 
contour(X,Y,A,0) 

Это прекрасно работает, у меня есть рисунок кривой, мне нужно, но я хотел бы иметь данные, в сюжете и не только визуальный сюжет. Итак, как мне найти данные сюжета?

+2

Какие данные вы точно ищете? Вы пытаетесь найти точки, в которых функция имеет значение нуля? –

+0

Ограничено ли оно только полиномами? –

+0

NumPy помогает найти корни полиномов. Для общей функции вам придется использовать числовые методы ... ответ, вероятно, прост, но, пожалуйста, сообщите нам, если вы заботитесь только о специальном случае или более того. http://www.scipy.org/doc/numpy_api_docs/numpy.lib.polynomial.poly1d.html –

ответ

3

Вы можете получить «данные, которые в [Matplotlib] сюжет» с использованием:

cs = contour(X,Y,A,0) 
data = cs.collections[0].get_paths()[1] 

Есть целый ряд алгоритмов для расчета контуров непосредственно, хотя я не знаю ни одного NumPy/скудные версии. Marching squares - это тот, о котором я всегда здесь, хотя алгоритм запатентован и существуют серьезные ограничения на его использование, поэтому я сомневаюсь, что matplotlib использует его. Here's ссылка с небольшим количеством чатов о том, как matplotlib вычисляет контуры.

+0

Я получаю следующую ошибку: IndexError: индекс индекса за пределами допустимого диапазона Где я могу найти эту информацию о классе. Я думаю, что могу сам это понять, но почему-то я не могу найти описание всех классов. – Enrico

+0

Это сработало: data = cs.collections [0] .get_paths() [0] Спасибо большое, все же я бы хотел знаете, где я нахожу эту информацию, не могли бы вы мне сказать? – Enrico

+0

ОК нашел это также: http://matplotlib.sourceforge.net/api/path_api.html – Enrico