Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 31.07.2012
Сообщений: 5
1

Дано действительное а Найти такое наименьшее n, что

01.08.2012, 07:37. Просмотров 2740. Ответов 20
Метки нет (Все метки)

1+ 1/2+...1/n a
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2012, 07:37
Ответы с готовыми решениями:

Дано действительное число a. Найти такое наименьшее n
Найти такое наименьшее n, что сумма последовательности больше заданного числа 1 1...

Дано вещественное число a. Найти такое наименьшее n, что 1+1/2+1/3+.+1/n>a
Дано вещественное число a. Найти такое наименьшее n, что 1+1/2+1/3+...+1/n>a. (С++)

Дано вещественное число а. Найти такое наименьшее n, что 1+ (1/2)+(1/3)+...+(1/n)>а
а эту же задачу на C++ с циклом while НАПРИМЕР можете написать?

Дано действительное число a; найти такое наименьшее n, что 1+1/2+.+1/n > a
помогите решить в Delphi

20
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
01.08.2012, 10:21 2
Вероятно, имеется в виду (1+1/2+1/3+...+1/n) > a ? Хорошая задача...
Я бы сказал - очень хорошая задача! Такое n существует, т.к. ряд Ʃ(1/n) расходится. Но найти его тупым перебором будет сложно: если просто суммировать с единицы и ждать, пока сумма превысит a, то можно и не дождаться, т.к. погрешность округления все съест. Суммировать нужно "с другого конца", но он-то и неизвестен.
1
Заблокирован
Автор FAQ
01.08.2012, 10:35 3
Цитата Сообщение от Bob2 Посмотреть сообщение
Дано действительное а Найти такое наименьшее n, что
1+ 1/2+...1/n a
- ИМХО архитривиальная задача
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    int a = 0;
    int n = 0;
    double sum  = 0;//Áóäåò ñîäåðæàòü ÷àñòè÷íóþ ñóììó ðÿäà
    cout<<"a = ";cin>>a;
    for(n = 1; sum < a; n++)
    {
        system("cls");
        //Ñäåëàë èíäèêàöèþ ðàáîòû ÷òîáû íå çàñíóòü
        cout<<"a = "<<a<<endl;
        cout<<"n = "<<n<<" sum = "<<sum<<endl;
        sum = sum + 1.0/n;
    }
    system("pause");
    return 0;
}
1
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
01.08.2012, 10:37 4
Нет, Юра... Возьми, например, a=10000 и найди n.
0
Заблокирован
Автор FAQ
01.08.2012, 10:51 5
Цитата Сообщение от Catstail Посмотреть сообщение
Нет, Юра... Возьми, например, a=10000 и найди n.
- Таки Да, просто число для 10000 будет сильно большим, возможно точности дабла не хватит, можно 1000-чу или лучше 100, для этого варианта сейчас выложу код.

Добавлено через 4 минуты
Catstail, вот тебе код, если есть куча времени скажешь при каком n сумма была немногим меньше 10000
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iomanip>
#include <iostream>
using namespace std;
 
int main()
{
    int a = 0;
    double n = 0;
    double sum  = 0;//Áóäåò ñîäåðæàòü ÷àñòè÷íóþ ñóììó ðÿäà
    cout<<"a = ";cin>>a;
    for(n = 1; sum < a; n = n + 1)
    {
        system("cls");
        //Ñäåëàë èíäèêàöèþ ðàáîòû ÷òîáû íå çàñíóòü
        cout<<"a = "<<a<<endl;
        cout<<"n = "<<n<<" sum = "<<sum<<endl;
        sum = sum + 1.0/n;
    }
    system("pause");
    return 0;
}
- он всё посчитает, когда сам дождусь отработки для 100-ни приложу аттачам скриншот

Добавлено через 1 минуту

Не по теме:

Пока у меня хватило времени дождаться 9500 итераций и суммы 9,73 но сумма растёт, так что наивно полагать что не посчитаем:)

