我是python的新手,嘗試用3d繪製分段函數。我試圖在z軸上繪製下面的'mainformula'函數,因爲它隨着x和y的變化而變化,範圍從0到10,常數= 1。但我似乎無法弄清楚這裏的繪圖方法。在3D中繪製分段函數
from sympy import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
def mainformula(x,y,constant):
return Piecewise((subformula1(x,y,constant), y >= 0 and y < 3),(subformula2(x,y,constant),y>=3 and y <= 10))
def subformula1(x,y,constant):
return x + y + constant
def subformula2(x,y,constant):
return x - y - constant
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(0, 10, 0.25)
Y = np.arange(0, 10, 0.25)
constant = 1
X, Y = np.meshgrid(X, Y)
Z = mainformula(X,Y,constant)
surf = ax.plot_surface(X, Y, Z)
plt.show()
當我運行該代碼我得到的錯誤是:「ValueError異常:陣列的具有多於一個元素的真值是不明確的使用a.any()或a.all()」。
非常感謝。這符合我期待的目標。我能爲此添加一些複雜性嗎? 有沒有一種方法可以將「condition1 = np.logical_and(y> = 0,y <3)」更改爲具有其他條件: condition1 = np.logical_and(y> = 0,y <3 )和np.logical_and(subformula1(x,y,constant)> = 0) – racemic
當然,您也可以使用'&'代替'np.logical_and'並將其表述爲'condition1 =(y> = 0)& (y <3)&(subformula1(x,y,constant)> = 0)',但這會排除設置最後一個'z'中的某些元素。例如,如果'0
MSeifert
非常感謝,這就是訣竅。最後一件事。有沒有這樣的事情np.logical(沒有和所以我不必提供2個參數)?所以我想要這樣的: np.logical_and(y> = 0,y <3)到np.logical(y <3)? – racemic