Немного 2 участника. Прежде всего я пытаюсь сделать это во всем в. Прежде всего, я отправлю свою программу
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
#include <string.h>
double f(double x);
void Trap(double a, double b, int n, double* integral_p);
int main(int argc, char* argv[]) {
double integral=0.0; //Integral Result
double a=6, b=10; //Left and Right Points
int n; //Number of Trapezoids (Higher=more accurate)
int degree;
if (argc != 3) {
printf("Error: Invalid Command Line arguements, format:./trapezoid N filename");
exit(0);
}
n = atoi(argv[2]);
FILE *fp = fopen( argv[1], "r" );
# pragma omp parallel
Trap(a, b, n, &integral);
printf("With n = %d trapezoids....\n", n);
printf("of the integral from %f to %f = %.15e\n",a, b, integral);
return 0;
}
double f(double x) {
double return_val;
return_val = pow(3.0*x,5)+pow(2.5*x,4)+pow(-1.5*x,3)+pow(0*x,2)+pow(1.7*x,1)+4;
return return_val;
}
void Trap(double a, double b, int n, double* integral_p) {
double h, x, my_integral;
double local_a, local_b;
int i, local_n;
int my_rank = omp_get_thread_num();
int thread_count = omp_get_num_threads();
h = (b-a)/n;
local_n = n/thread_count;
local_a = a + my_rank*local_n*h;
local_b = local_a + local_n*h;
my_integral = (f(local_a) + f(local_b))/2.0;
for (i = 1; i <= local_n-1; i++) {
x = local_a + i*h;
my_integral += f(x);
}
my_integral = my_integral*h;
# pragma omp critical
*integral_p += my_integral;
}
Как видите, он вычисляет трапецеидальное правило с заданным интервалом.
Прежде всего, это работает, если вы жестко закодировали значения и функцию. Но мне нужно читать из файла в формате
5
3.0 2.5 -1.5 0.0 1.7 4.0
6 10
Что означает:
Степень 5 (не более 50)
3.0x ^ 5 + 2.5x ^ 4 −1.5x ^ 3 + 1.7x + 4 - это многочлен (мы пропускаем ^ 2, так как это 0)
и интервал от 6 до 10
Моя главная проблема - функция f (x), которую я жестко закодировал. У меня НЕТ ИДЕИ, как сделать так, чтобы это заняло до 50, кроме буквального ввода 50 POWS и чтения значений, чтобы увидеть, какими они могут быть ....... У кого-нибудь еще есть идеи?
Кроме того, что будет лучшим способом для чтения в файле? fgetc? Я не совсем уверен, когда дело доходит до чтения на входе C (тем более, что все, что я читаю, это INT, есть ли какой-нибудь способ их преобразовать?)