next up previous contents
Next: Параллелизация правила трапеции Up: Интерфейс передачи сообщений MPI Previous: Функции передачи сообщений MPI_Send()   Contents

Пример приложения с обменом сообщениями

В качестве примера рассматривается программа вычисления определенного интеграла по правилу трапеции. Последовательный вариант вычисляет $\int _{b}^{a}f(x)dx$ разделением интервала $\left[a,b\right]$ на $n$ равных сегментов и суммированием частных оценок интеграла для каждого сегмента по формуле:


\begin{displaymath}
h\left[f(x_{0})/2+f(x_{n})/2+\Sigma _{i=1}^{n-1}f(x_{i})\right]\end{displaymath}

Здесь $h=(b-a/n)$, и $x_{i}=a+ih,$ где i = 0, 1, ..., n. Если поместить вычисление $f(x)$ в отдельную функцию, то последовательный вариант программы выглядит так:

#include <stdio.h>

float f(float x) {

  float return_val;

  /* Вычисляет f(x).

    Запоминает результат в return_val. */

  . . .

  return return_val;

} /* f */

 

main() {

  float integral; /* Результат вычисления */

  float a, b; /* Левая и правая границы */

  int n; /* Количество интервалов */

  float h; /* Ширина интервала */

  float x;

  int i;

  printf(''Введите a, b, и n\n''); 

  scanf(''%f %f %d'', &a, &b, &n);

  h = (b-a)/n;

  integral = (f(a) + f(b))/2.0;

  x = a;

  for (i = 1; i <= n-1; i++) {

    x += h;

    integral += f(x);

  }

  integral *= h;

  printf(''C n = %d трапециями, интеграл \n'', n);

  printf("от %f до %f = %f`\n'', a, b, integral);

} /* main */



Subsections

2004-06-22