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-')
