Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 13.02.2013
Сообщений: 36
1

Как расчитать функцию Лапласса для параметра Z

03.12.2013, 19:59. Просмотров 1261. Ответов 7
Метки нет (Все метки)


Собственно само задание:
Эксперты оценили поздние сроки окончания работ, как 25% опоздания по каждой из них, а ранние – как 20% опережения, с учетом нормального закона распределения оценок работ. Рассчитать вероятность окончания
всего проекта в срок– 30 дней.
Вот сетевая модель.
Вложение 336594
Но вопрос не в этом. Это так, в качестве дополнения. Вопрос в том, как расчитать функцию Лапласса для параметра Z.
Вот код:
Visual Basic
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Private Sub Form_Load()
 
Dim WorkNorm(8, 8) As Double
Dim WorkOpt(8, 8) As Double
Dim WorkPes(8, 8) As Double
Dim OptOcenka As Double
Dim PesOcenka As Double
Dim Otkloneniye(8, 8) As Double
Dim SredKvadOtkl As Double
Dim Dispersia As Double
Dim NV(8, 8) As Double
Dim MatWait As Double
Dim Z As Double
Dim Ver As Double
Dim TDirect As Double
 
WorkNorm(1, 2) = 4: WorkNorm(1, 3) = 3: WorkNorm(1, 4) = 5: WorkNorm(2, 5) = 7: WorkNorm(3, 6) = 8: WorkNorm(4, 7) = 9
WorkNorm(2, 6) = 10: WorkNorm(4, 6) = 12: WorkNorm(6, 8) = 10: WorkNorm(5, 8) = 8: WorkNorm(1, 2) = 11
 
OptOcenka = 0.2
PesOcenka = 0.25
TDirect = 30
 
For i = 1 To 8
  For j = 1 To 8
  WorkOpt(i, j) = WorkNorm(i, j) - WorkNorm(i, j) * OptOcenka
  Next j
Next i
 
 
For i = 1 To 8
  For j = 1 To 8
  WorkPes(i, j) = WorkNorm(i, j) + WorkNorm(i, j) * PesOcenka
  Next j
Next i
 
For i = 1 To 8
  For j = 1 To 8
  Otkloneniye(i, j) = 0.028 * ((WorkPes(i, j) - WorkOpt(i, j)) ^ 2)
  Next j
Next i
 
SredKvadOtkl = 0
For i = 1 To 8
  For j = 1 To 8
  SredKvadOtkl = SredKvadOtkl + Otkloneniye(i, j)
  Next j
Next i
 
Dispersia = Sqr(SredKvadOtkl)
 
 
For i = 1 To 8
  For j = 1 To 8
  NV(i, j) = (WorkOpt(i, j) + 4 * WorkNorm(i, j) + WorkPes(i, j)) / 6
  Next j
Next i
 
MatWait = NV(1, 4) + NV(4, 6) + NV(6, 8)
 
Z = Round(((TDirect - MatWait) / Dispersia), 8)
 
Ver = Ôóíêöèÿ_Ëàïëàññà(Z)
 
MsgBox Z 'Ver
 
End Sub
 
 
Public Function Ôóíêöèÿ_Ëàïëàññà(a As Double) As Double
Dim h As Double
Dim n As Double
Dim Èíòåãðàëë As Double
Dim e As Double
Dim sum As Double, F0 As Double, Fn As Double
Dim pi As Double
Dim Êîýôôèöèåíò As Double
 
pi = 3.1415926535
e = 2.71828182845905
n = 10
h = Round(((a - 0) / n), 8)
 
For i = 1 To n - 1
sum = sum + e ^ (-0.5 * (i) ^ 2)
Next i
 
F0 = e ^ (-0.5 * 0 ^ 2)
Fn = e ^ (-0.5 * 1000 ^ 2)
 
Èíòåãðàëë = Round(((h * ((F0 + Fn) / 2 + sum) + (((a - 0) * h ^ 2) / (-12)))), 8)
 
Êîýôôèöèåíò = Round(((1 / Sqr(2 * pi))), 8)
Ôóíêöèÿ_Ëàïëàññà = Êîýôôèöèåíò * Èíòåãðàëë
 
