2013-12-20 5 views
0

Как я могу найти сумму бесконечной серии?Найдите сумму бесконечной серии

enter image description here

Серия:

Мой пример плохо себя:

seq 0 inf | awk '{sum+=(1/$1)} END {print sum}' 

Можно ли осуществить этот метод правильный расчет или как решить эту проблему другими способами?

+6

вы должны сделать это в конечное время делать? Если да, есть ли у вас информация о его конвергенции? –

+1

Я предлагаю начинать с 1, так как 1/0 сломает его. Кроме того, используйте 'printf '% f \ n", sum' в соответствии с плавающими значениями. – fedorqui

+0

@fedorqui Надеюсь, в любом случае эта сумма является всего лишь примером, так как она не сходится. –

ответ

4

Эта серия не сходится. Он называется гармоническим рядом, и он, как известно, не сходится.

Кроме того, как комментарий говорит, что вам нужно начать с 1 вместо 0, так как в противном случае она не определена:

Попробуйте это:

seq 1 inf | awk '{sum+=(1/$1)} {print sum}' 

Однако, это не очень хорошо работает для более итераций, потому что представления числового формата несовместимы и точность внутреннего представления числа недостаточна.

Чтобы сделать более точные вычисления для оценки значения сходящейся серии, вы должны использовать научный пакет вычислений с более подходящим языком программирования, например Java, Python или C++.

Вот полный рабочий пример в Java:

import java.math.BigDecimal; 
import java.math.MathContext; 
import java.math.RoundingMode; 

public class SeriesCalculator { 

    public static void main(String[] args) { 
     MathContext mathContext = new MathContext(100, RoundingMode.HALF_EVEN); 

     BigDecimal i = BigDecimal.ONE; 
     BigDecimal sum = BigDecimal.ZERO; 
     while (true) { 
      // calculation for every iteration 
      BigDecimal element = BigDecimal.ONE.divide(i, mathContext); 
      sum = sum.add(element); 

      // show output once for every magnitude 
      String iStr = i.toString(); 
      if (iStr.matches("10*")) { 
       int logI10 = iStr.length() - 1; 
       System.out.println("i=10^" + logI10 + "; sum = " + sum); 
      } 

      // preparation of next iteration step 
      i = i.add(BigDecimal.ONE); 
     } 
    } 
} 

Выход:

i=10^0; sum = 1 
i=10^1; sum = 2.9289682539682539682539682539682539682539682539682539682539682539682539682539682539682539682539682540 
i=10^2; sum = 5.18737751763962026080511767565825315790897212670845165317653395658721955753255049660568776892312041358 
i=10^3; sum = 7.485470860550344912656518204333900176521679169708803665773626749957699349165202440959934437411845081421 
i=10^4; sum = 9.7876060360443822641784779048516053348592629455776917183894609566816020249431595068001251272900808826142 
i=10^5; sum = 12.09014612986342794736321936350421950079369894178220110162752941593818198228230919443164900701935230601448 
i=10^6; sum = 14.392726722865723631381127493188587676644800013744311653418433045812958507517995003568298175947219100731214 
i=10^7; sum = 16.6953113658598518153991189395404518842498697523730804627851359543562886921742546877116037143701502883133367 
i=10^8; sum = 18.99789641385389832441711039422398284185097124497010343881842218865761130260918292544757982666365581248865345 
... 
+1

Я предположил, что это всего лишь пример (см. Комментарии ниже вопроса). –

+0

Будет ли эта команда выдавать результат? – devnull

+0

Я действительно не знаю. Посмотрим, разъяснит ли ОП. –

Смежные вопросы