Neuling
Neuling

Reputation: 89

How do I solve the error in plot variable dimension mismatch?

I am trying to fit a data generated using formula-1 by formula-2. The former has 3 parameters, whereas the later has 5 fitting parameters. But now I get error in plotting the fitted curve due to shape mismatch.

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c, d, e):
    return (((a/e) * (2*x)**b) + (d * (2*x)**c))

y = []
x = []
A = 6.7
B = 2.0
C = 0.115
for N in np.logspace(1, 9., 100, base = 10.):
    x.append(int(N))
    y.append(np.exp((A-np.log(int(N)))/B)+C)
plt.loglog(x, y, 'b:*', label='data')

popt, pcov = curve_fit(func, x, y)
print(popt)
plt.loglog(x, func(x, *popt))

I would like to see the fitted curve, but there s a dimension error in the last line '''plt.loglog(x, func(x, *popt))'''

Upvotes: 2

Views: 385

Answers (1)

Mathieu
Mathieu

Reputation: 5756

One way to do this is to create a list y_model in which you add the element y corresponding to each x.

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c, d, e):
    return (((a/e) * (2*x)**b) + (d * (2*x)**c))

y = []
x = []
A = 6.7
B = 2.0
C = 0.115
for N in np.logspace(1, 9., 100, base = 10.):
    x.append(int(N))
    y.append(np.exp((A-np.log(int(N)))/B)+C)

popt, pcov = curve_fit(func, x, y)

y_model = []
for e in x:
    y_model.append(func(e, *popt))

plt.loglog(x, y, 'b:*', label='data')
plt.loglog(x, y_model)

Result:

enter image description here

Upvotes: 3

Related Questions