Вычисление значений рядных функций

168
14 апреля 2019, 06:00

Здравствуйте! Мне был дан для вычисления такой ряд, я написала программу, однако преподаватель потребовал сделать ее без рекурсии для факториала и степени -1, так как неэффективно используется память. Нужно использовать частное от последующего и предыдущего члена суммы (Zn - Zn+1) и для остановки счета рядов необходимо использовать следующее условие: |F(xn )| < eps, но я не понимаю, как это воплотить в программу, очень прошу вашей помощи!

    #include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;
double MyCos(double, double);
double fact(int);
int OneP(int);
int main()
{
    setlocale(LC_ALL, "ru");
    double eps, d, x, x_start, x_end, dx, x_ideal;// невязка, погрешность - остановка расчета, начальный х, конечный х, 
    //шаг вычисления, х для вычисления значений различной точностью
    while (true)
    {
        cout << "Введите точность эпсилон: ";
        cin >> eps;
        if (eps <= 0)
        {
            cout << "Точность должна быть вещественным положительным числом" << endl;
            system("pause");
            return 0;
        }
        cout << "Введите начальный x_start: ";
        cin >> x_start;
        x = x_start;
        cout << "Введите конечный x_end: ";
        cin >> x_end;
        cout << "Введите интервал delta_x: ";
        cin >> dx;
        if (dx <= 0 || eps < 0)
        {
            cout << "Введите верные данные" << endl;
            system("pause");
            system("cls");
        }
        else if (x_start >= x_end)
        {
            printf(" ______________ ___________________ ____________________ ______________ \n");
            printf("|_______x______|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
            printf("|              |                   |                    |              |\n");
            x <= x_end + pow(10, -15);////////------
            double MC = MyCos(x, eps) * MyCos(x, eps);
            double XD = x * cos(3 * x) * x * cos(3 * x);
            d = sqrt(fabs(MC - XD));////////////////////////////////////////////////////////
            printf("|  %10.6f  |  %15.10f  | %15.10f    |   %f   |\n", x, MyCos(x, eps), x*cos(3 * x), d);

            printf("|______________|___________________|____________________|______________|\n");
            break;
        }
        else
        {
            printf(" ______________ ___________________ ____________________ ______________ \n");
            printf("|_______x______|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
            printf("|              |                   |                    |              |\n");
            for (x; x <= x_end + pow(10, -15); x = x + dx)//шаг.
            {
                double MC = MyCos(x, eps) * MyCos(x, eps);
                double XD = x * cos(3 * x) * x * cos(3 * x);
                d = sqrt(fabs(MC - XD));
                //d = sqrt(fabs(MyCos(x, eps) - x * cos(3 * x)));///////////////////////////////////////////////////
                printf("|  %10.6f  |  %15.10f  | %15.10f    |   %f   |\n", x, MyCos(x, eps), x*cos(3 * x), d);
            }
            printf("|______________|___________________|____________________|______________|\n");
            break;
        }
    }
    cout << "Введите x_ideal" << endl;
    cin >> x_ideal;
    printf(" _____________ ___________________ ____________________ ______________ \n");
    printf("|______eps____|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
    printf("|             |                   |                    |              |\n");
    for (int i = 1; i <= 7; i++)
    {
        double e = pow(0.1, i);
        double MC = MyCos(x_ideal, e) * MyCos(x_ideal, e);
        double XD = x_ideal * cos(3 * x_ideal) * x_ideal * cos(3 * x_ideal);
        //d = sqrt(fabs(MyCos(x_ideal, e) - x_ideal * cos(3 * x_ideal)));
        //while (fabsl(MyCos - (x_ideal * cos(3 * x_ideal))) >= eps);
        d = sqrt(fabs(MC - XD));
        printf("|  %9.7f  |  %15.10f  | %15.10f    |   %f   |\n", e, MyCos(x_ideal, e), x_ideal*cos(3 * x_ideal), d);
    }
    printf("|_____________|___________________|____________________|______________|\n");
    system("pause");
    return 0;
}

int OneP(int q)
{
    int a = -1;
    for (int w = 0; w < q; w++)
    {
        a = (-1) * a;
    }
    return a;
}

double fact(int n)
{
    if (n == 0)
    {
        return 1;
    }
    if (n > 0)
    {
        return n * fact(n - 1);
    }
}

double MyCos(double x, double eps)
{
    double sum = 0, a;
    for (int k = 0; fabs(OneP(k + 1) * pow(3, 2 * k) * pow(x, 2 * k + 1) / fact(2 * k) + OneP(k) * pow(3, 2 * k + 2) * pow(x, 2 * k + 3) / fact(2 * k + 2)) > eps; k++)
    {
        a = OneP(k + 1) * pow(3, 2 * k) * pow(x, 2 * k + 1) / fact(2 * k);
        sum = sum + a;
    }
    return sum;
}`#include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;
double MyCos(double, double);
double fact(int);
int OneP(int);
int main()
{
    setlocale(LC_ALL, "ru");
    double eps, d, x, x_start, x_end, dx, x_ideal;// невязка, погрешность - остановка расчета, начальный х, конечный х, 
    //шаг вычисления, х для вычисления значений различной точностью
    while (true)
    {
        cout << "Введите точность эпсилон: ";
        cin >> eps;
        if (eps <= 0)
        {
            cout << "Точность должна быть вещественным положительным числом" << endl;
            system("pause");
            return 0;
        }
        cout << "Введите начальный x_start: ";
        cin >> x_start;
        x = x_start;
        cout << "Введите конечный x_end: ";
        cin >> x_end;
        cout << "Введите интервал delta_x: ";
        cin >> dx;
        if (dx <= 0 || eps < 0)
        {
            cout << "Введите верные данные" << endl;
            system("pause");
            system("cls");
        }
        else if (x_start >= x_end)
        {
            printf(" ______________ ___________________ ____________________ ______________ \n");
            printf("|_______x______|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
            printf("|              |                   |                    |              |\n");
            x <= x_end + pow(10, -15);////////------
            double MC = MyCos(x, eps) * MyCos(x, eps);
            double XD = x * cos(3 * x) * x * cos(3 * x);
            d = sqrt(fabs(MC - XD));////////////////////////////////////////////////////////
            printf("|  %10.6f  |  %15.10f  | %15.10f    |   %f   |\n", x, MyCos(x, eps), x*cos(3 * x), d);

            printf("|______________|___________________|____________________|______________|\n");
            break;
        }
        else
        {
            printf(" ______________ ___________________ ____________________ ______________ \n");
            printf("|_______x______|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
            printf("|              |                   |                    |              |\n");
            for (x; x <= x_end + pow(10, -15); x = x + dx)//шаг.
            {
                double MC = MyCos(x, eps) * MyCos(x, eps);
                double XD = x * cos(3 * x) * x * cos(3 * x);
                d = sqrt(fabs(MC - XD));
                //d = sqrt(fabs(MyCos(x, eps) - x * cos(3 * x)));///////////////////////////////////////////////////
                printf("|  %10.6f  |  %15.10f  | %15.10f    |   %f   |\n", x, MyCos(x, eps), x*cos(3 * x), d);
            }
            printf("|______________|___________________|____________________|______________|\n");
            break;
        }
    }
    cout << "Введите x_ideal" << endl;
    cin >> x_ideal;
    printf(" _____________ ___________________ ____________________ ______________ \n");
    printf("|______eps____|___MyFunction(x)___|_____x*cos(3*x)_____|_______d______|\n");
    printf("|             |                   |                    |              |\n");
    for (int i = 1; i <= 7; i++)
    {
        double e = pow(0.1, i);
        double MC = MyCos(x_ideal, e) * MyCos(x_ideal, e);
        double XD = x_ideal * cos(3 * x_ideal) * x_ideal * cos(3 * x_ideal);
        //d = sqrt(fabs(MyCos(x_ideal, e) - x_ideal * cos(3 * x_ideal)));
        //while (fabsl(MyCos - (x_ideal * cos(3 * x_ideal))) >= eps);
        d = sqrt(fabs(MC - XD));
        printf("|  %9.7f  |  %15.10f  | %15.10f    |   %f   |\n", e, MyCos(x_ideal, e), x_ideal*cos(3 * x_ideal), d);
    }
    printf("|_____________|___________________|____________________|______________|\n");
    system("pause");
    return 0;
}

int OneP(int q)
{
    int a = -1;
    for (int w = 0; w < q; w++)
    {
        a = (-1) * a;
    }
    return a;
}

double fact(int n)
{
    if (n == 0)
    {
        return 1;
    }
    if (n > 0)
    {
        return n * fact(n - 1);
    }
}

double MyCos(double x, double eps)
{
    double sum = 0, a;
    for (int k = 0; fabs(OneP(k + 1) * pow(3, 2 * k) * pow(x, 2 * k + 1) / fact(2 * k) + OneP(k) * pow(3, 2 * k + 2) * pow(x, 2 * k + 3) / fact(2 * k + 2)) > eps; k++)
    {
        a = OneP(k + 1) * pow(3, 2 * k) * pow(x, 2 * k + 1) / fact(2 * k);
        sum = sum + a;
    }
    return sum;
}`
Answer 1

Возьмите начальное значение и модифицируйте слагаемое на каждом обороте цикла согласно формуле.

sum = 0
item = x
i = 1
do {
   item =  - item * x * x * 3.0 * 3.0 / (2 * i * (2 * i - 1))
   sum += item
   i++  
} while (fabs(item) >= eps);
READ ALSO
Передача массива строк в метод

Передача массива строк в метод

я создал прототип метода

161
Ошибка при загрузки библиотеки All com.android.support libraries must use the exact same version specification

Ошибка при загрузки библиотеки All com.android.support libraries must use the exact same version specification

При попытки добавить библиотеку для рекламы от adMob

147
Логгирование в разные файлы в Spring Boot

Логгирование в разные файлы в Spring Boot

Нужно вести логи приблизительно таким образом:

231
Передача значения с одного окна в другое в javafx

Передача значения с одного окна в другое в javafx

Делаю игру по типу монополии, и возник вопрос над которым уже сижу пару днейВообщем, при создании новой игры (нажатия кнопки "Новая игра"),...

170