Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 289
от 28.05.2006, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 164, Экспертов: 25
В номере:Вопросов: 1, Ответов: 1


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.33 от 25.05.2006
Яндекс Rambler's Top100

В избранное