2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Метод Ньютона (VBA)
Сообщение26.05.2011, 19:40 


02/04/11
44
Киев
Доброго времени суток!
Возникла проблема с решением задачи по VBA.
В общем сама задача:
Написать языке VВА программу приближение корня уравнения f (x) = 0 методом Ньютона. Программ должна состоять из подпрограммы (Sub), реализует собственно метод Ньютона и двух функций (Function), которые возвращают значения функций f (x) и d (x) соответственно. Подпрограмму (SUB) и функции (FUNCTION) оформить как отдельные модули, сделав их видимыми во всем проекте.

Метод Ньютона предназначен для нахождения корня уравнений вида f (x) = 0, где f (x) - дифференцированная функция и d (x) - ее производная. Метод состоит в следующем. Выбирается начальное приближение корня x0. Для облегчения нахождения приближенного значения корня x0 уравнения f (x) = 0, это уравнение часто целесообразно представить в виде g (x) = t (x). Построить графики левой и правой частей и приближенно найти абсциссу точки, в которой графики пересекаются. Затем по формуле xk +1 = xk - f (xk) / d (xk) для k = 0, 1, 2, ..., по предварительному (k-ом) приближению исчисляется следующее ((k + 1)-е) . Процедура выполняется до тех пор, пока | xk + 1 - xk |> $\epsilon$, где $\epsilon$ - некоторое достаточно малое число, например, 0,0001.

функция: $x^ -^2 + \sin(x) + 3 = 0$

У меня вышло написать только 1 модуль:
Используется синтаксис Visual Basic
Option Explicit
 Function f(x) As Double
     f = x ^ -2 + Sin(x) + 3
     
 
End Function
Function d(x) As Double

 d = -2 / x ^ 3 + Cos(x)
 
 
End Function


 


А остальное у меня не выходит. Расскажите как дальше, если можно с кусочками кода.

 Профиль  
                  
 
 Re: Метод Ньютона (VBA)
Сообщение28.05.2011, 21:30 


02/04/11
44
Киев
ладно, я в кое - чем разобрался итак, певый модуль:
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Option Explicit


Sub newton()

Dim x1, E, x2, l As Double

x1 = Val(InputBox("ââåñòè ïî÷. íàáë."))

E = Val(InputBox("ââåñòè òî÷í³ñü"))

Do

x2 = x1 - f(x1) / d(x1)

l = Abs(x2 - x1)

Loop Until l < E

MsgBox "x2 =" & x2

End Sub
 


второй:
Используется синтаксис Visual Basic
Option Explicit
Function d(x) As Variant

d(x) = -2 / x ^ 3 + Cos(x)




End Function
 


третий:
Используется синтаксис Visual Basic
Option Explicit
Function f(x) As Variant


f(x) = x ^ (-2) + Sin(x) + 3



End Function
 


но после ввода данных выходит сообщение типа: Out of stack space. И выделяет строчку с нач. функцией. Скажите, в чем тут причина?

 Профиль  
                  
 
 Re: Метод Ньютона (VBA)
Сообщение29.05.2011, 02:14 
Заслуженный участник


26/07/09
1559
Алматы
2caesarus
Цитата:
но после ввода данных выходит сообщение типа: Out of stack space

Обратите внимание на то, как вы пытаетесь возвратить значение функции: f(x) = x ^ (-2) + Sin(x) + 3. Видите, вы вызываете её через f(x) и пытаетесь к рекурсивно полученному результату присвоить значение выражения x ^ (-2) + Sin(x) + 3. Естественно, что такая бесконечно-глубокая рекурсия почти мгновенно растрачивает все свободное место на стеке и опаньки. :) На самом же деле, синтаксис возврата таков: <имя_функции> = <выражение>, то есть в левой части скобки не нужны.

 Профиль  
                  
 
 Re: Метод Ньютона (VBA)
Сообщение29.05.2011, 10:38 


16/06/10
199
Сами пишите:
caesarus в сообщении #450510 писал(а):
по предварительному (k-ом) приближению исчисляется следующее ((k + 1)-е)
, а у Вас в функции newton() это не так, где-то пропущено
Код:
x1=x2

Кстати, предложенное уравнение вообще не имеет решений. $\min\sin =-1$, а остальные слагаемые положительны...

 Профиль  
                  
 
 Re: Метод Ньютона (VBA)
Сообщение29.05.2011, 11:37 


02/04/11
44
Киев
я зделал все рекомендации х1 = х2 на свое место вставил, скобки убрал, но призапуске excel напросто зависает, а дисп задач говорит что 4 ядра загружены чуть меньше чем на половину.

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group