Python 如何绘制三维曲面?

Python 如何绘制三维曲面?,python,numpy,matplotlib,sympy,Python,Numpy,Matplotlib,Sympy,我想绘制一个3d曲面,它有一个参数形式: x = (-2 * (s^2 - t)^ 3) y = log(t*(t-2*s^2)+2*s^2) z = 1/(s^2-t) 其中,s,t是参数。我使用了plt\u曲面,但它不起作用。我不知道发生了什么事,你能帮我吗 from matplotlib import pyplot as plt import numpy as np import math import mpl_toolkits.mplot3d.axes3d as axes3d

我想绘制一个3d曲面,它有一个参数形式:

x = (-2 * (s^2 - t)^  3)

y = log(t*(t-2*s^2)+2*s^2)

z = 1/(s^2-t)
其中,
s
t
是参数。我使用了
plt\u曲面
,但它不起作用。我不知道发生了什么事,你能帮我吗

from matplotlib import pyplot as plt
import numpy as np
import  math
import mpl_toolkits.mplot3d.axes3d as axes3d

s,t=symbols('s,t')
x=Function('x')(s,t)
z=Function('z')(s,t)
y=Function('y')(s,t)
figure = plt.figure()
ax = figure.add_subplot(1, 1, 1, projection='3d')
t1= np.linspace(1,100,200)
s1 = np.linspace(1,100,200)
s,t=np.meshgrid(s1,t1)
x = (-2 * (s*s - t)**3)
y = log(t*(t-2*s*s)+2*s*s)
z = 1/(s*s-t)
ax.plot_surface(x,y,z,cmap='rainbow')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('f')
plt.show()
运行后,它显示:

Traceback (most recent call last):
  File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\cache.py", line 94, in wrapper
    retval = cfunc(*args, **kwargs)
TypeError: unhashable type: 'numpy.ndarray'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\cache.py", line 94, in wrapper
    retval = cfunc(*args, **kwargs)
TypeError: unhashable type: 'numpy.ndarray'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):


     File "C:/Users/apple/Desktop/pywork/mining/rep.py", line 19, in <module>
        y = log(s)
      File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\cache.py", line 96, in wrapper
        retval = func(*args, **kwargs)
      File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\function.py", line 458, in __new__
        result = super(Function, cls).__new__(cls, *args, **options)
      File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\cache.py", line 96, in wrapper
        retval = func(*args, **kwargs)
      File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\core\function.py", line 277, in __new__
        evaluated = cls.eval(*args)
      File "C:\Users\apple\Desktop\pywork\venv\lib\site-packages\sympy\functions\elementary\exponential.py", line 577, in eval
        coeff = arg.as_coefficient(S.ImaginaryUnit)
    AttributeError: 'ImmutableDenseNDimArray' object has no attribute 'as_coefficient'

    Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\cache.py”,第94行,在包装器中
retval=cfunc(*args,**kwargs)
TypeError:不可损坏的类型:“numpy.ndarray”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\cache.py”,第94行,在包装器中
retval=cfunc(*args,**kwargs)
TypeError:不可损坏的类型:“numpy.ndarray”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:/Users/apple/Desktop/pywork/mining/rep.py”,第19行,在
y=对数
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\cache.py”,第96行,在包装器中
retval=func(*args,**kwargs)
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\function.py”,第458行,在新的__
结果=超级(函数,cls)。\新的\新的(cls,*参数,**选项)
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\cache.py”,第96行,在包装器中
retval=func(*args,**kwargs)
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\core\function.py”,第277行,在新的__
已评估=cls.eval(*args)
文件“C:\Users\apple\Desktop\pywork\venv\lib\site packages\sympy\functions\elementary\index.py”,第577行,在eval中
系数=参数as_系数(S.ImaginaryUnit)
AttributeError:'ImmutableDenseNDimArray'对象没有属性'as_covercient'
进程已完成,退出代码为1

要从代码中获得一些结果,您需要有效的输入数据。在这种情况下,
t1
的域不合适,并导致
y
z
的计算出错。下面是修改后的代码,
t1
的域被更改为原始代码可以运行并生成一些绘图

from matplotlib import pyplot as plt
import numpy as np
#import math
import mpl_toolkits.mplot3d.axes3d as axes3d
from sympy import symbols, Function

s,t = symbols('s,t')
x = Function('x')(s,t)
z = Function('z')(s,t)
y = Function('y')(s,t)

figure = plt.figure(figsize=(8,8))
ax = figure.add_subplot(1, 1, 1, projection='3d')

# experiment with various range of data
t1 = np.linspace(-1,-100,200)  #...to enable computation
s1 = np.linspace(1,100,200)
s,t = np.meshgrid(s1,t1)
x = -2*(s*s - t)**3

y = np.log(t*(t-2*s*s)+2*s*s)  # need np.
z = 1/(s*s-t)  

ax.plot_surface(x,y,z,cmap='rainbow')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('f')
plt.show()
输出曲线图:


要从代码中获得一些结果,需要有效的输入数据。在这种情况下,
t1
的域不合适,并导致
y
z
的计算出错。下面是修改后的代码,
t1
的域被更改为原始代码可以运行并生成一些绘图

from matplotlib import pyplot as plt
import numpy as np
#import math
import mpl_toolkits.mplot3d.axes3d as axes3d
from sympy import symbols, Function

s,t = symbols('s,t')
x = Function('x')(s,t)
z = Function('z')(s,t)
y = Function('y')(s,t)

figure = plt.figure(figsize=(8,8))
ax = figure.add_subplot(1, 1, 1, projection='3d')

# experiment with various range of data
t1 = np.linspace(-1,-100,200)  #...to enable computation
s1 = np.linspace(1,100,200)
s,t = np.meshgrid(s1,t1)
x = -2*(s*s - t)**3

y = np.log(t*(t-2*s*s)+2*s*s)  # need np.
z = 1/(s*s-t)  

ax.plot_surface(x,y,z,cmap='rainbow')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('f')
plt.show()
输出曲线图:


不要在图像中编写代码。@AbdelAziz Abdelatef现在我已经编写了代码。至少在两个地方发现了错误,第一个是在
y=…
日志()中无效值的错误。在
z=…
中,误差除以零。也许,
t1
s1
的域值不合适。请不要在图像中编写代码。@AbdelAziz Abdelatef现在我已经编写了代码。至少在两个地方发现了错误,第一,在
y=…
日志()中无效值的错误。在
z=…
中,误差除以零。也许,
t1
s1
的域值不合适。