Can someone please help me add comments to this existing C++ program? http://www
ID: 3839998 • Letter: C
Question
Can someone please help me add comments to this existing C++ program?
http://www.bragitoff.com/2015/09/c-program-for-polynomial-fit-least-squares/
Follow the link.
Please include //** before and after all comments.
You do not need to write any code. Just document this program.
Put these comments in the correct area of the program:
Declare Variables, Input Area, Polynomial Calculation, and Output Area.
The link does not contain any code written by me. Credit goes to the author that is listed on the link.
Explanation / Answer
Hi Below is your code: -
The code was already commented at many parts. I have added the commented wherever it was missed.
//Polynomial Fit
//** Including the header files for I/O operation and Math operations
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
//** Method to run the program
int main()
{
//** Declare Variables
int i,j,k,n,N;
cout.precision(4); //set precision
cout.setf(ios::fixed);
cout<<" Enter the no. of data pairs to be entered: "; //To find the size of arrays that will store x,y, and z values
//** Input the number of data pairs to be entered
cin>>N;
//** Declare Arrays to hold x and y values
double x[N],y[N];
//** Input of X-Y coordinates
cout<<" Enter the x-axis values: "; //Input x-values
for (i=0;i<N;i++)
cin>>x[i];
cout<<" Enter the y-axis values: "; //Input y-values
for (i=0;i<N;i++)
cin>>y[i];
cout<<" What degree of Polynomial do you want to use for the fit? ";
cin>>n; // n is the degree of Polynomial
double X[2*n+1]; //Array that will store the values of sigma(xi),sigma(xi^2),sigma(xi^3)....sigma(xi^2n)
//** Polynomial Calculation
for (i=0;i<2*n+1;i++)
{
X[i]=0;
for (j=0;j<N;j++)
X[i]=X[i]+pow(x[j],i); //consecutive positions of the array will store N,sigma(xi),sigma(xi^2),sigma(xi^3)....sigma(xi^2n)
}
double B[n+1][n+2],a[n+1]; //B is the Normal matrix(augmented) that will store the equations, 'a' is for value of the final coefficients
for (i=0;i<=n;i++)
for (j=0;j<=n;j++)
B[i][j]=X[i+j]; //Build the Normal matrix by storing the corresponding coefficients at the right positions except the last column of the matrix
double Y[n+1]; //Array to store the values of sigma(yi),sigma(xi*yi),sigma(xi^2*yi)...sigma(xi^n*yi)
for (i=0;i<n+1;i++)
{
Y[i]=0;
for (j=0;j<N;j++)
Y[i]=Y[i]+pow(x[j],i)*y[j]; //consecutive positions will store sigma(yi),sigma(xi*yi),sigma(xi^2*yi)...sigma(xi^n*yi)
}
for (i=0;i<=n;i++)
B[i][n+1]=Y[i]; //load the values of Y as the last column of B(Normal Matrix but augmented)
n=n+1; //n is made n+1 because the Gaussian Elimination part below was for n equations, but here n is the degree of polynomial and for n degree we get n+1 equations
cout<<" The Normal(Augmented Matrix) is as follows: ";
for (i=0;i<n;i++) //print the Normal-augmented matrix
{
for (j=0;j<=n;j++)
cout<<B[i][j]<<setw(16);
cout<<" ";
}
for (i=0;i<n;i++) //From now Gaussian Elimination starts(can be ignored) to solve the set of linear equations (Pivotisation)
for (k=i+1;k<n;k++)
if (B[i][i]<B[k][i])
for (j=0;j<=n;j++)
{
double temp=B[i][j];
B[i][j]=B[k][j];
B[k][j]=temp;
}
for (i=0;i<n-1;i++) //loop to perform the gauss elimination
for (k=i+1;k<n;k++)
{
double t=B[k][i]/B[i][i];
for (j=0;j<=n;j++)
B[k][j]=B[k][j]-t*B[i][j]; //make the elements below the pivot elements equal to zero or elimnate the variables
}
for (i=n-1;i>=0;i--) //back-substitution
{ //x is an array whose values correspond to the values of x,y,z..
a[i]=B[i][n]; //make the variable to be calculated equal to the rhs of the last equation
for (j=0;j<n;j++)
if (j!=i) //then subtract all the lhs values except the coefficient of the variable whose value is being calculated
a[i]=a[i]-B[i][j]*a[j];
a[i]=a[i]/B[i][i]; //now finally divide the rhs by the coefficient of the variable to be calculated
}
//** Output Array as well as curve and coefficients of the curve fitting equation
cout<<" The values of the coefficients are as follows: ";
for (i=0;i<n;i++)
cout<<"x^"<<i<<"="<<a[i]<<endl; // Print the values of x^0,x^1,x^2,x^3,....
//** Output curve equation
cout<<" Hence the fitted Polynomial is given by: y=";
for (i=0;i<n;i++)
cout<<" + ("<<a[i]<<")"<<"x^"<<i;
cout<<" ";
return 0;
}//output attached as .jpg