1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Как записать элемент суммы в цикле? формула внутри

Тема в разделе "Visual Basic", создана пользователем -, 4 янв 2011.

  1. Гость

    Подскажите пожалуйста как мне записать элемент суммы в циклическом алгоритме
    фото формулы прикрепил...
     

    Вложения:

    • __________.JPG
      __________.JPG
      Размер файла:
      13,2 КБ
      Просмотров:
      81
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а в чем тут проблема-то?
    примерно так =) только переменные опишите
    Код (LotusScript):
    sum = 0.0
    k=1.0 ' тут будет (-1)^(n+1)
    for n=1 to max ' max - количество итераций
    sumN = k*(n + 1)*(n+2)*(n+3) * (x ^ n) ' эл-т суммы
    k = - k;
    sum=sum+sumN
    next
    value = 1 - sum/6
     
  3. Гость

    Спасибо, вот только у меня в лабороторной цикл Do while и выглядит вот так


    For i = 0 To n
    x = a + i * h
    ak = x
    sum = x
    k = 1
    Do
    ak = ak * ((x * (k + 4)) / ((-1) * (k + 1)))
    sum = 1 - 1 / 6 * (sum + ak)
    k = k + 1
    Loop While Abs(ak) > eps

    Исправьте пожалуйста
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    это непонятки ваще =) где Next? =)
    почему ak = x и sum = x?
    при n = 0 (см. формулу на рисунке) получается a(0) = -6, формула дает s(0) = 1,
    при n = 1 получается формула дает s(1) = 1 - (24х)/6 = 1 - 4x
    т.е. у меня получается ak = 24х для n=1, если не учитывать 1/6 сразу.
    Код (LotusScript):
    ak = -6
    sum = 1
    k = 0 ' !!! мы a(n+1) выразили через а(n), a(0) = -6, в формуле s(0) = 1/6*6 = 1
    Do
    ak = - ak * x * (k + 4) / (k + 1) ' может, тут стоит поделить на 6,
    ' но тогда в след. строке ak/6 заменить на ak
    sum = sum + ak/ 6
    k = k + 1
    Loop While Abs(ak) > eps
     
  5. Гость

    Я подставил, все равно значения расходятся...
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код"</div></div><div class="sp-body"><div class="sp-content">Private Sub mnuSpravka_Click()
    MsgBox ", 10-АС, 29.12.10" _
    & vbCrLf & "Лабораторная работа №7" _
    & vbCrLf & "Вычисление бесконечной суммы" _
    & vbCrLf & "Вариант 2"
    End Sub

    Private Sub pMnuClear_Click()
    Cls
    End Sub

    Private Sub pMnuRezult_Click()
    'объявляем переменные
    '[a,b]- отрезок, п- число разбиений, h- шаг, eps- погрешность
    Dim a As Single, b As Single, n As Integer, h As Single, eps As Single
    'x- аргумент, y- функция
    Dim x As Single, y As Single
    'i,k- счетчики внешнего и вложенного циклов, ak- элемент суммы, sum- сумма
    Dim i As Integer, k As Integer, ak, sum As Single
    'открываем файлы для ввода и вывода данных
    Open "E:\07\vyvodIn.txt" For Input As #1
    Open "E:\07\vyvodOut.txt" For Output As #2
    'ввод исходных данных
    Input #1, a, b, n, eps
    'шаг
    h = (b - a) / n
    'внешний цикл изменяет значения аргумента
    For i = 0 To n
    x = a + i * h
    'начальные значения для суммирования ряда
    ak = 6
    sum = 1
    k = 0 ' !!! мы a(n+1) выразили через а(n), a(0) = 6, в формуле s(0) = 1/6*6 = 1
    Do
    ak = -ak * (x * (k + 4) / (k + 1)) / 6 ' может, тут стоит поделить на 6,
    ' но тогда в след. строке ak/6 заменить на ak
    sum = sum + 1 + ak / 6
    k = k + 1
    Loop While Abs(ak) > eps
    'вычисление стандартной функции
    If x = 0 Then y = 0.0039062 Else y = (1 / ((x + 4) ^ 4))
    'вывод результатов на форму и в файл на диск
    Print "x="; x, "функция у="; y, "сумма ="; sum, "просуммировано "; k; " элементов"
    Print #2, "x="; x, "функция у="; y, "сумма ="; sum, "просуммировано "; k; " элементов"
    Print
    Next
    End Sub

    Private Sub pMnuStop_Click()
    End
    End Sub

    вот посмотри пожалуйста, не пойму где ошибка...
    в файле vyvodIn.txt значения такие : "0 0.9 10 0.0001"

    спасибо заранее =)
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    найдите 3 отличия
    Добавлено: в вашем варианте надо просто
    sum = sum + ak
     
  7. Гость

    эмм....а формула тогда какая будет?
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Код (LotusScript):
        ' вот убрала деление на 6 из цикла и вычисление s(0) сразу
    x = 0
    eps = 0.0001
    'начальные значения для суммирования ряда
    For i=1 To 10
    ak = -6 ' тут был 1й баг =)
    sum = 0
    k = 0 ' !!! мы a(n+1) выразили через а(n), a(0) = 6
    Do
    ak = -ak * (x * (k + 4) / (k + 1))
    sum = sum + ak
    k = k + 1
    If k Mod 100 = 0 Then Print "a(" & k & ") = " & ak ' тестовый принт
    Loop While Abs(ak) > eps
    Print "a(" & k & ") = " & ak ' тестовый принт - последнее значение
    sum = 1 - sum/6
    'вычисление стандартной функции
    y = (1 / ((x + 1) ^ 4)) ' тут был 2й баг =)
    Print "x="; x, "функция у="; y, "сумма ="; sum, "просуммировано "; k; " элементов"
    x = x + 0.1
    Next
     
  9. Гость

    Все написал, как вы написали... значения по прежнему разные... например при нуле функция = 0.003962 а сумма = 1 :rolleyes:
     
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а что делать. математика она такая, сколько 0 на себя не перемножай... 0 даст. Что суммировать-то? =)
     
  11. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ржать долго будешь, наверно =)
    нашла 2 ошибки
    одну свою - в задании а(0) = -6
    вторую - в формуле... для y =)
    y = 1/((1 + x)^4) попробуй =)
    квест пройден? =)
     
  12. Гость

    почему y = 1/((1 + x)^4) то? там же (x+4)^4 =)
     
  13. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    вопрос не такой и не ко мне.
    вопрос звучит так: почему там 1/((x+4)^4), если правильная формула получается при 1/((x+1)^4)?
    вот ты это спроси у того, кто давал тебе условие с багом :) кто тебе там изначально писал код, решил более-менее правильно =)
     
  14. Гость

    Показал седня преподу, говорит формула неправильная, ее надо высчитать както по рекуррентной ..
     
  15. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а ты турок? рекуррентная формула вычисления чего? у тебя рекуррентная для члена суммы и есть [новое ak выражается через ранее вычисленное (ak = ak* что-то там...)], для всей суммы - нет, сумму последний мой вариант считает в конце (sum = 1 - sum/6). Итерационная формула приведена в моём первом сообщении (Сообщение #2)
    Кажется, он придирается или ты просто не сам решал и не смог ему объяснить? подумай, в чем проблема. Я пока занята и расписывать получение рекуррентной формулы не могу...
     
  16. Гость

    Он придрался к
    Код (LotusScript):
    ak = ak * ((x * (k + 4)) / ((-1) * (k + 1)))
    говорит неправильно и все...
     
  17. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    у тебя формула вычислялась как а(к+1) через а(к), поэтому брала начальное к=0. Если что, либо сразу умножать на (-1/6), либо попробуй выразить а(к) через а(к-1). Если сам делал - сможешь...

    Добавлено: Иначе говоришь, что у вас условие на рисунке неправильное было, сами посчитайте и проверьте задачу.
     
  18. Гость

    т.е.
    Код (LotusScript):
    ak = ak * (-1 * (k + 3) * x) / k
    так???
    он ошибку выдает...
     
  19. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    и тогда в начале берем к=1, а не к=0. Формулу не проверяла, но очень похоже на правду.
    -1 * можно просто заменить на - перед всем произведением (зачем лишняя операция умножения?)
    ak = - ak * ((k + 3) * x) / k
     
  20. Гость

    OKEN, Спасибо большое, что помогала :(
    Сдал я эту чертову лабу, оказалось там у них ошибка в методичке...
    вместо
    y = 1/((x + 4)^4)
    y = 1/((x + 1)^4)
     
Загрузка...

Поделиться этой страницей