численные методы. решение нелинейных уравнений
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:
уже ж все разжевали как в борлмнд переводить...
что тут непонятного?
Навигация