double f(double x)
{
double E = 0.000000001, S = 1, R = 0, N, n = 0, y, Y = 1, F = 1;
//Разложение 1/sqrt(1-x) в ряд Маклорена и извлечение корня
for (int i = 1; i < 10; i++){
S += pow(x,i);
}
return sqrt(S)*(2 * x / sqrt ((1+x)*(1+x*x)));
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
cout « "Программа считает интеграл 2x/sqrt(1-x^4) с границами от 0 до 1 методом трапеции";
cout « "с точность E=10^(-9)!" « endl;
double a = 0, b = 1, 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);
const double PI = 3.14159265;
//посчитали первый интеграл для n=4
do {
//IntegPrev = integ;
n += 1;
h = (b - a) / n;
S = 0;
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
integ = h * ((f(a) + f(b)) / 2 + S);
} while (abs(PI/2 - integ) > 0.01);
cout « "\nAnswer: " « integ « endl;
getchar();
return 0;
}
Есть интеграл с границами от 0 до 1 от функции 2x/sqrt(1-x^4). Нужно посчитать с точностью E=10^(-9), как это будет выглядеть в scilab? По документации функция inttrap(...,...), но как правильно забить и как правильно точность указать?
@jcmvbkbc а что за функция R и T?
Можете дописать в код?
Вот мой код:
#include "stdafx.h"
#include
#include
#include
using namespace std;
double f(double x)
{
double E = 0.000000001, S = 1, R = 0, N, n = 0, y, Y = 1, F = 1;
for (int i = 0; i < 10; i++){
n = i + 1;
//n += 1;
//Sprev = S;
y = -(1.0/2.0) + 1 - n;
Y = Y*y;
F = F*n;
N = (pow(x,n)*pow(-1,n)*(Y))/F;
S = S + N;
}
return S*(2 * x / sqrt ((1+x)*(1+x*x)));
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
cout << "Программа считает интеграл 2x/sqrt(1-x^4) с границами от 0 до 1 методом трапеции";
cout << "с точность E=10^(-9)!" << endl;
double a = 0, b = 1, 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;
S = 0;
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.0000000001);
cout << "\nAnswer: " << integ << endl;
getchar();
return 0;
}
А как же считать тогда мне? У меня есть функция 1/sqrt(1-x), ее я разложил в ряд Тейлора и теперь мне нужно считать до стольки n-членов, чтобы остаточный член был как раз не больше моего E (он равен 10^(-9)). Как же мне делать тогда? Как определить, до какого члена считать сумму ряда Тейлора при а=0?
@kmu1990 а такой еще вопрос, как мне сделать эту функцию в с++ в функции f? s018.radikal.ru/i515/1407/a1/5fc6168324e5.png
То есть любую из двух по фотке нужно реализовать и считать члены ряда до тех пор, пока остаточный член ряда Тейлора не будет больше моего E.