Условие
Доказать сходимость ряда и найти его сумму
[latex]\frac { 1 }{ 2 } + \frac { 3 }{ 4 } + \frac { 5 }{ 8 } + \ldots + \frac { 2n-1 }{ { 2 }^{ n } } + \ldots [/latex]
Решение
Для начала докажем, что наш ряд сходится. Докажем это, через признак Даламбера. Суть этого признака заключается в том, что если предел отношения последующего члена к предыдущему меньше [latex]1[/latex](или в частных случаях равен [latex]0[/latex]) то данный ряд будет сходится.
Берем отношение последующего и предыдущего [latex]\lim\limits_{ n\to \infty } \frac { \frac{ 2(n+1)-1 }{ { 2 }^{ n+1 } } }{ \frac{ 2n-1 }{ { 2 }^{ n } } }[/latex] превратим нашу 4-х этажную дробь в 2-х этажную [latex]\lim\limits _{ n\to \infty } \frac { ({ 2(n+1)-1){ 2 }^{ n } } }{ { (2n-1 }){ 2 }^{ n+1 } }[/latex] раскроем скобки и применим свойство степеней, получим [latex] \lim\limits _{ n\to \infty } \frac { (2n+2-1){ 2 }^{ n } }{ (2n-1){ 2 }^{ n }2 }[/latex] далее приведем подобные сократим дробь и снова раскроим скобки, получим [latex]\lim\limits _{ n\to \infty } \frac { 2n+1 }{ 4n-2 } [/latex] далее чтобы перейти непосредственно к пределу разделим коэффициенты при старших степенях числителя на знаменатель, в ответе получаем [latex]\frac { 2 }{ 4 }[/latex] [latex]=[/latex] [latex]\frac { 1 }{ 2 }[/latex].
[latex]\frac { 1 }{ 2 }[/latex] [latex]<[/latex] [latex]1[/latex] из этого следует что данный ряд сходится!
Далее найдем сумму это ряда. [latex]\sum\limits_{ n=1 }^{ \infty } { \frac { 2n-1 }{ { 2 }^{ n } } }[/latex] Воспользуемся веб-приложением и посчитаем сумму ряда.
Тесты
[latex]n[/latex] | сумма [latex]n[/latex] элементов |
1 | 0.5 |
2 | 1.25 |
3 | 1.875 |
23 | 2.99999 |
24 | 3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { int a,n; double s=0,q=1; cin>>n; for(int i=1;i<=n;i++){ q=q*2; s+=(2*i-1)/q; } cout<<s; return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { int a,n; double s=0,q=1; Scanner in = new Scanner(System.in); n=in.nextInt(); for(int i=1;i<=n;i++){ q=q*2; s+=(2*i-1)/q; } System.out.println(s); } } |
Код на ideone C++
Код на ideone Java
Давайте для начала учтём несколько замечаний:
Роман, я понимаю, что Вам лень читать инструкцию по выполнению работ, лень конспектировать на занятиях, лень читать учебник, лень смотреть 700 примеров оформления работ на сайте, лень спросить у однокурсников. Но почему я должен писать ревью Ваших опусов по объёму превышающее сам опус? Это не справедливо. Давайте будем оба прилагать усилия для Вашей учебы. Справедливо?
Исправил, Игорь Евгеньевич.
— А зачем транслитерация «Zadacha» в заголовке?
— Уберите символы кириллицы из постоянных ссылок.
— У Вас используется вложенный цикл для вычисления степени. Это очень неэффективно. Знаменатель очередного слагаемого в два раза больше предыдущего. Т.е. достаточно каждый раз домножать (или делить, как решите) на 2.
— Почему не указали категорию?
— Почему не указали метки (ключевые слова)?
— Нужно показать (в таблице), как при разных [latex]n[/latex] сумма приближается к 3.
— «Ссылка на код в ideone» — что Вы имели в виду?
Сделал.
Кажется можно засчитывать работу 🙂
Есть только пожелания. Учтете, если посчитаете целесообразным.
— Стоит использовать cout.precision(15); перед печатью, чтобы выводились все 15 верных цифр при обычных вычислениях с двойной точностью.
— Интересно найти какая частичная сумма уже не отличима от 3 при доступной нам точности вычислений.
Если понравится экспериментировать, то можно использовать long double, выяснить сколько этот тип данных даёт верных десятичных цифр, увеличить число слагаемых…
Что-то я размечтался…
Как удалось все испортить?! В визуальном режиме поработали?
Исправил
Ох ручки наши золотые 🙂
Зачем Вы добавили стиль с выравниванием текста по правой границе? Уберите это пожалуйста.
Хорошо. Принято.
На будущее, ставьте пробелы в коде по крайней мере после знаков препинания и между знаками операций.