численные методы. решение нелинейных уравнений

<< < (5/11) > >>

Edifier:
а понял

Код:

//      __fastcall TForm1::TForm1(TComponent* Owner)
//        : TForm(Owner)

а надо так
 
Код:

      __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

Edifier:
Код:

я извеняюсь за вопрос не в тему, а как сделать ещё в borlande с++ расчет модифицированного ньютона и комбинированного метода хорд и касательных

а что это?  :D
вкратце суть метода

leahov:
суть методов такова, метод ньютона (он же метод касательных) это Метод основан на замене функции f(x) на каждом шаге итерационного процесса поиска касательной, пересечение которой с осью абсцисс дает приближение корня. его формула Xn+1 = X n - (f (Xn / f ' (Xn), модифицированный метод ньютона это Этот метод заключается в том, что вместо вычисления производной на каждом шаге поиска находится ее приближенное значение с помощью конечных разностей и формула его Xn+1 = X n - (f (Xn / f ' (X0) )
комбинированный метод хорд и касательных это метод основаный на построении схематического графика функции, определении интервалов его пересечения с осью абсцисс и по-следующим «сжатием» этого интервала при помощи строимых хорд и ка-сательных к графику этой функции. формулу если надо напишу но смысл что хорда и касательная вычисляется одновременно а не отдельно

leahov:
если поможет могу вылажить листинг для комбинированного и бисекций (деление попалам) , но в питоне, товарищ по универу поделился, впринципе тот же си

Код
import sys
 
 
def f(x):
   return x**3 + 3*(x**2) - 24*x + 1
 
def fdx(x):
   return 3*(x**2) + 6*x - 24
 
def fd2x(x):
   return 6*x + 6
 
def go_combined(x0, t0, epsilon, step):
   if abs(x0 - t0) < epsilon:
       print 'x: ', (x0+t0)/2, '\nf(x): ', f((x0+t0)/2), '\nsteps: ', step
       return
 
   x = x0 - f(x0)*(t0-x0)/(f(t0)-f(x0))
   t = t0 - f(t0)/fdx(t0)
 
   go_combined(x, t, epsilon, step + 1)
 
def combined():
   data = input('\n\nData (a, b, epsilon): ')
   ain, bin, epsilonin = data
 
   a, b, epsilon = float(ain), float(bin), float(epsilonin)
 
   if abs(f(a)*fd2x(a)) == f(a)*fd2x(a) \
       and \
       abs(f(b)*fd2x(b)) == f(b)*fd2x(b):
       print '\nInvalid range'
       combined()
   else:
       x0 = a
       t0 = b
       if f(x0)*fd2x(x0) > 0:
           x0 = b
           t0 = a
       print('===================================')
       go_combined(x0, t0, epsilon, 1)
       print('===================================\n\n')
 
def go_bisection(a, b, epsilon, step):
   x = (a+b)/2
 
   if f(a)*f(x) < 0:
       b = x
   else:
       a = x
 
   if abs(b-a) < epsilon:
       print 'abs(b-a): ', abs(b-a), '\nx: ', x, '\nf(x): ', f(x), '\nsteps: ', step
   else:
       go_bisection(a, b, epsilon, step + 1)
 
def bisection():
   data = input('\n\nData (a, b, epsilon): ')
   ain, bin, epsilonin = data
 
   a, b, epsilon = float(ain), float(bin), float(epsilonin)
 
   if f(a)*f(b) > 0:
       print '\nInvalid range'
       bisection()
   else:
       print('===================================')
       go_bisection(a, b, epsilon, 1)
       print('===================================\n\n')
 
 
def selectmethod():
   data = input('Method:\n1. Combined\n2. Bisection\n\n3.Exit\n: ')
   if data == 1:
       combined()
       selectmethod()
   elif data == 2:
       bisection()
       selectmethod()
   else:
       return
 
def main():    
   selectmethod()
 
 
 
if __name__ == '__main__':
   main()
 
 
 

oxotnik:
уже ж все разжевали как в борлмнд переводить...
что тут непонятного?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница