Project

curve fitting

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

# Read file function
def read_file(fileName):
    # Initialize temperature and cp arrays
    temperature,cp = [],[]
    # Open file
    with open(fileName,\\\'r\\\') as data:
        for line in data.readlines():
            values = list(map(float,line.strip().split(\\\',\\\')))
            temperature.append(values[0])
            cp.append(values[1])
    return temperature,cp

# Linear Curve fit function
def linearFunc(t,a,b):
    return a*t + b

# Cubic Curve fit function
def cubicFunc(t,a,b,c,d):
    return a*pow(t,3)+b*pow(t,2)+c*t+d

# Fit function
def fitCurve(fitFunction,temperature,cp):
    popt,pcov = curve_fit(fitFunction,temperature,cp)
    fit_cp = fitFunction(np.array(temperature),*popt)
    return fit_cp

# Get sum of squares of residuals
def sumSquareResiduals(cp,fit_cp):
    return np.sum(pow(np.array(cp)-np.array(fit_cp),2))

# Plot curves
def plotCurves(temperature,cp):
    plt.plot(temperature,cp,c=\\\'b\\\',linewidth=3,label=\\\'original data\\\')
    cp_fit_linear = fitCurve(linearFunc,temperature,cp)
    plt.plot(temperature,cp_fit_linear,c=\\\'r\\\',linewidth=3,label=\\\'linear fit\\\')
    cp_fit_cubic = fitCurve(cubicFunc,temperature,cp)
    plt.plot(temperature,cp_fit_cubic,c=\\\'g\\\',linewidth=3,label=\\\'cubic fit\\\')

# Compare residuals
def compareResiduals(temperature,cp):
    cp_fit_linear = fitCurve(linearFunc,temperature,cp)
    cp_fit_cubic = fitCurve(cubicFunc,temperature,cp)
    residualSquareSum_linear = sumSquareResiduals(cp,cp_fit_linear)
    residualSquareSum_cubic = sumSquareResiduals(cp,cp_fit_cubic)
    print(\\\"Sum of squares of residuals:\\\")
    print(\\\"For linear fit: {}\\\".format(residualSquareSum_linear))
    print(\\\"For cubic fit: {}\\\".format(residualSquareSum_cubic))

def main():
    fileName=\\\"data\\\"
    temperature, cp = read_file(fileName)
    plt.figure(figsize=(15,10))
    plotCurves(temperature,cp)
    plt.legend(loc=\\\'best\\\')
    plt.xlabel(\\\"Temperature\\\")
    plt.ylabel(\\\'Cp\\\')
    plt.savefig(\\\"DataFit.png\\\")
    compareResiduals(temperature,cp)

if __name__ ==\\\"__main__\\\":
    main()
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.