Вопрос № 43908: Вопросик. Вот код
Public Function f(ByVal a, y As Double)
f = y * (1 - a)
End Function
Public Function euler(ByVal a, b, h, y As Double) As Double
Dim f1, y1 As Double
a = TextBox1.Text
b = TextBox4.Text
h = TextBox2.T...
Вопрос № 43.908
Вопросик. Вот код
Public Function f(ByVal a, y As Double)
f = y * (1 - a)
End Function
Public Function euler(ByVal a, b, h, y As Double) As Double
Dim f1, y1 As Double
a = TextBox1.Text
b = TextBox4.Text
h = TextBox2.Text
y = TextBox5.Text
y1 = y
Do While a + h <= b
f1 = f(a, y)
a = a + h
y = y + f1 * h
y = y1 + h * (f1 + f(a, y)) / 2
y1 = y
Loop
euler = y
End Function
Public Function runge(ByVal a, b, h, y As Double) As Double
Dim k1, k2, k3, k4, d As Double
a = TextBox1.Text
b = TextBox4.Text
h = TextBox2.Text
y = TextBox5.Text
Do While a + h <= b
k1 = f(a, y)
k2 = f(a + h / 2, y + h * k1 / 2)
k3 = f(a + h / 2, y + h * k2 / 2)
k4 = f(a + h, y + h * k3)
d = (h * (k1 + 2 * k2 + 2 * k3 + k4)) / 6
y = y + d
a = a + h
Loop
runge = y
End Function
Проверяю в MatCad, получается какая то ерунда. Где ошибка?
Отправлен: 22.05.2006, 23:40
Вопрос задал: Pretender (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: AlexanderZh
Здравствуйте, Pretender!
На чем пишите? (VB или VB.NET)? по коду это VB
на VB конструкция типа DIM a,b,c as double означает a,b - variant; с - double
тоже самое касается описания функций
далее по порядку (в комментариях привожу подправленный код):
Public Function f(ByVal a, y As Double)
' Public Function f(ByVal a as Double, y As Double) as double
f = y * (1 - a)
End Function
Public Function euler(ByVal a, b, h, y As Double) As Double
' аналогично функции f()
Dim f1, y1 As Double
' Dim f1 As Double, y1 As Double
a = TextBox1.Text
b = TextBox4.Text
h = TextBox2.Text
y = TextBox5.Text
' сдесь совсем чтото непонятное. зачем вообще передавать в функцию значения если в ее теле они берутся из текстовых полей?
' и правильным будет такое присвоение:
' x=cdbl(textbox.text)
y1 = y
Do While a + h <= b
f1 = f(a, y)
a = a + h
y = y + f1 * h
y = y1 + h * (f1 + f(a, y)) / 2
y1 = y
Loop
euler = y
End Function
' в этой функции ошибки теже...
Public Function runge(ByVal a, b, h, y As Double) As Double
Dim k1, k2, k3, k4, d As Double
a = TextBox1.Text
b = TextBox4.Text
h = TextBox2.Text
y = TextBox5.Text
Do While a + h <= b
k1 = f(a, y)
k2 = f(a + h / 2, y + h * k1 / 2)
k3 = f(a + h / 2, y + h * k2 / 2)
k4 = f(a + h, y + h * k3)
d = (h * (k1 + 2 * k2 + 2 * k3 + k4)) / 6
y = y + d
a = a + h
Loop
runge = y
End Function
А вообще какая ерунда получается? Может просто ошибка округления из за использования типа по умолчанию Variant? Попробуй все исправить и прогнать еще раз...
Ответ отправил: AlexanderZh (статус: 7-ой класс)
Ответ отправлен: 23.05.2006, 04:23