Написать sqrt через ряды Тейлора с++

491
11 ноября 2017, 13:34

Добрый день! Помогите, пожалуйста реализовать функцию квадратного корня из числа через ряд Тейлора на с++: Вот некоторые похожие рабочие функции

    double f_sin(double var)
{
    double q,sum=0;
    int n;
    q=var;
    for(n=1;n <= 100;n++){///синус через ряды
    sum+=q;
    q*=(-1)*var*var/(2*n)/(2*n+1);
}
return sum;
}
double f_cos(double var)
{
double q,sum=1;
int n;
q=var;
q*=(-1)*var/2;
sum+=q;
for(n=2;n <= 100;n++){///косинус через ряды тейлора
    q*=(-1)*var*var/(2*n)/(2*n-1);
    sum+=q;
}
return sum;
}
double f_sqrt(double var)
{
/*var--;
double q=-1, sum=1;
for(int n=1; n<=100; n++){
    q*=(-1)*var/2; /// не работает
    sum+=q;
}*/
return sum;
}

Answer 1

Сделал исправления в f_sqrt функцию закоментированную, код без рекурсии, только этот ряд работает для x из [0,2], для больших значений ряд расходится. Ошибка у автора была в том, что он полагал что в знаменателе просто степени двойки, а там значительно более сложное выражение и в числителе и знаменателе. Вот что получилось, можно запустить онлайн:

#include <cmath>
#include <iostream>
using namespace std;
double f_sqrt(double var)
{
    var -= 1;
    double q = 1, sum = 1;
    for(int n=1; n <= 100; n++){
        q *= (-1.0) * (2 * n - 1) * 2 * n * var / (n * n * 4);
        sum += q / (1.0 - 2 * n);
    }
    return sum;
}
int main() {
    double x = 1.5;
    cout << f_sqrt(x) << endl;
    cout << sqrt(x) << endl;
    return 0;
}
Answer 2

Попробуйте такой вариант может. но и ваш вроде как должен работать, непонятно почему не срабатывает

double f_sqrt(double var, float eps) {
    //eps - точность, при достижении которой останавливаемся
    double sum = 0, tmp = 0;
    int n = 0;
    while(tmp > eps) {
       tmp = (pow(-1, n) * fact(2 * n))/((1 - 2 * n) * pow(fact(n), 2) * pow(4, n)) * pow(var, n);
       sum += tmp;
       n++;
    }
    return sum;
}
int fact(int n)
{
if(N < 0)
    return 0;
if (N == 0)
    return 1; 
else
    return N * fact(N - 1);
}
READ ALSO
Как сделать генератор даты на c++ [требует правки]

Как сделать генератор даты на c++ [требует правки]

Числа будут в комбобоксах и нужно чтобы допустим если месяц такой то то дней в этом месяце столько тоже самое про год

235
Не могу понять,почему выдает ошибку?

Не могу понять,почему выдает ошибку?

Добрый деньРешаю задачи на с++, но не могу дорешать из-за некоторых ошибок:"multiple definition of 'main' " Помогите справиться с этим,пожалуйста

264