Вычисление функции c помощью ряда Тейлора

254
29 декабря 2017, 00:58

Вещественная функция может быть представлена рядом Тейлора, радиус сходимости которого определяется положением особых точек функции. Любой конечный отрезок ряда Тейлора является полиномом, поэтому может быть вычислен с использованием операций сложения и умножения.

Программа вычисляет функцию ln(1-x). Помогите пожалуйста переделать вычисления в коде для функции exp(x^2).

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// this function is calculating the power of x
double powX(double x, int i)
{
    switch (i)
    {
        case 0:
            return 1;
        case 1:
            return x;
        default:
            return x * powX(x, i - 1);
    }
}
// this function is calculating the value of a member of the serie
double membValCalc(double x, int i)
{
    return -1 * (powX(x, i) / i);
}
int main()
{
    /* acc = accuracy; result = aproximated value; et_result = contain library value;
       aprDiff = is the difference between library's value and the result of this program's work */
    double x, acc, result, membVal, et_result, aprDiff, achievedAcc;
    int i, j = 0,
           n; // n - is the maximal member of serie in the calculation
    printf("This program will calculate function ln(1-x).\n");
    printf("Please, enter x value between -1.0 and 1.0 as 'double' type: ");
    scanf("%lf", &x);
    // Area of definition of this function; if x not belong to this area, the program will be closed
    if ((x < -0.9999999) || (x > 0.9999999))
    {
        printf("Error: x must be the value between -1 and 1.\n");
        return -1;
    }
    printf("Please, enter n value as 'integer' type: ");
    scanf("%d", &n);
    printf("Enter accuracy of calculation as 'double' type: ");
    scanf("%lf", &acc);
    if (acc < 0)
    {
        printf("Error: accuracy is negative number.");
        return -1;
    }
    result = 0.0;
    // This for loop is calculating each member of the serie and increase the result variable by this value
    for (i = 1; i <= n; i++)
    {
        membVal = membValCalc(x, i);
        j = i;
        if ((membVal > 0) && (membVal <= acc))
        {
            j = i - 1;
            break;
        }
        else if ((membVal < 0) && ((membVal * -1) <= acc))
        {
            j = i - 1;
            break;
        }
        else
        {
            result += membVal;
        }
    }
    et_result = log(1 - x);
    if ((result >= 0) && (et_result >= 0))
    {
        aprDiff = result - et_result;
    }
    else if ((result < 0) && (et_result < 0))
    {
        aprDiff = (result * -1) - (et_result * -1);
    }
    else
    {
        aprDiff = result + et_result;
    }
    achievedAcc = membValCalc(x, j);
    if (aprDiff < 0)
    {
        aprDiff *= -1;
    }
    if (achievedAcc < 0)
    {
        achievedAcc *= -1;
    }
    printf("Total quantity of calculated members of the serie: %d\n", j);
    printf("The achieved accuracy of calculation is %f\n", achievedAcc);
    printf("The result log(1-x) is: %lf\n", result);
    printf("Using the Math.h library we could get the result log = %lf\n",
           et_result);
    printf("The difference between calculated approximation and library's value: %lf",
           aprDiff);
    return 0;
}
Answer 1

Вобщем, вставьте, где там вам нужно - вот функция, которая считает exp(x^2) с точностью eps разложением в ряд Тейлора:

double expx2(double x, double eps)
{
    double sum = 1.0, term = 1.0;
    x = x*x;
    for(int n = 1; term > eps; ++n)
    {
        sum += term *= x/n;
    }
    return sum;
}
READ ALSO
Перегрузка оператора &ldquo;-&rdquo;

Перегрузка оператора “-”

ЗдравствуйтеЗадача: создать класс символьной строки и несколько объектов разработанного класса (a,b,c)

217
Ошибка в JOGL при инициализации GLProfile

Ошибка в JOGL при инициализации GLProfile

Запускаю приложение JOGL в NetBeans 81, в методе main одна строчка:

228
Hibernate, вопрос про Join&#39;ы

Hibernate, вопрос про Join'ы

Все никак не могу понять логику того, как JoinColumn определяет какую колонку с какой надо связать

251
Не делается запрос в базу SQLite

Не делается запрос в базу SQLite

ЗдравствуйтеВ проекте было много текста (bb

279