отладка программы, математические методы

Можно оставлять задания по предметам не относящимся к черчению.





Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
отладка программы, математические методы
2016-май-20 12:51 
Не в сети

Зарегистрирован: 2016-янв-09 21:12
Сообщений: 4
Помогите отладить программу пожалуйста!!
Сама программа ниже


Function fn(x() As Double) As Double
fn = 100 * (x(2) - x(1) ^ 2) ^ 2 + (1 - x(1) ^ 2)
End Function
Sub СМРС()
Const e = 0.0000000001, n = 2, R = -1
Dim x(-1 To n + 1, 1 To n) As Double, i As Integer, j As Integer, L As Double, F(-1 To n + 1) As Double, M As Integer
L = 1
For j = 1 To n
x(1, j) = -3
Next j
симплекс x, n, L
For i = 1 To n + 1
F(i) = fns(x, i)
Next i
Do
M = 1
For i = 2 To n + 1
If F(i) > F(M) Then M = i
Next i
For j = 1 To n
x(0, j) = 0
For i = 1 To n + 1
If M <> i Then x(0, j) = x(0, j) + x(i, j) / n
Next i
x(R, j) = 2 * x(0, j) - x(M, j)
Next j
F(R) = fns(x, R)
If F(R) < F(M) Then
замена R, M, x, F, n
Else
L = L / 2
M = 1
For i = 2 To n + 1
If F(i) < F(M) Then M = i
Next i
If M <> 1 Then
замена M, 1, x, F, n
End If
симплекс x, n, L
For i = 2 To n + 1
F(i) = fns(x, i)
Next i
End If
Loop While сходимость(F, n, e)
печать_результата x, F, n
End Sub
Sub симплекс(x() As Double, n As Integer, L As Double)
Dim j As Integer, i As Integer, k As Integer
For j = 1 To n
For i = 2 To j
x(i, j) = x(1, j)
Next i
x(i, j) = x(j, j) + L * Sqr((j + 1) / (2 * j))
For i = j + 2 To n + 1
x(i, j) = 0
For k = 1 To i - 1
x(i, j) = x(i, j) + x(k, j) / (i - 1)
Next k, i, j
End Sub
Function fns(x() As Double, n As Integer) As Double
fns = 100 * (x(n, 2) - x(n, 1) ^ 2) ^ 2 + (1 - x(n, 1)) ^ 2
End Function
Sub замена(Rd As Integer, Wr As Integer, x() As Double, F() As Double, n As Integer)
Dim j As Integer
For j = 1 To n
x(Wr, j) = x(Rd, j)
Next j
F(Wr) = F(Rd)
End Sub
Function сходимость(F() As Double, n As Integer, e As Double) As Boolean
Dim i As Integer, s As Double
F(0) = 0
For i = 1 To n + 1
F(0) = F(0) + F(i) / (n + 1)
Next i
For i = 1 To n + 1
s = s + (F(0) - F(i)) ^ 2 / (n + 1)
Next i
If Sqr(s) > e Then сходимость = True Else сходимость = False
End Function
Sub печать_результата(x() As Double, F() As Double, n As Integer)
Dim j As Integer
For j = 1 To n: Debug.Print x(1, j): Next j: Debug.Print F(1)
End Sub


Вернуться к началу
 Профиль  
 
2017-окт-14 15:25 
Не в сети
Администратор

Зарегистрирован: 2013-сен-08 11:53
Сообщений: 883
Странная связь - построить линию пересечения поверхностей вращения


Вернуться к началу
 Профиль  
 
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB