Project

CURVE FITTING FOR TEMP VS CP DATA USING MATLAB

OBJECTIVE:
To plot the linear and cubic fit curves along with data points and to measure fitness of both the curves.To perform a perfect fit with minimum deviation.

INTRODUCTION:
Curve fitting is the process of constructing a curve, or mathematical functions, that has the best fit to a series of data points,possibly subject to constraints.

if we have curve fit,additional mathematical operations can be possible which might not possible in initial data sets.

Curve fitting, also known as regression analysis, is used to find the "best fit" line or curve for a series of data points.

POLYNOMIAL CURVE FITTING:

linear polynomial for e.g., y=ax+b; polynomial degree of equation 1

quadratic polynomial for e.g., y=`ax^2+bx+c`` : polynomial degree of equation 2`

cubic polynomial for e.g., y=`ax^3+bx^2+cX+d` ; polynomial degree of equation 3`

Linear and polynomial fit :

PROGRAM:

1. A program to perform linear and cubic fit curve:

clear all
close all
clc
 
%preparing the data
cp_data=load('data');
temperature=cp_data(:,1);
cp=cp_data(:,2);
 
%curve fit
%cp=a*T^2+b*T+c
cp_1=polyfit(temperature,cp,1);
cp_2=polyfit(temperature,cp,3);

pr_cp1=polyval(cp_1,temperature);
pr_cp2=polyval(cp_2,temperature)


 
%compare my curve fit with the original data
plot(temperature,cp,'linewidth',3)
hold on
plot(temperature,pr_cp1,'linewidth',1,'color','b')
hold on
plot(temperature,pr_cp2,'linewidth',1,'color','r')
xlabel('temperature,[K]')
ylabel('specific heat,[KJ/mol-K]')
legend('original dataset','linear line','cubic line')
 

%to find rsquare
%to find mean
mean=(sum(cp)/length(cp));

ssr_1=sum((pr_cp1-mean).^2);
ssr_2=sum((pr_cp2-mean).^2);

sse_1=sum((cp-pr_cp1).^2);
sse_2=sum((cp-pr_cp2).^2);

2. A program to perform perfect fit

output occured during program is below.

clear all
close all
clc

%preparing the data
cp_data=load('data');
temperature=cp_data(:,1);
cp=cp_data(:,2);

%curve fit
%cp=a*T^2+b*T+c
cp_1=polyfit(temperature,cp,1);
pr_cpsplit=polyval(cp_1,temperature);

%split1
cp_split1=polyfit(temperature(1:320),cp(1:320),1);
pr_cpsplit1=polyval(cp_split1,temperature(1:320));
pr_split(1:320)=pr_cpsplit1;

%split2
cp_split2=polyfit(temperature(321:640),cp(321:640),1);
pr_cpsplit2=polyval(cp_split2,temperature(321:640));
pr_split(321:640)=pr_cpsplit2;

%split3
cp_split3=polyfit(temperature(641:960),cp(641:960),1);
pr_cpsplit3=polyval(cp_split3,temperature(641:960));
pr_split(641:960)=pr_cpsplit3;

%split4
cp_split4=polyfit(temperature(961:1280),cp(961:1280),1);
pr_cpsplit4=polyval(cp_split4,temperature(961:1280));
pr_split(961:1280)=pr_cpsplit4;

%split5
cp_split5=polyfit(temperature(1281:1600),cp(1281:1600),1);
pr_cpsplit5=polyval(cp_split5,temperature(1281:1600));
pr_split(1281:1600)=pr_cpsplit5;

%split6
cp_split6=polyfit(temperature(1601:1920),cp(1601:1920),1);
pr_cpsplit6=polyval(cp_split6,temperature(1601:1920));
pr_split(1601:1920)=pr_cpsplit6;

%split7
cp_split7=polyfit(temperature(1921:2240),cp(1921:2240),1);
pr_cpsplit7=polyval(cp_split7,temperature(1921:2240));
pr_split(1921:2240)=pr_cpsplit7;

%split8
cp_split8=polyfit(temperature(2241:2560),cp(2241:2560),1);
pr_cpsplit8=polyval(cp_split8,temperature(2241:2560));
pr_split(2241:2560)=pr_cpsplit8;

%split9
cp_split9=polyfit(temperature(2561:2880),cp(2561:2880),1);
pr_cpsplit9=polyval(cp_split9,temperature(2561:2880));
pr_split(2561:2880)=pr_cpsplit9;

%split10
cp_split10=polyfit(temperature(2881:3200),cp(2881:3200),1);
pr_cpsplit10=polyval(cp_split10,temperature(2881:3200));
pr_split(2881:3200)=pr_cpsplit10;


cp_2=polyfit(temperature,cp,3)
pr_cp2=polyval(cp_2,temperature)


%plot
plot(temperature,cp,'linewidth',1)
hold on
plot(temperature(1:320),pr_cpsplit1,'linewidth',1)
plot(temperature(321:640),pr_cpsplit2,'linewidth',1)
plot(temperature(641:960),pr_cpsplit3,'linewidth',1)
plot(temperature(961:1280),pr_cpsplit4,'linewidth',1)
plot(temperature(1281:1600),pr_cpsplit5,'linewidth',1)
plot(temperature(1601:1920),pr_cpsplit6,'linewidth',1)
plot(temperature(1921:2240),pr_cpsplit7,'linewidth',1)
plot(temperature(2241:2560),pr_cpsplit8,'linewidth',1)
plot(temperature(2561:2880),pr_cpsplit9,'linewidth',1)
plot(temperature(2881:3200),pr_cpsplit10,'linewidth',1)
hold on
plot(temperature,pr_cp2,'linewidth',1,'color','r')

xlabel('temperature,[K]')
ylabel('specific heat,[KJ/mol-K]')
legend('original dataset','linear line','cubic line')

%to find square
mean=(sum(cp)/length(cp));
ssr_1=0
sse_1=0
for i=1:length(cp)/8
    ssr_1=sum((pr_cpsplit(i)-mean).^2);
sse_1=sum((cp(i)-pr_cpsplit(i)).^2);
sst_1=ssr_1+sse_1;
r_square1=(ssr_1/sst_1)
RMSE1=(sse_1/length(cp))^0.5
end
ssr_2=0
sse_2=0

for i=1:length(pr_cp2)
    ssr_2=sum((pr_cp2(i)-mean).^2);
    sse_2=sum((cp(i)-pr_cp2(i)).^2);
    
    sst_2=ssr_2+sse_2;
    r_square2=(ssr_2/sst_2)
    RMSE2=(sse_2/length(cp))^0.5
end

3. A program made short and precise for better understanding of using for loop

clear all
close all
clc

%preparing the data
cp_data=load('data');
temp=cp_data(:,1);
cp=cp_data(:,2);

a=1;
b=320;

for i=1:10;
co_eff=polyfit(temp(a:b),cp(a:b),1);
pre_cp(a:b)=polyval(co_eff,temp(a:b));

a=b+1;
b=b+320;

end
plot(temp,cp);
hold on
plot(temp,pre_cp);
title('curve fitting')
xlabel('temperature[K]')
ylabel('specific heat[KJ/mol-K]')

REFERENCE:

https://projects.skill-lync.com/projects/Curve-Fitting-and-criterion-to-choose-best-fit-41860

https://terpconnect.umd.edu/~toh/models/CurveFitting.html

Mathworks.

CONCLUSION:

Curve fitting has been used to analyse noisy data that has no given physical relation.

The degree of polynomial can be either 1 or 2 to get perfect fit.

RESULT:

Thus linear and cubic fit curves along with data points has been plotted and perfect fit with minimum deviation can been explained.

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.