//Exponential Fit
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int i,j,k,n;
cout<<"\nEnter the no. of data pairs to be entered:\n"; //To find the size of arrays
cin>>n;
double x[n],y[n],lny[n],a,b,c;
cout<<"\nEnter the x-axis values:\n"; //Input x-values(observed)
for (i=0;i<n;i++)
cin>>x[i];
cout<<"\nEnter the y-axis values:\n"; //Input y-values(observed)
for (i=0;i<n;i++)
cin>>y[i];
for (i=0;i<n;i++) //Calculate the values of ln(yi)
lny[i]=log(y[i]);
double xsum=0,x2sum=0,ysum=0,xysum=0; //variables for sums/sigma of xi,yi,xi^2,xiyi etc
for (i=0;i<n;i++)
{
xsum=xsum+x[i]; //calculate sigma(xi)
ysum=ysum+lny[i]; //calculate sigma(yi)
x2sum=x2sum+pow(x[i],2); //calculate sigma(x^2i)
xysum=xysum+x[i]*lny[i]; //calculate sigma(xi*yi)
}
a=(n*xysum-xsum*ysum)/(n*x2sum-xsum*xsum); //calculate slope(or the the power of exp)
b=(x2sum*ysum-xsum*xysum)/(x2sum*n-xsum*xsum); //calculate intercept
c=pow(2.71828,b); //since b=ln(c)
double y_fit[n]; //an array to store the new fitted values of y
for (i=0;i<n;i++)
y_fit[i]=c*pow(2.71828,a*x[i]); //to calculate y(fitted) at given x points
cout<<"S.no"<<setw(5)<<"x"<<setw(19)<<"y(observed)"<<setw(19)<<"y(fitted)"<<endl;
cout<<"-----------------------------------------------------------------\n";
for (i=0;i<n;i++)
cout<<i+1<<"."<<setw(8)<<x[i]<<setw(15)<<y[i]<<setw(18)<<y_fit[i]<<endl;//print a table of x,y(obs.) and y(fit.)
cout<<"\nThe corresponding line is of the form:\n\nlny = "<<a<<"x + ln"<<b<<endl;
cout<<"\nThe exponential fit is given by:\ny = "<<c<<"e^"<<a<<"x\n";
return 0;
}

PhD researcher at Friedrich-Schiller University Jena, Germany. I'm a physicist specializing in theoretical, computational and experimental condensed matter physics. I like to develop Physics related apps and softwares from time to time. Can code in most of the popular languages. Like to share my knowledge in Physics and applications using this Blog and a YouTube channel.

6 thoughts on “C++ Program for Exponential Fitting (Least Squares)”

Dear Manas Sharma,
thanks a lot for the code reported above, was really useful for me.
I’m writing you because I would ask if you have some code for the double exponential fitting.
Just to be clear, a code that fit the series of data [x,y] with the follow model:
y(x)=a*exp(b*x) + c*exp(d*x)
To perform that fitting in Matlab is realy easy using the function “fit(X,Y,’exp2′)”, but is really difficult to find that code in C++

I will appreciate very much your help
Thanks a lot
Marco

Hi Marco,
Well, I haven’t tried it yet.
But sure I could do some research and write a code for that.
I am pretty busy at the moment, so it may take me a 2-3 days for that.

Feel free to ask anything you want to know.
I am happy to help.

Hi there,
Thanks for your comment.
I am not really sure what you mean by 2nd order exponential fitting program.
Could you please explain it to me.
Also you can maybe check out some books on Numerical Methods to learn how to go about finding the equation for the fit using the Least Square Approximation.

Dear Manas Sharma,

thanks a lot for the code reported above, was really useful for me.

I’m writing you because I would ask if you have some code for the double exponential fitting.

Just to be clear, a code that fit the series of data [x,y] with the follow model:

y(x)=a*exp(b*x) + c*exp(d*x)

To perform that fitting in Matlab is realy easy using the function “fit(X,Y,’exp2′)”, but is really difficult to find that code in C++

I will appreciate very much your help

Thanks a lot

Marco

Hi Marco,

Well, I haven’t tried it yet.

But sure I could do some research and write a code for that.

I am pretty busy at the moment, so it may take me a 2-3 days for that.

Feel free to ask anything you want to know.

I am happy to help.

Thanks!

Hi Manas,

thanks a lot for your support!

Best Regards

Marco

Hi Manas,

Thanks for the clear explanation on Exponential Fitting code.

Do you have any 2nd order exponential fitting program?

This is very useful to me

Thanks!

Hi there,

Thanks for your comment.

I am not really sure what you mean by 2nd order exponential fitting program.

Could you please explain it to me.

Also you can maybe check out some books on Numerical Methods to learn how to go about finding the equation for the fit using the Least Square Approximation.

Hi Manas,

2nd order exponential fitting is similar to Marco’s question

“ust to be clear, a code that fit the series of data [x,y] with the follow model:

y(x)=a*exp(b*x) + c*exp(d*x)”

Thank you for your help

Best Regards