2014 dxdy logo

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

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




 
 Метод Ньютона (VBA)
Сообщение26.05.2011, 19:40 
Доброго времени суток!
Возникла проблема с решением задачи по 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 
ладно, я в кое - чем разобрался итак, певый модуль:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
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 
Сами пишите:
caesarus в сообщении #450510 писал(а):
по предварительному (k-ом) приближению исчисляется следующее ((k + 1)-е)
, а у Вас в функции newton() это не так, где-то пропущено
Код:
x1=x2

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

 
 
 
 Re: Метод Ньютона (VBA)
Сообщение29.05.2011, 11:37 
я зделал все рекомендации х1 = х2 на свое место вставил, скобки убрал, но призапуске excel напросто зависает, а дисп задач говорит что 4 ядра загружены чуть меньше чем на половину.

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group