Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Разложение в ряд Тейлора  (Прочитано 20349 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alina999
Читатель

ru
Offline Offline

« : 28-04-2017 16:04 » 

Программа не выводит ответ, подправьте пожалуйста код
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) с точностью ε (табл. 8.1). Вывести число итераций, необходимое для достижения заданной точности. Вычисление S(x) и Y(x) оформить в виде функций.



Код: (C++)
#include <iostream>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <locale>
#include <math.h>

using namespace std;


double f(double x)
{
return pow(1+x,1/3);
}

int main()
{

setlocale(LC_ALL, "Rus");

double a = -0.9, b = 0.9;
double h = 0.1;
double eps = 0.001;

for (double x = a; x <= b; x += h)
{
double y = f(x);
double sum = pow(1+x,1/3);
double tmp;
int k = 2; while (fabs(sum - y) > eps)
{
k++;
tmp/= pow(3,k)*k*k;
sum += pow(-1,k-1)*(3*k-4)*pow(x,k)*tmp;
}
cout << "x=" << x << " y(x)=" << y << " S(x)=" << sum << " k=" << k << endl;
}
system("pause");
return 0;
}

Добавлено через 3 минуты и 53 секунды:
сумма ряда начинается с 2
s(x)=1 +x/3+ сумма раяда с 2 *(-1)^k-1*(1*2*5*8*...*(3K-4))/((3^k) *k!)
y(x)=3 sqrt(1+x)
« Последнее редактирование: 28-04-2017 16:07 от alina999 » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 28-04-2017 19:05 » 

А сама?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 29-04-2017 11:34 » 

alina999, что значит, "не выводит"? cout вон там есть. Какие будут идеи, почему до него очередь не доходит?
Записан
alina999
Читатель

ru
Offline Offline

« Ответ #3 : 29-04-2017 12:43 » 

Цитата: Вад link=topic=30822.msg302807#msg302807
date=1493465688
Точнее не то, что нужно, не могу понять как факториал организовать правильно и вообще как с вашей точки зрения должна выглядеть программа
alina999, что значит, "не выводит"? cout вон там есть. Какие будут идеи, почему до него очередь не доходит?

Добавлено через 1 минуту и 56 секунд:
RXL,  я бы сюда не обратилась, если бы знала сама
« Последнее редактирование: 29-04-2017 12:45 от alina999 » Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 29-04-2017 13:49 » 

Код: (C++)
...

double f(double x)
{
    return pow(1 + x, 1 / 3);
}


int main()
{
    setlocale(LC_ALL, "Rus");

    double a = -0.9, b = 0.9;
    double h = 0.1;
    double eps = 0.001;

    for (double x = a; x <= b; x += h)
    {
        double y = f(x);
        double sum = pow(1 + x, 1 / 3);
        double tmp;
        int k = 2;

        while (fabs(sum - y) > eps)
        {
            k++;
            tmp /= pow(3, k) * k * k;
            sum += pow(-1, k - 1) * (3 * k - 4) * pow(x, k) * tmp;
        }

        cout << "x=" << x << " y(x)=" << y << " S(x)=" << sum << " k=" << k << endl;
    }
...
}

А выводится, кстати, должно. Но суть алгоритма туманна, так как "y" и "sum" считают одно и то же. И цикл "while" вообще не работает.
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 29-04-2017 22:25 » new

alina999, факториал можно организовать двумя способами:
1. просто: сделать отдельную функцию, которая только его и вычисляет. В цикле или рекурсивно (полагаю, для учебных нужд глубина рекурсии не будет такой уж большой):
Код: (C++)
double factorial(int k) {
  if (k <= 1) {
    return 1.0;
  }
  else {
    return k * factorial(k-1);
  }
}
2. эффективно - для этого уже нужно понимать, почему плохо вычислять по новой факториал для каждого нового члена, т.е. иметь представление, что такое за штука O(n^2). Но код уже будет не такой простой и понятный.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines