CURVE FITTING
By P.P.Krishnaraj
P.P.Krishnaraj
RSET
CURVE FITTING
EXACT FIT/INTERPOLATION BEST FIT
1. Number of parameter is 1. Large number of parameter
less and you have absolute i.e if polynomial is used ,
confidence in your order of polynomial
increases.
measurements.
2. Equation becomes big
2. Passes through every point
3. Regression in engineering
3. Eg property data, problem
calibration data. 4. Eg nusselt number
correlations
P.P.Krishnaraj RSET
Curve fitting by method of least squares for
straight line
Y=a+bX
ƩYi=na+bƩXi
ƩXiYi=aƩXi+bƩXi 2
P.P.Krishnaraj RSET
Q)Find a straight line fit by method of least square to following data
Y=a+bX
X Y XY X2
1 14 14 1
2 27 54 4 ƩYi=na+bƩXi
3 40 120 9
ƩXiYi=aƩXi+bƩXi2
4 55 220 16
5 68 340 25
ƩX=15 ƩY=204 ƩXY=748 ƩX2=55 n=5
204=5a+15b
748=15a+55b
P.P.Krishnaraj RSET
Curve fitting by method of least squares for
parabola
2
Y=aX +bX+c
2
ƩYi=aƩXi +bƩXi+nc
3 2
ƩXiYi=aƩXi +bƩXi +cƩXi
2 4 3
ƩXi Yi=aƩXi +bƩXi +cƩXi 2
P.P.Krishnaraj RSET
Curve fitting by method of least squares for
exponential curve
Y=ae bX
Taking log on both sides
log10Y=log10a+bXlog10e
Y=A+BX
ƩYi=nA+BƩXi
ƩXiYi=AƩXi+BƩXi2
P.P.Krishnaraj RSET
Geometric curves
y=axb Y=ax+b/x
log10y=log10a + blog10x xy=ax2+b
Y=A+bX
ƩYi=nA+bƩXi
ƩXiYi=AƩXi+bƩXi2 Ʃxy=aƩx2+nb
Ʃ(y/x)=na+bƩ(1/x2)
y=abx
log10y=log10a + xlog10b
Y=A+xB
ƩYi=nA+BƩxi
ƩxiYi=AƩxi+bƩxi2 P.P.Krishnaraj RSET
Program for curve fitting by method of
least squares for straight line
Y=a+bX
ƩYi=na+bƩXi
ƩXiYi=aƩXi+bƩXi 2
x y xy x 2
Ʃx= Ʃy= Ʃxy= 2
Ʃx =
P.P.Krishnaraj RSET
#include<stdio.h> for(i=0;i<n;i++)
#include<conio.h> {
#include<math.h> xsum=xsum+x[i]; /*calculates Ʃxi*/
#define MX 10 ysum=ysum+y[i]; /*calculates Ʃyi*/
int main() x2sum=x2sum+pow(x[i],2); /*calculates Ʃxi2*/
{ xysum=xysum+x[i]y[i]; /*calculates Ʃxiyi*/
int i,j,k,n; }
𝑛.𝑥𝑦𝑠𝑢𝑚−𝑥𝑠𝑢𝑚∗𝑦𝑠𝑢𝑚
cout<<“enter the x axis values”; B=( 2 );
𝑛.𝑥 𝑠𝑢𝑚−𝑥𝑠𝑢𝑚∗𝑥𝑠𝑢𝑚
for(i=0;i<n;i++) 𝑥2𝑠𝑢𝑚.𝑦𝑠𝑢𝑚−𝑥𝑠𝑢𝑚∗𝑥𝑦𝑠𝑢𝑚
{ A= ( );
𝑛.𝑥2𝑠𝑢𝑚−𝑥𝑠𝑢𝑚∗𝑥𝑠𝑢𝑚
cin>>x[i]; cout<<“the values of a and b are”<<a<<b<<endl;
cout<<“enter the y axis values”; cout<<“the required linear relation is”;
for(i=0;i<n;i++) cout<<“y=“<<A<<“+”<<B<<“x””<<endl;
{ getch();
cin>>y[i]; } }
float xsum=0,x2sum=0,ysum=0,xysum=0;
P.P.Krishnaraj RSET
Program for curve fitting by method of
least squares for exponential curve
y=aebx
Taking log on both sides
log10y=log10a+bxlog10e
Y=A+Bx
ƩYi=nA+BƩxi
ƩXiYi=AƩXi+BƩxi2
x y Y=logy xY x 2
Ʃx= Ʃy= ƩY=
P.P.Krishnaraj RSET ƩxY= 2
Ʃx =
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MX 10
int main()
{
int i,number;
float xvalue[MX],yvalue[MX],sumx=0;sumlogy=0;
float productxlogy[MX],sumxlogy=0,square[MX],sumx2=0;
float denominator,a,B,A;
Cout<<“how many values of x “;
Cin>>number;
For(i=0;i<number;i++){
Cin>>xvalue[i]; }
P.P.Krishnaraj RSET
cout<<“enter y values”: for(i=0;i<number;i++)
for(i=0;i<n:i++)
{
{
cin>>yvalue[i]; square[i]=xvalue[i]*xvalue[i];
} sumx2=sumx2+square[i];
for(i=0;i<number;i++)
{
}
sumx=sumx+xvalue[i]; denominator= 𝑛𝑢𝑚𝑏𝑒𝑟 ∗ 𝑠𝑢𝑚𝑥2 −
} 𝑠𝑢𝑚𝑥 ∗ 𝑠𝑢𝑚𝑥
for(i=0;i<number;i++) 𝑠𝑢𝑚𝑙𝑜𝑔𝑦∗𝑠𝑢𝑚𝑥2 −(𝑠𝑢𝑚𝑥∗𝑠𝑢𝑚𝑥𝑙𝑜𝑔𝑦)
{
A= ;
𝑑𝑒𝑛𝑜𝑚𝑖𝑛𝑎𝑡𝑜𝑟
sumlogy=sumlogy+log(yvalue[i]); 𝑛𝑢𝑚𝑏𝑒𝑟∗𝑠𝑢𝑚𝑥𝑙𝑜𝑔𝑦 −(𝑠𝑢𝑚𝑥∗𝑠𝑢𝑚𝑙𝑜𝑔𝑦)
B= ;
} 𝑑𝑒𝑛𝑜𝑚𝑖𝑛𝑎𝑡𝑜𝑟
for(i=0;i<number;i++) A=exp(A); /*i.e antilog of A */
{ B=B/log10e;
productxlogy[i]=xvalue[i]*log(yvalue[i]);
sumxlogy=sumxlogy+productxlogy[i];
}
P.P.Krishnaraj RSET
}
Program for curve fitting by method of
least square for geometric curve
y=axb
log10y=log10a + blog10x
Y=A+bX
ƩYi=nA+bƩXi
ƩXiYi=AƩXi+bƩXi2
X y Y=logy XY X2
ƩX=Ʃlogx= Ʃy= ƩY=Ʃlogy= ƩXY= ƩX2=
Ʃlogx*logy= Ʃlogx2
P.P.Krishnaraj RSET
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MX 10
int main()
{
int i,number;
float sumlogx=0,sumlogy=0,xvalue[MX],yvalue[MX];
float productlogxlogy[MX],sumlogxlogy=0,square[MX],sumx2=0;
float denominator,a,B,A;
Cout<<“how many values of x “;
Cin>>number;
For(i=0;i<number;i++){
Cin>>xvalue[i]; } P.P.Krishnaraj RSET
cout<<“enter y values”: for(i=0;i<number;i++)
for(i=0;i<n:i++)
{
{
cin>>yvalue[i]; square[i]=log(xvalue[i])*log(xvalue[i]);
} sumx2=sumx2+square[i];
for(i=0;i<number;i++)
{
}
sumlogx=sumlogx+log(xvalue[i]); denominator= 𝑛𝑢𝑚𝑏𝑒𝑟 ∗ 𝑠𝑢𝑚𝑥2 −
} 𝑠𝑢𝑚𝑙𝑜𝑔𝑥 ∗ 𝑠𝑢𝑚𝑙𝑜𝑔𝑥
for(i=0;i<number;i++) 𝑠𝑢𝑚𝑙𝑜𝑔𝑦∗𝑠𝑢𝑚𝑙𝑜𝑔𝑥2 −(𝑠𝑢𝑚𝑙𝑜𝑔𝑥∗𝑠𝑢𝑚𝑙𝑜𝑔𝑥𝑙𝑜𝑔𝑦)
{
A= ;
𝑑𝑒𝑛𝑜𝑚𝑖𝑛𝑎𝑡𝑜𝑟
sumlogy=sumlogy+log(yvalue[i]); 𝑛𝑢𝑚𝑏𝑒𝑟∗𝑠𝑢𝑚𝑙𝑜𝑔𝑥𝑙𝑜𝑔𝑦 −(𝑠𝑢𝑚𝑙𝑜𝑔𝑥∗𝑠𝑢𝑚𝑙𝑜𝑔𝑦)
B= ;
} 𝑑𝑒𝑛𝑜𝑚𝑖𝑛𝑎𝑡𝑜𝑟
for(i=0;i<number;i++) a=exp(A);}
{
productlogxlogy[i]=log(xvalue[i])*log(yvalue[i]);
sumlogxlogy=sumlogxlogy+productlogxlogy[i];
P.P.Krishnaraj RSET
}
A program to obtain the solution to laplace
equation as per specified boundary conditions.
P.P.Krishnaraj RSET
#include<iostream.h> for(i=1;i<=4;i++)
#include<math.h> {
int main() u[i][0]=u[0][0];
{ }
int I,j,k; for(i=1;i<=4;i++)
float u[5][5],v[5][5]; {
u[i][0]=u[0][0];
float relerr,maxerr=0,err;
}
cout<<“give the accuracy needed”;
for(i=1;i<=4;i++)
cin>>err; {
cout<<“give the boundary condtions at x=0 and y=0”; cin>>u[4][i];
cin>>u[0][0]; }
for(i=1;i<=4;i++) for(i=0;i<4;i++)
{ {
u[0][i]=u[0][0]; cin>>u[i][4];
} }
P.P.Krishnaraj RSET
u[2][2]=(u[0][0]+u[4][4]+u[0][4]+u[4][0])/4; If(relerr>maxerr)
u[1][1]=(u[0][0]+u[2][2]+u[2][0]+u[0][2])/4; maxerr=relerr;
u[3][1]=(u[4][2]+u[2][0]+u[4][0]+u[2][2])/4; }
u[3][3]=(u[4][4]+u[2][2]+u[4][2]+u[2][4])/4;
}
u[1][3]=(u[2][4]+u[0][2]+u[2][2]+u[0][4])/4;
u[2][1]=(u[1][1]+u[3][1]+u[2][2]+u[2][0])/4;
if(maxerr<=relerr)
u[3][2]=(u[3][3]+u[3][1]+u[4][2]+u[2][2])/4; {
u[1][2]=(u[1][3]+u[1][1]+u[0][2]+u[2][2])/4; cout<<“converged solution is obtained by Jacobi
u[2][3]=(u[2][4]+u[2][2]+u[1][3]+u[3][3])/4;
method”;
for(k=1;k<=100;k++) break;
{ cout<<k; }
maxerr=0.0; for(j=1;j<4;j++)
for(j=1;j<4;j++) for(i=1;i<4;i++)
{ u[i][j]=v[i][j];
for(i=1;i<4;i++) }
{
return 0;
v[i][j]=(u[i-1][j]+u[i+1][j]+u[i][j-1]+u[i][j+1])/4;
}
relerr=fabs()v[i][j]-u[i][j])/u[i][j];
P.P.Krishnaraj RSET