0
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
01.08.2012, 12:33 6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
но сумма растёт, так что наивно полагать что не посчитаем
- увы, это не совсем так. Посчитаем, но ЧТО? Попробуйте посчитать синус из его разложения в ряд (типовой алгоритм - с заданной точностью) для аргумента x, равного, скажем 10000. Ряд "сойдется", но синус будет больше единицы...
0
Заблокирован
Автор FAQ
01.08.2012, 13:16 7
Catstail, мы считаем бесконечную сумму, ряд 1/n расходиться а следовательно предел его суммы равен бесконечности, таким образом для какого нибудь 150 тысячного n накомпленная сумма превзойдёт 100, а для 3млн 2-го превзойдёт 1000-чу. Я чётко и ясно написал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Catstail, вот тебе код, если есть куча времени скажешь при каком n сумма была немногим меньше 10000- он всё посчитает
- почему даже не удосужился слинковать и запустить?!За те 3 часа которые прошли между нашим обзением программа спокойно бы досчитала и до 10000 тыс, но как я вижу тут уже играет свою роль простая лень

Добавлено через 6 минут
для аргумента x, равного, скажем 10000. Ряд "сойдется", но синус будет больше единицы...
- во первых все разложения в ряд Тейлора валидны для |x| < 1 во вторых sin(1000) = sin(1000%2pi) = sin(1000-159*2*pi) ~ sin(0.009)
0
Заблокирован
Автор FAQ
01.08.2012, 13:21 8
Терпения у меня хватило для 10-ки, но алгоритм отпашет до самого MAX_DOUBLE потом конечно крах, если при этом n а оно составит порядка 1E308 мы не наберём 10000 это не значит что этого числа достичь в принципе не возможно - делаем long double помощней CPU и вперёд. Для ускорения работы предлагаю всем
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
system("cls");
сделать комент вот этого
1
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
-=ЮрА=-
01.08.2012, 14:03
  #9

Не по теме:

Catstail, вот ссылка на более быстрый в плане работы код
http://liveworkspace.org/code/... 2515c6c852

n = 2.97e+08 sum = 20.0865
- сидеть ещё E+10-15 знаков у меня просто нет времени...

1
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
01.08.2012, 15:29 10
Юра, ты прав!!! Это я ступил. В этой задаче нет накопления ошибки, поскольку отсутствует вычитание близких чисел (в отличие от ряда для синуса). Поэтому вычисления - действительно только вопрос времени, а задача достаточно тривиальна.

Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
во первых все разложения в ряд Тейлора валидны для |x| < 1
- нет, ряд сходятся для любого x (факториал в знаменателе уверенно давит степень). Для точности double можно убедиться, что приличная точность получается для x до сотни. Но все это не имеет отношения к Теме. Твое решение верно.
0
-=ЮрА=-
01.08.2012, 15:37
  #11

Не по теме:

Catstail, для синуса аргумент должен быть по модулю менее единицы и так почти для всех разложений http://ru.wikipedia.org/wiki/Ряд_Тейлора везде |x| < 1
Для x с модулем больших единицы ряды будут расходиться

0
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
01.08.2012, 18:24 12
Не могу согласиться. Дело в другом. Вот натурный эксперимент:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "iostream.h"
#include "math.h"
 
double cos_(double x, double eps)
{
   double s,n,a;
   a=1;
   s=1;
   n=0;
   while (1)
   {
    if (fabs(a) <= eps) break;
    a=-a*x*x/((2*n+1)*(2*n+2));
    s=s+a;
    n++;
   }
   return s;
}
 
