Code:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
//Declare global variables
double A, B, x=0, n1, n2;
char ch;
//Function to evaluate both of the functions
double evalf(double x){
if(ch == 'a')
return(sin((2*x)/5) - x + 1);
else
return(cos((2*x)/5) + (3*x) + 1);
}
//Function to input the number of intervals wanted for the Trapezoidal rule,
//and see if their accuracy is acceptable.
double trap_intervals(){
double accuracy=0, error=1, h, n;
while(error > accuracy){
printf("\nPlease enter the number of subintervals you would like: ");
scanf("%lf", &n);
printf("Please enter the accuracy you would like: ");
scanf("%lf", &accuracy);
h = (B-A)/n;
error = ((B-A)*(h*h)*sin(2*B/5))/75;
if(error < 0)
error = -error;
if(error > accuracy)
printf("\nSorry, you do not have enough subintervals for the level of accuracy.");
printf("\nYour error is %lf.\n", error);
}
return(n);
}
//Function to estimate the integral of the function using the Trapezoidal Rule
double trapezoid(){
double X, Y, p, h, x, sum;
h = (B-A)/n1;
X = evalf(A);
Y = evalf(B);
for(x=(A+h); x<B; x+=h){
p = evalf(x);
sum+=p;
}
return(h*((1/2)*X + sum + (1/2)*Y));
}
//Function to input the number of intervals wanted for Simpson's rule, and see
//if their accuracy is acceptable.
double simp_intervals(){
double accuracy = 0, error = 1, h, n;
while(error > accuracy){
printf("\nPlease enter the number of subintervals you would like: ");
scanf("%lf", &n);
printf("Please enter the accuracy you would like: ");
scanf("%lf", &accuracy);
h = (B-A)/n;
error = (-4*(B-A)*(h*h*h*h)*sin(2*B/5))/28125;
if(error<0)
error= -error;
if(error > accuracy)
printf("\nSorry, you do not have enough subintervals for the level of accuracy.");
printf("\nYour error is %lf.\n", error);
}
return(n);
}
//Function to estimate the integral of the function using Simpson's Rule
double simpson(){
double X, Y, x, p, q, h, sum1, sum2;
int i;
h = (B-A)/n2;
X = evalf(A);
Y = evalf(B);
for(x=A+h; x<B; x+=h){
i = 1;
if(i%2 == 0){
p = 2*evalf(x);
sum1+=p;
}
else{
q = 4*evalf(x);
sum2+=q;
}
i++;
}
return((h/3)*(X + sum1 + sum2 + Y));
}
//Main function starts here.
int main(){
double temp;
//Decide which function you wish to integrate
printf("If you want to integrate the function f(x) = sin(2x/5) - x + 1, press 'a'.");
printf("\nIf you want to integrate the function f(x) = cos(2x/5) + 3x + 1, press 'b'.\n");
scanf("%c", &ch);
//Ensure the user only picks a or b
while(ch != 'a' && ch != 'b'){
printf("\nSorry, invalid input. Please try again:\n");
scanf("%c", &ch);
}
//Tell the user which function will be integrated
if(ch == 'a')
printf("\nThe function we are integrating is f(x) = sin(2x/5) - x + 1.\n");
else
printf("\nThe function we are integrating is f(x) = cos(2x/5) + 3x + 1.\n");
//Choose the intervals, swap A and B if A is greater than B
printf("Please enter the values of the interval [A,B].\nA: ");
scanf("%lf", &A);
printf("\nB: ");
scanf("%lf", &B);
if(A>B){
printf("\nA is larger than B. Swapping values now...");
B = temp;
A = B;
temp = A;
temp = 0;
}
//Pick intervals for Trapezoidal Rule
printf("\nWe must now enter the number of intervals for the trapezoidal rule.");
n1 = trap_intervals();
//Pick intervals for Simpson's Rule
printf("\nWe must now enter the number of intervals for Simpsons rule.");
n2 = simp_intervals();
//Estimate the value of the integration using the Trapezoidal Rule
temp = trapezoid();
printf("\nThe value of integration using the trapezoidal rule is %lf.", temp);
temp = 0;
//Estimate the value of the integration using Simpson's Rule
temp = simpson();
printf("\nThe value of integration using Simpson's rule is %lf.", temp);
//End program
printf("\n\nPress any key to finish...");
getch();
}