Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 15:19   #1
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию Решить методом итераций уравнение VBA

Всем привет.Получил непростое задание(для меня) которое надо решить в VBA,задание заключается в следующем:
Решить методом итераций уравнение х^3 - 3*x + 1 = 0
Для начального приближения х-нулевое = 1.
Точность e = 0,0001
На каждом шаге решения необходимо предусмотреть номера итерации,значения аргумента и функции,результат должен быть в MsgBox.

Так вот что я не понял,так это для чего в этом уравнение дали точность???
Где и в каком месте она должна использоваться?

Прошу вашей помощи!
fd_Nikolas вне форума Ответить с цитированием
Старый 26.06.2012, 16:00   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

а как вы собираетесь иначе остановить вычисления?
вот когда при очередной итерации левая часть уравнения будет отличаться от правой (в вашем случае -- от 0) на величину, по модулю меньшую погрешности -- вот тогда вы и получите искомое решение методом итераций.
учите матчасть. учебник по численным методам, в частности.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 26.06.2012, 16:08   #3
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
а как вы собираетесь иначе остановить вычисления?
вот когда при очередной итерации левая часть уравнения будет отличаться от правой (в вашем случае -- от 0) на величину, по модулю меньшую погрешности -- вот тогда вы и получите искомое решение методом итераций.
учите матчасть. учебник по численным методам, в частности.
Дело в том,что у нас такого предмета как "Численные методы" в помине не было,ну а для решения одного примера - читать учебники по неизвестной мне области,сами понимаете...
fd_Nikolas вне форума Ответить с цитированием
Старый 26.06.2012, 16:35   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

в общем, идея такова -- начальное значение x вам известно.
подставляете его в уравнение, сравниваете с правой частью (с 0, то есть).
разница по модулю больше заданной погрешности, значит, надо изменить значение x на некоторую величину и опять пересчитать... и так до тех пор, пока абсолютное значение разницы не будет меньше погрешности.
как-то так...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 26.06.2012, 17:39   #5
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию

Благодарю за помощь...если что тогда выложу сюда код.
fd_Nikolas вне форума Ответить с цитированием
Старый 26.06.2012, 18:18   #6
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию

Сделал что-то вроде нижеописанного,но ничего не выходит,помогите пож-ста.
Код:
Public Sub vart1()
Dim x As Integer
Dim i As Integer
Dim sum As Integer
Dim cons As Integer
cons = 0.0001
x = 1
Do While sum < cons
sum = x ^ 3 - 3 * x + 1
x = x + cons
MsgBox sum
Loop
End Sub
fd_Nikolas вне форума Ответить с цитированием
Старый 26.06.2012, 18:25   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,377
По умолчанию

Маааленькое замечание.
Для вычисления x преобразуй данное тебе уравнение к виду:
x = f(x).
Тогда, подставив начальное значение в f(x), получим новое x.
И если Dx (разность подставленного и вычисленного) велика, то подставляем среднее между начальным и вычисленным или вновь вычисленное. При этом следует следить за знаком Dx.
В общем, следует отслеживать сходимость вычисления.


Что-то в этом роде ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.06.2012, 23:26   #8
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Маааленькое замечание.
Для вычисления x преобразуй данное тебе уравнение к виду:
x = f(x).
Тогда, подставив начальное значение в f(x), получим новое x.
И если Dx (разность подставленного и вычисленного) велика, то подставляем среднее между начальным и вычисленным или вновь вычисленное. При этом следует следить за знаком Dx.
В общем, следует отслеживать сходимость вычисления.


Что-то в этом роде ...
Видно же что не шарю,зачем такими терминами расписывать?Причем здесь вообще f(x) ?
fd_Nikolas вне форума Ответить с цитированием
Старый 27.06.2012, 09:24   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,377
По умолчанию

Ну, не обижайся. По тому, что написано в первом посте не понять...
В твоем случае:
x=(1+x^3)/3
Если теперь последовательно подставлять xn =1, затем тот х, который получили, и т.д. то см. табличку (это в Calc, но можно и в Экселе).

---- x ------ (1+x^3)/3 ----- Dx
---------------------------------------
1,00000000 0,66666667 0,3333333
0,66666667 0,43209877 0,2345679
0,43209877 0,36022563 0,0718731
0,36022563 0,34891459 0,0113110
0,34891459 0,34749245 0,0014221
0,34749245 0,34732002 0,0001724
0,34732002 0,34729921 0,0000208
0,34729921 0,34729670 0,0000025
0,34729670 0,34729640 0,0000003
0,34729640 0,34729636 0,0000000

При сравнении Dx с eps надо использовать функцию Abs()
Ладно, это тебе подойдет ...
eps = 0.0001
xn = 1
x = (1 + x ^ 3) / 3
While Abs(xn - x) > eps
xn = x
x = (1 + xn ^ 3) / 3
Wend
' А тут выводишь полученное решение

Вроде так должно получиться ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.06.2012, 11:50   #10
fd_Nikolas
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 9
По умолчанию

Благодарю за код,ответ получился 0,так ли должно быть?Я думал просто на каждом шаге должен появляться ответ,а тут он высвечивается 1 раз даже если ответ находится в цикле while

Код:
Public Sub iter()
Dim eps%, xn%, x%

eps = 0.0001
xn = 1
x = (1 + x ^ 3) / 3
While Abs(xn - x) > eps
xn = x
x = (1 + xn ^ 3) / 3
MsgBox x
Wend
End Sub
Я от математики далек,поэтому у меня вопрос,почему вместо заданного уравнения х^3 - 3*x + 1 = 0 в коде (1 + xn ^ 3) / 3 ? Если так и должно быть,то просто скажите что так и должно быть без объяснений
fd_Nikolas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решить СЛАУ методом простых итераций trum Помощь студентам 1 15.04.2012 17:47
решить уравнение методом итераций Evgeniya666777 Помощь студентам 3 16.12.2011 11:13
Решить систему линейных уравнений методом простых итераций на Delphi Кнопик Помощь студентам 2 22.10.2009 16:11
уравнение методом итераций Golovastik Общие вопросы Delphi 2 22.06.2009 15:57
как решить нелинейное уравнение методом простых итераций??? Bonifaciy Помощь студентам 3 13.11.2008 17:30