int main(int argc, char* argv[])
{
   double x;
   for (x=0; x < 50; x+=1)
    //cout << x << endl << cos(x) << endl << cos_(x,1.0E-13) << endl << endl;
    cout << "x=" << x << " Diff=" << fabs(cos(x)-cos_(x,1.0E-14)) << endl;
   return 0;
}
Здесь считается косинус (разложением в ряд). Суммирование идет до тех пор, пока очередной член ряда не станет меньше заданного eps. Потом в цикле исследуется разность между стандартным косинусом и нашим. И что же? Примерно до значений аргумента 25 все просто прекрасно. Потом погрешность становится заметной, а потом и вовсе неприемлемой. В чем дело? Если бы ряд расходился при x > 1, как удается дойти до 25?
2
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
Заблокирован
Автор FAQ
02.08.2012, 14:13 13
Catstail, разница в 13339, для х = 49 не настороживает?Меня вот сильно, притом погрешность для х больших единицы растёт в геометрической прогрессии, интересно а какая разница будет между cos(100) - cos_(100,1.0E-14) - это как раз то о чём я говорил. Кстати есть такая штука, как зависимость точности разложения от модуля переменной, так вот чем больше модуль тем хуже разложение описывает истинное значение функции - вот как раз значения за 50 яркий тому пример.
0
Заблокирован
Автор FAQ
02.08.2012, 15:21 14
Catstail, ниже продолжение твоей таблицы и ты будешь говорить что для значений больших 1 ряд cos(x) сходиться???!Да нам повезло до х = 25-30 отклонение ещё не очень велико, а потом...?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double Taylor(double x, double eps)
{
    double sum = 0;
    double an  = 1;
    double n   = 0;
    while(eps < fabs(an))
    {
        sum = sum + an;
        an *= (-1)*x*x/((2*n + 1)*(2*n + 2));
        n   = n + 1;
    }
    return sum;
}
 
int main()
{
    double x;
    cout<<"x\tcos(x)\tTaylor\n";
    for(x = 50; x < 100; x += 1)
        cout<<x<<"\t"
            <<setw(6)<<setprecision(3)<<cos(x)<<"\t"
            <<setw(6)<<setprecision(3)<<Taylor(x,1E-6)<<endl;
    return 0;
}
http://codepad.org/VmyRCt5l
1
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2012, 15:50 15
Естественно, это неизбежно, если представлять косинус как частичную сумму разложения в ряд Тейлора (точнее, ряд Маклорена). Именно поэтому внутри компьютера по разложению Тейлора вычисляется значение в пределах, например (–π/8, π/8), а для больших значений угла значение функции получается с помощью тождественных преобразований (периоды, половинные аргументы и т. п.).
0
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
02.08.2012, 17:22 16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
для значений больших 1 ряд cos(x) сходиться???!Д
- сходится... Сходится, Юра. Признак Даламбера утверждает, что если существует предел an+1/an, и он меньше единицы, то ряд сходится. Для косинуса это отношение равно (-1)*x2/((2n+1)*(2n+2)). Легко убедиться, что предел этого отношения при n->беск. равен нулю. Ряд сходится. Сходится абсолютно при любых вещественных x.

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Catstail, разница в 13339, для х = 49 не настороживает?Меня вот сильно, притом погрешность для х больших единицы растёт в геометрической прогрессии, интересно а какая разница будет между cos(100) - cos_(100,1.0E-14) - это как раз то о чём я говорил.
- нет причина вовсе не в расходимости ряда, а в природе чисел с плавающей точкой (это не вещественные числа в математике).