End Function
Формула расчета функции Лапласса:
Вложение 336601
дело в том, что интеграл я расчиывал по методу трапеций. Вот по этой формуле:
Вложение 336598
Но в этой формуле нужно расчитать вот это число:
Вложение 336599
а я не знаю что это за f с двумя штрихами, и расчитал без него. И расчет оказался не правильным((
Посмотрите пожалуйста код, подскажите, может ошибка не в этом??

Добавлено через 50 минут
не пойму, куда делись вложенные картинки, модератор?

Добавлено через 3 минуты
Короче вот заново.
Сетевая модель:
Как расчитать функцию Лапласса для параметра Z

Формула расчета функции Лапласса:
Название: c24_clip_image002.gif
Просмотров: 65

Размер: 601 байт
дело в том, что интеграл я расчиывал по методу трапеций. Вот по этой формуле:
Как расчитать функцию Лапласса для параметра Z

Но в этой формуле нужно расчитать вот это число:
Название: 8473a21b910709b92d4f0db1691b1497.png
Просмотров: 67

Размер: 1.2 Кб
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2013, 19:59
Ответы с готовыми решениями:

Как передать функцию в качестве параметра?
Как передать функцию в качестве параметра?

Расчитать функцию y(х) в зависимости от введенного параметра А
Здравствуйте программисты! Помогите мне пожалуйста с написанием следующей программки.:cry:...

Как вызвать функцию Лапласса в C#?
Как вызвать функцию Лапласса в c#??

Как рассчитать функцию Лапласса, заданную интегралом, через вектор аргументов?
последняя строка в программе

7
1 / 1 / 1
Регистрация: 13.02.2013
Сообщений: 36
04.12.2013, 00:30  [ТС] 2
неужели никто не знает?
0
Модератор
Эксперт Python
28401 / 15297 / 3014
Регистрация: 12.02.2012
Сообщений: 25,042
Записей в блоге: 4
04.12.2013, 11:57 3
Цитата Сообщение от AlexKuchanskiy Посмотреть сообщение
Но в этой формуле нужно расчитать вот это число:
- зачем? Это число - погрешность формулы трапеций. Разве тебе нужно оценивать погрешность?
0
1 / 1 / 1
Регистрация: 13.02.2013
Сообщений: 36
04.12.2013, 22:30  [ТС] 4
А без погрешности интеграл будет рассчитан правильно?

Добавлено через 31 минуту
Нашел, кажется, свою ошибку.
Если количество разбиений интеграла поставить равным параметру Z*10, то всё считается правильно. Только считать нужно с учетом погрешности.

Visual Basic
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
Public Function Ôóíêöèÿ_Ëàïëàññà(a As Double) As Double
Dim h As Double
Dim n As Double
Dim Èíòåãðàëë As Double
Dim e As Double
Dim sum As Double, F0 As Double, Fn As Double
Dim pi As Double
Dim Êîýôôèöèåíò As Double
 
pi = 3.1415926535
e = 2.71828182845905
n = Round(a * 10, 5)
h = Round(((30 - a) / n), 8)
 
For i = 1 To n - 1
sum = sum + e ^ (-0.5 * (i) ^ 2)
Next i
 
F0 = e ^ (-0.5 * 0 ^ 2)
Fn = e ^ (-0.5 * n ^ 2)
 
Èíòåãðàëë = Round(((h * ((F0 + Fn) / 2 + sum)) + (((a - 0) * h ^ 2) / (-12))), 8)
 
Êîýôôèöèåíò = Round(((1 / Sqr(2 * pi))), 8)
Ôóíêöèÿ_Ëàïëàññà = Round(Êîýôôèöèåíò * Èíòåãðàëë, 8)
 
End Function
0
Модератор
8384 / 3154 / 824
Регистрация: 22.02.2013
Сообщений: 4,670
Записей в блоге: 78
05.12.2013, 00:50 5
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Ищи через интеграл Симпсона.
Visual Basic
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
30
31
32
33
34
35
36
37
38
39
Option Explicit
Const pi = 3.141592653589
Private Sub Form_Load()
    Dim x As Double, ox As Double, ov As Double, v As Double
    Me.Scale (-4, 1)-(4, -1): Me.AutoRedraw = True: Me.DrawMode = vbXorPen
    Me.Line (-4, 0)-Step(8, 0), vbYellow: Me.Line (0, -1)-Step(0, 2), vbYellow
    For x = -4 To 4 Step 0.5
        If x = -4 Then
            ox = x: ov = Laplas(x)
        Else
            v = Laplas(x)
            Me.Line (x, -1)-Step(0, 2), &H101010
            Me.Line (-4, x / 4)-Step(8, 0), &H101010
            Me.Line (x, 0.01)-Step(0, -0.02), vbWhite
            Me.Line (0.03, x / 4)-Step(-0.06, 0), vbWhite
            Me.Line (ox, ov)-(x, v), vbCyan
            ox = x: ov = v
        End If
    Next
End Sub
Private Function Simpson(a As Double, b As Double, e As Double) As Double
    Dim i As Long, n As Long, h As Double, ov As Double, v As Double, q As Double
    n = 1
    Do
        ov = v: n = n * 2: h = (b - a) / n
        v = Exp(-a * a / 2) + Exp(-b * b / 2)
        For i = 1 To n - 1
           q = a + i * h
           v = v + 2 * (1 + i Mod 2) * Exp(-q * q / 2)
           DoEvents
        Next
        v = v * (b - a) / (3 * n)
        DoEvents
    Loop Until Abs(v - ov) <= e
    Simpson = v
End Function
Private Function Laplas(x As Double, Optional e As Double = 0.00000001) As Double
    Laplas = Simpson(0, x, e) / Sqr(2 * pi)
End Function
2
Миниатюры
Как расчитать функцию Лапласса для параметра Z  
1 / 1 / 1
Регистрация: 13.02.2013
Сообщений: 36
05.12.2013, 03:24  [ТС] 6
Если не сложно, можете вкратце объяснить как работает этот участок кода? Что означают переменные в скобках?
А то просто переделать Ваш код под свою задачу, не поняв как это работает, будет глупо.


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Function Simpson(a As Double, b As Double, e As Double) As Double
    Dim i As Long, n As Long, h As Double, ov As Double, v As Double, q As Double
    n = 1
    Do
        ov = v: n = n * 2: h = (b - a) / n
        v = Exp(-a * a / 2) + Exp(-b * b / 2)
        For i = 1 To n - 1
           q = a + i * h
           v = v + 2 * (1 + i Mod 2) * Exp(-q * q / 2)
           DoEvents
        Next
        v = v * (b - a) / (3 * n)
        DoEvents
    Loop Until Abs(v - ov) <= e
    Simpson = v
End Function
0
Модератор
8384 / 3154 / 824
Регистрация: 22.02.2013
Сообщений: 4,670
Записей в блоге: 78
05.12.2013, 08:13 7
a и b - пределы интегрирования, e - точность. А дальше все как по методу Симпсона.
1
1 / 1 / 1
Регистрация: 13.02.2013
Сообщений: 36
07.12.2013, 05:33  [ТС] 8
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Вот, доделал функцию Лапласса с интегралом по методу трапеций, хочу поделиться.

Visual Basic
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
30
31
Public Function Метод_Трапеций(a As Double, b As Double) As Double
Dim h As Double
Dim n As Double
Dim e As Double
Dim sum As Double, F0 As Double, Fn As Double, Fx As Double
 
 
e = 2.71828182845905
n = 1000
h = Round(((a - b) / n), 8)
 
sum = 0
For i = 1 To n - 1
  Fx = b + i * h
  sum = sum + e ^ (-Fx * Fx / 2)
Next i
 
F0 = e ^ (-0.5 * 0 ^ 2)
Fn = e ^ (-0.5 * n ^ 2)
 
Метод_Трапеций = Round(((h * ((F0 + Fn) / 2 + sum))), 8)
 
End Function
 
Public Function Лапласс(a As Double) As Double
Dim pi As Double
pi = 3.1415926535
 
  Лапласс = Round((Метод_Трапеций(a, 0) / Sqr(2 * pi)), 8)
 
End Function
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2013, 05:33

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

Как привести тип параметра для передачи в функцию массивов
Господа! Помогите, пожалуйста!!! Никак не могу передать в функцию статический параметр-массив...

Расчитать переходную функцию для части второго порядка по формуле
Расчитать переходную функцию для части второго порядка по формуле Формула удалена. В интервале от...

Как запихнуть функцию-член класса в глобальную функцию в качестве параметра ?
class A { public : float f(float); float f2(float); }; class B { public : float f(float);...

Как передать функцию из класса в другую функцию (в качестве параметра)?
У меня есть такой класс: Class a{ static public function sum($a, $b) { return $a+$b; } ...


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

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

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