#範例3-6:3D曲面函數(z=f(x,y),不是方程式,是函數) from sympy import * #from sympy.plotting import plot3d #(1).橢圓拋物面 z = x^2/a^2 + y^2/b^2 #錯誤方法:用方程式Eq的觀念,用plot_implicit來畫3D圖 #結果:失敗,因為plot_implicit只能畫出2D圖 x,y,z = symbols('x y z') f = Eq(x**2/2**2 + y**2/2**2 -z, 0) #plot_implicit(f) #修正方法,使用 z=f(x,y)的函數方式,來畫圖 x,y = symbols('x y') z = Function('z')(x,y) z = x**2/2**2 + y**2/2**2 plotting.plot3d(z) print('橢圓拋物面求值(x=5,y=5)=', z.subs({x:5,y:5})) #(2).雙曲拋物面 z = x^2/a^2 - y^2/b^2 x,y = symbols('x y') z = Function('z')(x,y) z = x**2/3**2 - y**2/4**2 plotting.plot3d(z) print('雙曲拋物面求值(x=5,y=5)=', z.subs({x:5,y:5})) #單葉雙曲面 f = x^2/a^2 + y^2/b^2 -z^2/c^2- 1 x,y,z = symbols('x y z') f = Function('f')(x,y,z) f = x**2/3**2 + y**2/2**2 -z**2/2**2 -1 #這個函數,無法畫出3D圖 #因為plot3d()最多只能畫出兩個變數的圖形,這個題目的變數有三個 #plotting.plot3d(f) #定義三個symbols,可以計算函數值 print('單葉雙曲面求值(x=5,y=5,z=5)=', f.subs({x:5,y:5,z:5}))