Несобственный интеграл (численные методы) - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Имеется вот такое задание : нужно решить с использованием численных методов. Судя по по тому , что задано нормальное распределение, то решать придется методом Симпсона. Идея есть следующая...тупо по формуле просуммировать значения функции от точки d через какой-нибудь шаг (в соответствии с формулой умножать значение функции либо на 4 либо на 2 , для четного/нечетного по номеру слагаемых), но не понятно , что делать с бесконечностью....надо как-то задать конец цикла. Пробовал завязать все это на какой нибудь точности , что-то в духе разница 2-х интегралов при h и h/2 , деленная на 15 меньше заданной точности....Но , либо идея не годится, либо мозгов на реализацию не хватает....может есть какой-то альтернативный способ? Заранее спасибо.

Решение задачи: «Несобственный интеграл (численные методы)»

textual
Листинг программы
Function f(ByVal m As Double, ByVal d As Double, ByVal x As Double) As Double
        f = 1 / (2 * Sqrt(PI)) * Exp(-(x - m + d) ^ 2 / (2 * 0.5 ^ 2))
        Return f
    End Function
 Sub Integral(ByVal m As Double, ByVal d As Double, ByVal E As Double, ByRef t As String, ByRef s As Double)
        Dim a, b, s1, h, x As Double
        Dim n, c As Integer
        a = 0 'нижний пределел интегрирования
        b = PI / 2 'верхний предел интегрирования
        t = "" 'строка для вывода хода решения
        n = 2 'кол-во разбиений
        h = (b - a) / n ' шаг
        s = (f(m, d, a) + 4 * f(m, d, (a + b) / 2) + f(m, d, b)) * (h / 3)
        t = (Format(h, "0.0000") & Space(5) & Format(n, "000") & Space(5) & Format(s1, "0.00000000000") _
    & Space(5) & Format(s, "0.00000000000")) & vbNewLine
        Do
            n = 2 * n
            h = (b - a) / n
            s1 = s
            c = 4
            x = a
            s = f(m, d, a) + f(m, d, b)
            For i = 1 To n - 1
                x = x + h
                s = s + c * f(m, d, x)
                c = 6 - c
            Next
            s = s * (h / 3)
            t = t & (Format(h, "0.00000") & Space(5) & Format(n, "000") & Space(5) & Format(s1, "0.00000000000") _
    & Space(5) & Format(s, "0.00000000000")) & vbNewLine
        Loop Until Abs((s - s1) / 15) < E ' условие окончания цикла DoLoop по оценке погрешности методом двойного просчета 
    End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы