#c
#c
Вопрос:
Пожалуйста, потерпите меня, поскольку я новичок в кодировании. Я пытаюсь приблизить интеграл 4 / (1 x ^ 2) от 0 до 1, используя C . Я должен использовать формулу: P = 1 / n [сумма от i до n-1: f (x)] с x = (i 0,5) / n и i равно 0, 1, 2, 3…. n-1. В частности, я борюсь с написанием части кода для добавления f (x) для каждого значения x и i. Это можно увидеть в цикле for в нижней части кода. Я продолжаю вычислять значение 0, но этот интеграл должен приближаться к pi. Заранее благодарю вас. Ниже приведен мой код.
// Definite Integral using Quadrature Method
// As N increases, P approaches pi.
#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
double func(double x)
{
double func = 4 /(1 x*x); // define function func = 4 / (1 x^2) to be integrated
return func;
}
int main(int argc, char **argv) {
if (argc < 2) {
std::cout << argv[0] << "n";
return 0;
}
int n = std::atoi(argv[1]); // n is number of subintervals
std::cout << "n=" << n << std::endl;
std::cout << std::setprecision(16);
// P = (1/n)*[sum func((i 0.5)/n] with i = 0,1,2,3,... N-1
int i;
double s, x;
for ( i=0; i<=(n-1); i )
{
x = (i 0.5) / n;
s = func(x);
x = x;
s = s;
}
double P = (1/n)*s;
cout<< P;
return 0;
}
Комментарии:
1.
1/n
: целочисленное деление, равное 0. Более того, сумма не инициализируется
Ответ №1:
В вашем коде есть 2 проблемы. В вашем цикле, который вычисляет сумму, вы не инициализируете s
. Кроме того, вы сбрасываете s
другое значение каждый раз, когда выполняете итерацию, поэтому сумма добавляется неправильно.
Вы можете написать цикл следующим образом:
double s = 0;
for ( i=0; i<=(n-1); i )
{
double x = (i 0.5) / n;
s = func(x);
}
Во-вторых, это вычисление, 1/n
когда вы вычисляете P
, неверно. Это будет выполнять целочисленное деление, и вы получите, 0
когда n
больше 1
. Вместо этого вам нужно сделать 1./n
. Вы также могли бы просто сделать:
double P = s/n;
Вот демонстрация.