diff --git a/7.c b/7.c new file mode 100644 index 0000000..230cb8e --- /dev/null +++ b/7.c @@ -0,0 +1,26 @@ +#include +#include + +#define f(x) ((352 * x * x * x) - (64 * x * x) + (198 * x) - 36) + +double simpsons_1_3(double a, double b, double n) { + double h = (b - a) / n; + + double s = f(a) + f(b); + + // Add the other heights + + for (int i = 1; i < n; i += 2) + s += 4 * f(a + i * h); + + for (int i = 2; i < n; i += 2) + s += 2 * f(a + i * h); + + return (h / 3) * s; +} + +int main() { + printf("The area under the curve f(x) = 352x^3 - 64x^2 + 198x - 36 from x=3 " + "to x=4 is %lf", + simpsons_1_3(3, 4, 10000)); +} diff --git a/8.c b/8.c new file mode 100644 index 0000000..93955e7 --- /dev/null +++ b/8.c @@ -0,0 +1,26 @@ +#include +#include + +#define f(x) ((352 * x * x * x) - (64 * x * x) + (198 * x) - 36) + +double simpsons_1_3(double a, double b, double n) { + double h = (b - a) / n; + + double s = f(a) + f(b); + + // Add the other heights + + for (int i = 1; i < n; i++) + s += 3 * f(a + i * h); + + for (int i = 3; i < n; i += 3) + s -= f(a + i * h); + + return (h / 8) * 3 * s; +} + +int main() { + printf("The area under the curve f(x) = 352x^3 - 64x^2 + 198x - 36 from x=3 " + "to x=4 is %lf", + simpsons_1_3(3, 4, 10000)); +} diff --git a/9.c b/9.c new file mode 100644 index 0000000..a0401b2 --- /dev/null +++ b/9.c @@ -0,0 +1,54 @@ +#include +#include +#include + +double **inverse(double **matrix, int order) { + double **inverse = calloc(order, sizeof(double *)); + for (int i = 0; i < order; i++) { + inverse[i] = calloc(2 * order, sizeof(double)); + inverse[i][order + i] = 1; + memcpy(inverse[i], matrix[i], order * sizeof(double)); + } + + for (int i = 0; i < order; i++) { + for (int j = 0; j < order; j++) { + if (i == j) + continue; + double r = inverse[j][i] / inverse[i][i]; + + for (int k = 0; k < order * 2; k++) + inverse[j][k] -= r * inverse[i][k]; + } + } + + for (int i = 0; i < order; i++) { + for (int j = 0; j < order; j++) + inverse[i][j + order] /= inverse[i][i]; + } + + return inverse; +} + +int main() { + const int ORDER = 3; + + double **matrix = malloc(ORDER * sizeof(double *)); + for (int i = 0; i < ORDER; i++) + matrix[i] = malloc(ORDER * sizeof(double)); + + matrix[0][0] = 92, matrix[0][1] = 4.5, matrix[0][2] = 61; // 92x + 4.5y + 61z = 0 + matrix[1][0] = -2, matrix[1][1] = 0, matrix[1][2] = 92387; // -2x + 92387z = 0 + matrix[2][0] = -2, matrix[2][1] = 0, matrix[2][2] = -23; // -2x - 23z = 0 + + double **inv = inverse(matrix, ORDER); + + for (int i = 0; i < ORDER; i++) { + for (int j = 0; j < ORDER; j++) + printf("%lf ", inv[i][j + ORDER]); + printf("\n"); + free(inv[i]); + free(matrix[i]); + } + free(inv); + free(matrix); +} diff --git a/file.org b/file.org index 21a0d0d..26bb223 100644 --- a/file.org +++ b/file.org @@ -233,3 +233,125 @@ int main() { trapezoidal_integral(3, 4, 10000)); } #+end_src + +* Program for solving numerical integration by Simpson's 1/3 rule. +#+ATTR_LATEX: :options frame=single,breaklines=true +#+begin_src C :tangle 7.c :results output :exports both :wrap src text +#include +#include + +#define f(x) ((352 * x * x * x) - (64 * x * x) + (198 * x) - 36) + +double simpsons_1_3(double a, double b, double n) { + double h = (b - a) / n; + + double s = f(a) + f(b); + + // Add the other heights + + for (int i = 1; i < n; i += 2) + s += 4 * f(a + i * h); + + for (int i = 2; i < n; i += 2) + s += 2 * f(a + i * h); + + return (h / 3) * s; +} + +int main() { + printf("The area under the curve f(x) = 352x^3 - 64x^2 + 198x - 36 from x=3 " + "to x=4 is %lf", + simpsons_1_3(3, 4, 10000)); +} +#+end_src + +#+LATEX: \clearpage +* Program for solving numerical integration by Simpson's 3/8 rule. +#+ATTR_LATEX: :options frame=single,breaklines=true +#+begin_src C :tangle 8.c :results output :exports both :wrap src text +#include +#include + +#define f(x) ((352 * x * x * x) - (64 * x * x) + (198 * x) - 36) + +double simpsons_1_3(double a, double b, double n) { + double h = (b - a) / n; + + double s = f(a) + f(b); + + // Add the other heights + + for (int i = 1; i < n; i++) + s += 3 * f(a + i * h); + + for (int i = 3; i < n; i += 3) + s -= f(a + i * h); + + return (h / 8) * 3 * s; +} + +int main() { + printf("The area under the curve f(x) = 352x^3 - 64x^2 + 198x - 36 from x=3 " + "to x=4 is %lf", + simpsons_1_3(3, 4, 10000)); +} +#+end_src + +* Program for finding inverse of linear equations using Gauss Jordan method. +#+ATTR_LATEX: :options frame=single,breaklines=true +#+begin_src C :tangle 9.c :results output :exports both :wrap src text +#include +#include +#include + +double **inverse(double **matrix, int order) { + double **inverse = calloc(order, sizeof(double *)); + for (int i = 0; i < order; i++) { + inverse[i] = calloc(2 * order, sizeof(double)); + inverse[i][order + i] = 1; + memcpy(inverse[i], matrix[i], order * sizeof(double)); + } + + for (int i = 0; i < order; i++) { + for (int j = 0; j < order; j++) { + if (i == j) + continue; + double r = inverse[j][i] / inverse[i][i]; + + for (int k = 0; k < order * 2; k++) + inverse[j][k] -= r * inverse[i][k]; + } + } + + for (int i = 0; i < order; i++) { + for (int j = 0; j < order; j++) + inverse[i][j + order] /= inverse[i][i]; + } + + return inverse; +} + +int main() { + const int ORDER = 3; + + double **matrix = malloc(ORDER * sizeof(double *)); + for (int i = 0; i < ORDER; i++) + matrix[i] = malloc(ORDER * sizeof(double)); + + matrix[0][0] = 92, matrix[0][1] = 4.5, matrix[0][2] = 61; // 92x + 4.5y + 61z = 0 + matrix[1][0] = -2, matrix[1][1] = 0, matrix[1][2] = 92387; // -2x + 92387z = 0 + matrix[2][0] = -2, matrix[2][1] = 0, matrix[2][2] = -23; // -2x - 23z = 0 + + double **inv = inverse(matrix, ORDER); + + for (int i = 0; i < ORDER; i++) { + for (int j = 0; j < ORDER; j++) + printf("%lf ", inv[i][j + ORDER]); + printf("\n"); + free(inv[i]); + free(matrix[i]); + } + free(inv); + free(matrix); +} +#+end_src diff --git a/file.pdf b/file.pdf index a8ebcfc..b30bf46 100644 Binary files a/file.pdf and b/file.pdf differ