2013-08-06 51 views
6

我是新來的Python繪製除了一些基本知識matplotlib.pyplot。我的問題是如何繪製一些更高階的多項式?我看到的一種方法是用x表示y,然後繪製這些值。但我有兩個難點:在Python中繪製一個多項式

  1. y和x不能分開。
  2. 我期待一個閉合曲線(實際上是一個複雜的曲線)

我想情節的多項式爲:

c0 + c1*x + c2*y +c3*x*x + c4*x*y + c5*y*y + c6*x**3 + c7*x**2*y + ..... c26*x*y**5 + c27*y**6 

所有係數c0c27是已知的。 如何繪製這條曲線?

也可以請我建議我從哪裏可以學習繪圖和Python可視化資源?

澄清: 對不起,每個人都說得不夠清楚。它不是一個表面的方程(涉及3個變量:x,y和z)。我應該在最後加一個零:c0 + c1 * x + c2 * y + c3 * x * x + c4 * x * y + c5 * y * y + c6 * x ** 3 + c7 * x ** 2 * Y + ..... C26 * X * Y ** 5 + C27 * Y ** 6 = 0

+1

如果您期望的曲線,也許你想要多項式= 0,並將其視爲一個隱式方程?如果你只是想「繪製你的多項式」,因爲它是兩個變量的函數,結果是曲面,而不是平面曲線。 – 2013-08-06 22:32:01

+0

是的,編輯我的問題。抱歉的混淆 – Ally

+1

你可能看看[this](http://stackoverflow.com/questions/2484527/is-it-possible-to-plot-implicit-equations-using-matplotlib)SO問題,而* [sympy]中的plot_implicit *函數(http://docs.sympy.org/dev/modules/plotting.html)。 – 2013-08-07 13:33:25

回答

5

我不知道我完全理解你的問題,但我認爲你想有一個surface plot

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

x = np.arange(-5, 5, 0.25) 
y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(x, y) 
F = 3 + 2*X + 4*X*Y + 5*X*X 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X, Y, F) 
plt.show() 

而對於資源:official documentationpyvideos

+1

也許有點* plt.show()*缺少到底? :-) – 2013-08-06 22:29:17

+0

是:),我正在使用'ipython notebook --pylab = inline',因此它立即顯示它。但是如果你正在編寫腳本,你需要它。修正了它,謝謝:) –

2

你的方程表示3D表面,您可以創建情節首先xy值的網格,輕鬆地使用numpy的實現:

X,Y = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 200)) 

XY都是分別包含X座標和Y座標的二維數組。

然後你就可以在這個網格計算z值爲每個點,使用已知係數:

Z = c0 + c1*X + c2*Y +c3*X*X + c4*X*Y + c5*Y*Y + c6*X**3 + c7*X**2*Y + ..... c26*X*Y**5 + c27*Y**6 

之後,你可以使用matplotlib繪製它:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
ax = plt.subplot(111, projection='3d') 
ax.plot_surface(X, Y, Z) 
plt.show()