Почему программа зацикливается? Вроде все верно. Считается интеграл методом трапеции с точностью E=10^(-9).
#include "stdafx.h"
#include
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
double a = 0, b = 0.9, n = 4, S = 0, h, integ, IntegPrev;
h = (b - a) / n;
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
integ = h * ((f(a) + f(b)) / 2 + S);
//посчитали первый интеграл для n=4
do {
IntegPrev = integ;
n += 1;
h = (b - a) / n;
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
integ = h * ((f(a) + f(b)) / 2 + S);
} while (abs(IntegPrev - integ) > 0,000000001);
cout <<"qq" << integ;
getchar();
return 0;
}
while (abs(IntegPrev - integ) > 0,000000001);
Запятая вместо точки справа от знака "больше". Нужно написать while (abs(IntegPrev - integ) > 0.000000001);
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
Может быть ошибка, что выполняется всего 3 раза, а n=4. Возможно, нужно указать, что i=0 в инициализации массива.
Уже подзабыл этот метод трапеции, но мне кажется, там делается одним циклом, вот этот цикл for не сильно нужен. Если я правильно помню, вся фигура разбивается на ряд трапеций и находится их сумма, а трапеция - это прямоугольник и прямоугольный треугольник. А вы как-то странно считаете, похоже, отдельно сумму всех прямоугольников, и прибавляете один треугольник, и так несколько раз в цикле do при разных n.
Про те ошибки я понял, я спрашивал, нет ли здесь логической ошибки? Ответ совпадает с расчётным значением?
Scilab я разочек запускал много лет назад. Совсем чуть-чуть в Matlab работал. Вот в MathCAD я много работал в своё время в институте и в аспирантуре.