Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Помогите написать макрос в vba - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Помогите написать макрос в vba
Hickol Дата: Вторник, 06.03.2012, 19:18 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Нужно написать программу Рунге Кутта Мерсон, которая бы реализовывала этот алгоритм...
 
Ответить
СообщениеНужно написать программу Рунге Кутта Мерсон, которая бы реализовывала этот алгоритм...

Автор - Hickol
Дата добавления - 06.03.2012 в 19:18
ambasad Дата: Вторник, 06.03.2012, 21:16 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 2 ±
Замечаний: 0% ±

Hickol, а в чём конкретно сложность?
 
Ответить
СообщениеHickol, а в чём конкретно сложность?

Автор - ambasad
Дата добавления - 06.03.2012 в 21:16
shanemac51 Дата: Среда, 07.03.2012, 08:55 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 33
Репутация: 4 ±
Замечаний: 0% ±

 
Ответить
СообщениеMy WebPage

Автор - shanemac51
Дата добавления - 07.03.2012 в 08:55
Hickol Дата: Среда, 07.03.2012, 17:46 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Сложность в том, что я не знаю язык vba...я только начала его учить...вроде бы разобралась с методом Рунге Кутта....написала....работает....а вот метод Рунге Кутта Мерсона у меня не получается, прошу вас помочь....
 
Ответить
СообщениеСложность в том, что я не знаю язык vba...я только начала его учить...вроде бы разобралась с методом Рунге Кутта....написала....работает....а вот метод Рунге Кутта Мерсона у меня не получается, прошу вас помочь....

Автор - Hickol
Дата добавления - 07.03.2012 в 17:46
ambasad Дата: Среда, 07.03.2012, 22:46 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 2 ±
Замечаний: 0% ±

Quote (Hickol)
Сложность в том, что я не знаю язык vba

я так подозреваю что сложность всё-таки не в этом, а в том что у Вас проблемы с алгоритмизацией, потому что для написания алгоритма решения СДУ этим методом не надо использовать специфические функции языка, не надо знать специфический синтаксис, не надо работать с объектами. Посмотрите ссылку выше - там для решения применяются только циклы и условные переходы....
Показывайте что у вас получилось и ссылки на материал
 
Ответить
Сообщение
Quote (Hickol)
Сложность в том, что я не знаю язык vba

я так подозреваю что сложность всё-таки не в этом, а в том что у Вас проблемы с алгоритмизацией, потому что для написания алгоритма решения СДУ этим методом не надо использовать специфические функции языка, не надо знать специфический синтаксис, не надо работать с объектами. Посмотрите ссылку выше - там для решения применяются только циклы и условные переходы....
Показывайте что у вас получилось и ссылки на материал

Автор - ambasad
Дата добавления - 07.03.2012 в 22:46
Hickol Дата: Пятница, 09.03.2012, 18:35 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Можете проверить и исправить ошибки:

[vba]
Code
Global x(), f()

Sub Макрос1()
'
' Макрос1 Макрос

Dim x0(), x(), k1(), k2(), k3(), k4(), k5(), f() As Variant
n = 2 'число уравнений
t0 = 0
tk = Cells(5, 1)
m = Cells(5, 4)
ReDim x0(n), x(n), k1(n), k2(n), k3(n), k4(n), k5(n), f(n)
h = (tk - t0) / m 'шаг
x0(1) = Cells(5, 2)
x0(2) = Cells(5, 3)

If r <= e Then
If r >= e / 30 Then

For i = 1 To m
For j = 1 To n
x(j) = x0(j)
Next j
subrout x, f
For j = 1 To n
k1(j) = f(j) * h
x(j) = x0(j) + k1(j) / 2
Next j
subrout x, f
For j = 1 To n
k2(j) = f(j) * h
x(j) = x0(j) + k2(j) / 3
Next j
subrout x, f
For j = 1 To n
k3(j) = f(j) * h
x(j) = x0(j) + k3(j) / 3
Next j
subrout x, f
For j = 1 To n
k4(j) = f(j) * h
x(j) = x0(j) + k4(j) / 5
Next j
subrout x, f
For j = 1 To n
k5(j) = f(j) * h
x0(j) = x0(j) + (k1(j) + 4 * k4(j) + k5(j)) / 6
r = (-2 * k1(j) + 9 * k3(j) - 8 * k4(j) + k5(j)) / 30
Next j

