#include <stdio.h>
#include <math.h>
#include <mpi.h>
double function(double x) {
return sin(x
); // change this to the desired function }
int main(int argc, char *argv[]) {
int i, n, rank, size, local_n;
double a, b, h, x, sum = 0.0, local_sum = 0.0, total_sum = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0) {
printf("Enter the lower limit (a): "); printf("Enter the upper limit (b): "); printf("Enter the number of intervals (n): "); }
MPI_Bcast(&a, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Bcast(&b, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
h = (b - a) / n;
local_n = n / size;
for (i = 0; i < local_n; i++) {
x = a + (rank * local_n + i + 0.5) * h;
local_sum += function(x);
}
local_sum *= h;
MPI_Reduce(&local_sum, &total_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("The value of the integral is: %.6f\n", total_sum
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxtcGkuaD4KCmRvdWJsZSBmdW5jdGlvbihkb3VibGUgeCkgewogIHJldHVybiBzaW4oeCk7ICAvLyBjaGFuZ2UgdGhpcyB0byB0aGUgZGVzaXJlZCBmdW5jdGlvbgp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgaW50IGksIG4sIHJhbmssIHNpemUsIGxvY2FsX247CiAgZG91YmxlIGEsIGIsIGgsIHgsIHN1bSA9IDAuMCwgbG9jYWxfc3VtID0gMC4wLCB0b3RhbF9zdW0gPSAwLjA7CgogIE1QSV9Jbml0KCZhcmdjLCAmYXJndik7CiAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwogIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKCiAgaWYgKHJhbmsgPT0gMCkgewogICAgcHJpbnRmKCJFbnRlciB0aGUgbG93ZXIgbGltaXQgKGEpOiAiKTsKICAgIHNjYW5mKCIlbGYiLCAmYSk7CiAgICBwcmludGYoIkVudGVyIHRoZSB1cHBlciBsaW1pdCAoYik6ICIpOwogICAgc2NhbmYoIiVsZiIsICZiKTsKICAgIHByaW50ZigiRW50ZXIgdGhlIG51bWJlciBvZiBpbnRlcnZhbHMgKG4pOiAiKTsKICAgIHNjYW5mKCIlZCIsICZuKTsKICB9CgogIE1QSV9CY2FzdCgmYSwgMSwgTVBJX0RPVUJMRSwgMCwgTVBJX0NPTU1fV09STEQpOwogIE1QSV9CY2FzdCgmYiwgMSwgTVBJX0RPVUJMRSwgMCwgTVBJX0NPTU1fV09STEQpOwogIE1QSV9CY2FzdCgmbiwgMSwgTVBJX0lOVCwgMCwgTVBJX0NPTU1fV09STEQpOwoKICBoID0gKGIgLSBhKSAvIG47CiAgbG9jYWxfbiA9IG4gLyBzaXplOwoKICBmb3IgKGkgPSAwOyBpIDwgbG9jYWxfbjsgaSsrKSB7CiAgICB4ID0gYSArIChyYW5rICogbG9jYWxfbiArIGkgKyAwLjUpICogaDsKICAgIGxvY2FsX3N1bSArPSBmdW5jdGlvbih4KTsKICB9CiAgbG9jYWxfc3VtICo9IGg7CgogIE1QSV9SZWR1Y2UoJmxvY2FsX3N1bSwgJnRvdGFsX3N1bSwgMSwgTVBJX0RPVUJMRSwgTVBJX1NVTSwgMCwgTVBJX0NPTU1fV09STEQpOwoKICBpZiAocmFuayA9PSAwKSB7CiAgICBwcmludGYoIlRoZSB2YWx1ZSBvZiB0aGUgaW50ZWdyYWwgaXM6ICUuNmZcbiIsIHRvdGFsX3N1bSk7CiAgfQoKICBNUElfRmluYWxpemUoKTsKICByZXR1cm4gMDsKfQo=