Добавлено через 4 минуты
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Именно поэтому внутри компьютера по разложению Тейлора вычисляется значение в пределах, например (–π/8, π/8), а для больших значений угла значение функции получается с помощью тождественных преобразований (периоды, половинные аргументы и т. п.).
- это хорошо, что sin и cos - периодические функции... А если бы нет? Кстати, "внутри компьютера" sin и cos вычисляются не разложением в ряд, а с использованием эффективного аппроксимирующего полинома (даже, говорят, не очень высокой степени).
0
Заблокирован
Автор FAQ
02.08.2012, 17:38 17
нет причина вовсе не в расходимости ряда, а в природе чисел с плавающей точкой (это не вещественные числа в математике).
- прошу пояснить этот момент, в своём последнем кодя я специальтно целочисленное Н заменил на вещественное, дабы избежать ситуации когда Н превосходит INT_MAX (а малоли сколько там членов набегает пока точность 1E-6 или даже как здесь
Цитата Сообщение от Catstail Посмотреть сообщение
1.0E-14
в -14-ой станет). Уверенное расхождение косинусов свидетельствует о неверной сумме в разложении, а стало быть неприменимости разложения для чисел с |x| > 1

Добавлено через 1 минуту

Не по теме:

. Легко убедиться, что предел этого отношения при n->беск. равен нулю.
ну нне могу сейчас я найти ту лекцию где к этому шла ещё приписочка для ряда cos (|x| < 1) но это не значит что х должен быть более 1

0
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2012, 18:23 18
Тут дело не в округлении чисел с плавающей точкой (хотя и это тоже).

И не в сходимости ряда. С ним всё окей: ряд, составленный из частичных сумм ряда Тейлора, сходится: то есть для любой заданной ошибки ε мы можем указать такое число N, что N членов хватит, чтобы частичная сумма ряда не отличалась от значения cos x более чем на ε. Но. Вчитываемся: ряда составленного из частичных сумм ряда. N зависит и от ε, и от x, и от a (опорной точки ряда Тейлора). Естественно, для одних x при заданных ε и a требуется 10 слагаемых, для больших x не хватает и 50.

А вообще да, используются другие полиномы, например, полиномы Чебышева. Есть чудная книжка «Вычисление функций на ЭВМ» Б. Попова и Г. Теслера, где рассматривается куча способов вычисления различных функций. И тригонометрических в том числе.
0
Модератор
Эксперт Python
26800 / 14010 / 2684
Регистрация: 12.02.2012
Сообщений: 22,968
Записей в блоге: 2
02.08.2012, 20:46 19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну не могу сейчас я найти ту лекцию
- Но ведь признак Даламбера имеет место. А вопросы накопления погрешности при вычислениях с плавающей точкой хорошо рассмотрены в книге Д. МакКракен, У. Дорн "Программирование на Фортране". Пример с синусом и косинусом именно оттуда (стр. 95)
0
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
Заблокирован
Автор FAQ
02.08.2012, 21:34 20
Catstail, я поэтому и писал за малость аргумента, даже далеко ходить не буду ваш скрин приведу
в любом случае лучше использовать разложение при этом учитывасть периодичность тригонометрических функций скажем тот же тангенс для PI/2 мы не сможем разложить...
0
Миниатюры
Дано действительное а Найти такое наименьшее n, что  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2012, 21:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Дано действительное число a, найти такое наименьшее n. что
1+\frac{1}{2}+...+\frac{1}{n}&gt;a

Дано действительное а Найти такое наименьшее n
Дано действительное а Найти такое наименьшее n, что 1+ 1/2+...1/n a, c предусловие, с постусловием,...

Дано вещественное число а. Найти такое наименьшее n, что 1+ (1/2)+(1/3)+...+(1/n)>а
Дано вещественное число а. Найти такое наименьшее n, что 1+ (1/2)+(1/3)+...+(1/n)&gt;а.

Дано число a (1<a<=1,5) найти такое наименьшее n
Что в последовательности чисел 1+1/2 , 1+1/3, ..., 1+1/n последнее число будет меньше a

Найти такое наименьшее N, что 1 + 1/2 + 1/3 + 1/4 + 1/N больше b
1. Вводится действительное число b. Найти такое наименьшее N, что 1 + 1/2 + 1/3 + 1/4 + 1/N больше...

Найти наименьшее число r, такое что 2 ^r≥N
Дано натуральное число N. Найти наименьшее число r, такое что 2r≥N.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.