Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Sympy-matplotlib:x和y必须具有相同的第一维度_Python 3.x_Numpy_Matplotlib_Sympy - Fatal编程技术网

Python 3.x Sympy-matplotlib:x和y必须具有相同的第一维度

Python 3.x Sympy-matplotlib:x和y必须具有相同的第一维度,python-3.x,numpy,matplotlib,sympy,Python 3.x,Numpy,Matplotlib,Sympy,我使用sympy和matplotlib绘制了一个图形,但我有一个错误。 我用Symphy解方程,用matplotlib作图 我做错了什么 代码如下: import numpy as np import sympy import math from mpmath import * from sympy import * import matplotlib.pyplot as plt x= symbols('x') f, g, h = symbols('f g h', cls=Function)

我使用sympy和matplotlib绘制了一个图形,但我有一个错误。 我用Symphy解方程,用matplotlib作图

我做错了什么

代码如下:

import numpy as np
import sympy
import math
from mpmath import *
from sympy import *
import matplotlib.pyplot as plt

x= symbols('x')
f, g, h = symbols('f g h', cls=Function)
A, C1, C2 = symbols('A C1 C2')
input = C1 * sin(5*x) + C2 * cos(5*x) + x/25
ex1 = input.subs({x:0})
ex2 = input.subs({x:4})
kq = solve((ex1, ex2), C1, C2)
pttq = input.subs({C1:kq[C1], C2: kq[C2]})
print(pttq)

x = np.arange(0, 5, 1)
y = pttq

fig, ax = plt.subplots()

plt.xlabel('(m)')
plt.ylabel('(KN)')
plt.title('NEO')

plt.plot(x, y)

plt.show()
错误消息:

Traceback (most recent call last):
  File "\Text", line 31, in <module>
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\pyplot.py", line 3318, in plot
    ret = ax.plot(*args, **kwargs)
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\__init__.py", line 1892, in inner
    return func(ax, *args, **kwargs)
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\axes\_axes.py", line 1406, in plot
    for line in self._get_lines(*args, **kwargs):
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\axes\_base.py", line 407, in _grab_next_args
    for seg in self._plot_args(remaining, kwargs):
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\axes\_base.py", line 385, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "C:\Blender\2.78\python\lib\site-packages\matplotlib\axes\_base.py", line 244, in _xy_from_xy
    "have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have shapes (5,) and (1,)
回溯(最近一次呼叫最后一次):
文件“\Text”,第31行,在
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\pyplot.py”,第3318行,在plot中
ret=最大绘图(*args,**kwargs)
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\\uuuuu init\uuuuu.py”,第1892行,在内部
返回函数(ax,*args,**kwargs)
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\axes\u axes.py”,第1406行,在绘图中
对于自身中的行。获取行(*args,**kwargs):
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\axes\\u base.py”,第407行,位于下一个参数中
对于seg in self.\u plot\u args(剩余,kwargs):
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\axes\\ u base.py”,第385行,在绘图参数中
x、 y=自。_xy_自_xy(x,y)
文件“C:\Blender\2.78\python\lib\site packages\matplotlib\axes\\ u base.py”,第244行,在\u xy\u中
“有形状{}和{}”。格式(x.shape,y.shape))
ValueError:x和y必须具有相同的第一维度,但具有形状(5)和(1)

好的,这里有一些问题

首先,变量
x
: 导入后,将其定义为sympy变量,然后在表达式中使用。但随后将其重载为一个包含用于打印的x值的数组。所以你可能想把它改成

x_vals = np.arange(0, 5, 1)
其次,正如上面的注释所述,
y
必须是一个列表或numpy数组。要产生这样的结果,您必须执行以下操作

y = np.empty(x_vals.shape)
for i in range(len(x_vals)):
    y[i] = pttq.subs(x,x_vals[i]).evalf()
最后,对于绘图,您可能希望在x中有一个较小的步长:

x_vals = np.arange(0, 5, .1)

好的,这里有一些地方出了问题

首先,变量
x
: 导入后,将其定义为sympy变量,然后在表达式中使用。但随后将其重载为一个包含用于打印的x值的数组。所以你可能想把它改成

x_vals = np.arange(0, 5, 1)
其次,正如上面的注释所述,
y
必须是一个列表或numpy数组。要产生这样的结果,您必须执行以下操作

y = np.empty(x_vals.shape)
for i in range(len(x_vals)):
    y[i] = pttq.subs(x,x_vals[i]).evalf()
最后,对于绘图,您可能希望在x中有一个较小的步长:

x_vals = np.arange(0, 5, .1)

要使用matplotlib打印,x和y需要是list(或numpy.array)。这里的
y
是sympy方程,这就是为什么使用matplotlib绘制时会出现错误,x和y需要是list(或numpy.array)。这里
y
是辛方程,这就是为什么会出现错误谢谢,我修正了错误谢谢,我修正了错误