If r > e Then
If (r >= e / 30) Then
h = (tk - t0) / 2
Else
If r <= e Then
If r < e / 30 Then
h = (tk - t0) * 2
End If
Next

Cells(10 + i, 1) = t0 + i * h
Cells(10 + i, 2) = x0(1)
Cells(10 + i, 3) = x0(2)
Cells(10 + i, 4) = r
Next i

'
End Sub

Sub subrout(x, f) 'Подпрограмма-функция
w = Exp(22.387 - 7455 / (x(2) + 273)) * x(1)
f(1) = (1.16 - x(1)) / 10 - w
f(2) = (20 - x(2)) / 10 + 123000000# * w / 2500 / 1600
End Sub
[/vba]
 
Ответить
СообщениеМожете проверить и исправить ошибки:

[vba]
Code
Global x(), f()

Sub Макрос1()
'
' Макрос1 Макрос

Dim x0(), x(), k1(), k2(), k3(), k4(), k5(), f() As Variant
n = 2 'число уравнений
t0 = 0
tk = Cells(5, 1)
m = Cells(5, 4)
ReDim x0(n), x(n), k1(n), k2(n), k3(n), k4(n), k5(n), f(n)
h = (tk - t0) / m 'шаг
x0(1) = Cells(5, 2)
x0(2) = Cells(5, 3)

If r <= e Then
If r >= e / 30 Then

For i = 1 To m
For j = 1 To n
x(j) = x0(j)
Next j
subrout x, f
For j = 1 To n
k1(j) = f(j) * h
x(j) = x0(j) + k1(j) / 2
Next j
subrout x, f
For j = 1 To n
k2(j) = f(j) * h
x(j) = x0(j) + k2(j) / 3
Next j
subrout x, f
For j = 1 To n
k3(j) = f(j) * h
x(j) = x0(j) + k3(j) / 3
Next j
subrout x, f
For j = 1 To n
k4(j) = f(j) * h
x(j) = x0(j) + k4(j) / 5
Next j
subrout x, f
For j = 1 To n
k5(j) = f(j) * h
x0(j) = x0(j) + (k1(j) + 4 * k4(j) + k5(j)) / 6
r = (-2 * k1(j) + 9 * k3(j) - 8 * k4(j) + k5(j)) / 30
Next j

If r > e Then
If (r >= e / 30) Then
h = (tk - t0) / 2
Else
If r <= e Then
If r < e / 30 Then
h = (tk - t0) * 2
End If
Next

Cells(10 + i, 1) = t0 + i * h
Cells(10 + i, 2) = x0(1)
Cells(10 + i, 3) = x0(2)
Cells(10 + i, 4) = r
Next i

'
End Sub

Sub subrout(x, f) 'Подпрограмма-функция
w = Exp(22.387 - 7455 / (x(2) + 273)) * x(1)
f(1) = (1.16 - x(1)) / 10 - w
f(2) = (20 - x(2)) / 10 + 123000000# * w / 2500 / 1600
End Sub
[/vba]

Автор - Hickol
Дата добавления - 09.03.2012 в 18:35
Формуляр Дата: Суббота, 10.03.2012, 23:00 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Рекомендую для начала установить Option Explicit
Переменная e не объявлена и не инициализирована; делить 0 на 30 врядли имеет смысл.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Суббота, 10.03.2012, 23:02
 
Ответить
СообщениеРекомендую для начала установить Option Explicit
Переменная e не объявлена и не инициализирована; делить 0 на 30 врядли имеет смысл.

Автор - Формуляр
Дата добавления - 10.03.2012 в 23:00
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!