Develop a C-code to meet the requirements below: 1)Find the solution of the diff
ID: 3708421 • Letter: D
Question
Develop a C-code to meet the requirements below:
1)Find the solution of the differential equation below by using Euler’s method.
The range of x is 2 to 3.dy/dx =x^2 -3x with y=3 at x=2
2)Find the appropriate step size for this specific problem.
3)Print all the y values within the range of x=2 to x=3.
4)Solve the differential equation analytically and compare with the Euler’s method
5)Obtain a linear regression y=ax+band show the r^2 value
Your C-code must contain the following features: (1) use of arrays, (2) use of pointers, (3) use of structure, (4) use of union, (5) use of functions and function calls, (6) formatted output on screen and (7) saving of the same output on a file.
This is the code I have until now; however, I am getting errors in it. If you could help me sort it out, that'd be great:
#include<stdio.h>
#include<conio.h>
#include <math.h>
double sum(double [], double [], int n);
double r(double [], double [], int , double , double );
float func(float ,float );
float euler(float ,float ,float ,int );
int main(){
double x[]={2,3};
double y[]={3};
double one[]={1,1};
float xn,yo,e;
int n=2;
double x0=2;
double sumx, sumy,sumxx,sumxy;
double a,b;
sumx=sum(x,one,n);
sumy=sum(y,one,n);
sumxx=sum(x,x,n);
sumxy=sum(x,y,n);
a=(n*sumxy-sumx*sumy)/(n*sumxx-sumx*sumx);
b=(sumy*sumxx-sumx*sumxy)/(n*sumxx-sumx*sumx);
printf(" By linear regression, the function is: y=%fx+%f ",a,b);
printf(" When x= %f, y= %f ",x0,a*x0+b);
printf(" r = %f ",r(x,y,n,a,b));
return 0;
}
double sum(double x[],double y[], int n){
double s=0.0;int i=0;
for (i=0;i<n;i++)
s=s+x[i]*y[i];
return s;
}
double r(double x[],double y[], int n, double a, double b){
double s0=0,s=0,ybar=0,total=0;
int i=0;
for (i=0;i<n;i++){
total+=y[i];
}
ybar=total/n;
for (i=0;i<n;i++){
s0+=pow((y[i]-ybar),2);
s+=pow((y[i]-b-a*x[i]),2);
}
return pow((s0-s)/s0,0.5);
}
printf(" inputn: ");
scanf("%d",&n);
printf("input x0:");
scanf("%f",&x0);
printf("input xn:");
scanf("%f",&xn);
printf("input y0: ");
scanf("%f",&y0);
e=euler(x0,xn,y0,n);
}
}
float func(float x,float y){
return ((x*x)-(3*x));
}
float euler(float x0,float xn,float y0,int n){
float x,y,h;
int i;
x=x0;
y=y0;
h=(xn-x0)/n;
printf("y(%f)=%6.4f ",x0,y0);
for(i=1;i<=n;i++) {y=y+h*func(x,y);
x=x0+i*h;
printf("y(%f)=%6.4f ",x,y);
}
return y;
}
Explanation / Answer
#include<stdio.h>
float func(float x,float y);
float euler(float x0,float xn,float y0,int n);
int main(){
float x0,xn,y0,e;
int n;
printf(" inputn: ");
scanf("%d",&n);
printf("input x0: ");
scanf("%f",&x0);
printf("input xn: ");
scanf("%f",&xn);
printf("input y0: ");
scanf("%f",&y0);
e=euler(x0,xn,y0,n);
}
float func(float x,float y){
return ((x*x)-(3*x));
}
float euler(float x0,float xn,float y0,int n){
float x,y,h;
int i;
x=x0;
y=y0;
h=(xn-x0)/n;
printf("y(%f)=%6.4f ",x0,y0);
for(i=1;i<=n;i++) {y=y+h*func(x,y);
x=x0+i*h;
printf("y(%f)=%6.4f ",x,y);}
return y;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.