ValueError: x and y must have same first dimension, but have shapes (50,) and (1,)

Использовал этот код для нахождения k1 и k2

from sympy import* 
init_printing() 
x,k1,k2 = symbols('x,k1,k2') 
fs = k1*exp(x) + k2 
points = [[1.0000,6.1210],[1.6667,9.9893],[2.3333,7.5682],[3.0000,32.0598],[3.6667,60.6964],[4.3333,116.2338],[5.0000,224.5333]]
print(points) 
sum2 = 0 
for elem in points: 
    sum2 = sum2 + (fs.subs(x,elem[0])-elem[1])**2 
Eq1 = Eq(sum2.diff(k1),0) 
Eq2 = Eq(sum2.diff(k2),0)
sol = list(linsolve([Eq1,Eq2],(k1,k2)))
sol 
import matplotlib.pyplot as plt
import numpy as np
k1,k2 = 1.51850639123028,-0.228849142240962
a = [[1.0],[1.6667],[2.3333],[3.0],[3.6667],[4.3333],[5.0]]
b = [[6.121],[9.9893],[7.5682],[32.0598],[60.6964],[116.2338],[224.5333]]
x = np.linspace(1,5,100)
y = k1 * exp(x) + k2
plt.subplots()
plt.plot(a,b,'go') 
plt.plot(x,y,'b-')
plt.show

Нужно построить график теоретической кривой и экспериментальных точек. Значения k1 и k2 найдены и даны. Точки a и b даны. Проблема либо в самой функции k1*exp(x)+k2, либо в параметрах np.linspace, пробовал менять их, все остается по прежнему. Аналогичный код с другой функцией работает без проблем. Рабочий пример

Должен получиться подобный график

Ошибка

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-96-f516088f8717> in <module>
      8 plt.subplots()
      9 plt.plot(a,b,'go')
---> 10 plt.plot(x,y,'b-')
     11 plt.show

~\AppData\Roaming\Python\Python38\site-packages\matplotlib\pyplot.py in plot(scalex, scaley, data, *args, **kwargs)
   2838 @_copy_docstring_and_deprecators(Axes.plot)
   2839 def plot(*args, scalex=True, scaley=True, data=None, **kwargs):
-> 2840     return gca().plot(
   2841         *args, scalex=scalex, scaley=scaley,
   2842         **({"data": data} if data is not None else {}), **kwargs)

~\AppData\Roaming\Python\Python38\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, data, *args, **kwargs)
   1741         """
   1742         kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D)
-> 1743         lines = [*self._get_lines(*args, data=data, **kwargs)]
   1744         for line in lines:
   1745             self.add_line(line)

~\AppData\Roaming\Python\Python38\site-packages\matplotlib\axes\_base.py in __call__(self, data, *args, **kwargs)
    271                 this += args[0],
    272                 args = args[1:]
--> 273             yield from self._plot_args(this, kwargs)
    274 
    275     def get_next_color(self):

~\AppData\Roaming\Python\Python38\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs)
    397 
    398         if x.shape[0] != y.shape[0]:
--> 399             raise ValueError(f"x and y must have same first dimension, but "
    400                              f"have shapes {x.shape} and {y.shape}")
    401         if x.ndim > 2 or y.ndim > 2:

ValueError: x and y must have same first dimension, but have shapes (50,) and (1,)

Ответы (1 шт):

Автор решения: MaxU

воспользуйтесь функцией numpy.exp():

y = k1 * np.exp(x) + k2
# -----> ^^^
plt.subplots()
plt.plot(a,b,'go') 
plt.plot(x,y,'b-')

введите сюда описание изображения

→ Ссылка