I need help making a C program that uses Linear Least-Squares Fit to carry out t
ID: 3688556 • Letter: I
Question
I need help making a C program that uses Linear Least-Squares Fit to carry out the following:
Linear Least-Squares is an attempt to find a straight line that best represents a set of data points. It is a very common problem in modeling and statistics - you have a large set of observed data points, and you want to be able to describe it with a single line that "fits" the data as well as possible. You are given data consisting of N ordered pairs (x_i, V_j) with 1 lessthanorequalto i lessthanorequalto N. One measure of the "best fit" line to this dataset is the line that minimizes the sum of the square of the residues to the model y = mx + b. The residue at each point is given by: r_i (mx_i + b) - y_i The parameters of the model m and b are determined by minimizing the quantity: S^2 sigma^N_i=1 r_i The resulting model parameters m and b are given by the formulas: m = - / - ^2; b = - / - ^2 Where the angle-bracket expressions represent the mean (average) of the quantity enclosed: = 1/N sigma^n_i=1 f(x_i,y_i) Write a program that carries out the following: 1. Data Entry Step: reads N ordered pairs of data (x_iV_j) into a pair of arrays x and y. Query the user for a value for N in advance: N will not be greater than 100. 2. Analysis Step: using the obtained data and the formulas above, calculates the parameters m and b of the least-squares fit to the data and prints those values to the screen in an appropriate way. 3. Predictive Step: reads in a series of x values (number not known in advance, but no more than 100 values) until the user enters the sentinel value -100000. Then prints out a table of values for the least-fit line y=mx+b m two tab-separated columns labeled x and y.Explanation / Answer
Code:
#include<stdio.h>
#include<math.h>
#include<conio.h>
int main()
{
int x[30],X=0,xx=0,xy=0,y[30],Y=0,n,
bnum,bden,mnum,mden,a[30],N,Yn;
float b=0.0,m=0.0;
int i=0,sent=0;
printf("Enter the number of ordered pairs ");
scanf("%d",&n);
printf("Enter the ordered pairs ");
for(i=0;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
printf(" ");
}
printf("The ordered pairs are ");
for(i=0;i<n;i++)
{
printf("%2d%2d",x[i],y[i]);
printf(" ");
}
//Sum of values in x array
for(i=0;i<n;i++)
{
X=X+x[i];
}
//Sum of square of values in x array
for(i=0;i<n;i++)
{
xx=xx+x[i]*x[i];
}
//Sum of product of values of x and y array
for(i=0;i<n;i++)
{
xy=xy+x[i]*y[i];
}
//Sum of values in y array
for(i=0;i<n;i++)
{
Y=Y+y[i];
}
bnum=(xx*Y)-(X*xy);
bden=(n*xx)-(X*X);
// y intercept
b=bnum/bden;
printf("The Y intercept b = %.2f ",b);
mnum=(n*xy)-(X*Y);
mden=bden;
//slope
m=mnum/mden;
printf("The slope m = %.2f ",m);
i=0;
// reading set of x values
while(sent!=100000)
{
printf("Enter the x values ");
scanf("%d",&a[i]);
i=i++;
printf("If need to stop enter 100000 or if need to continue enter any number ");
scanf("%d",&sent);
}
N=i;
printf("x Y ");
for(i=0;i<N;i++)
{
Yn=(m*a[i])+b;
printf("%3d%3d ",a[i],Yn);
}
getch();
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.