07.10.2012, 22:11 | #1 (permalink) |
Member
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Половинное деление, метод ньютона, Pascal
Половинное деление... Код:
program mdp; function f(x: real): real; begin f:=exp(ln(0.5)*x)+1-exp(ln(x-2)*2); end; var a, b, e, c, x: real; begin a:=-7; b:=-5; write ('e='); read(e); c:=(a+b)/2; while abs(b-a)>e do begin if f(a)*f(c)<0 then b:=c else a:=c; c:=(a+b)/2; end; x:=(a+b)/2; writeln ('x=',x:3:3,' f(x)=',f(x):4:4); end. Код:
uses Crt; var x,a,b,e,x_old: real; function f1(z: real): real; {Основная функция} begin f1:= x*x*x + x*x*2 + 2; end; function f2(z:real): real; {Производная от основной функции} begin f2:=3*x*x+4*x ; end; begin Clrscr; a:=-3;b:=1; write('e=');readln(e); clrscr; if f1(a)*f2(a)>0 then x:=a else x:=b; while abs(f1(x))>e do //некорректно здесь, мне подсказывают... begin x:=x-f1(x)/f2(x); end; Writeln (' В интервале от ',a:0:0,' до ',b:0:0,' с погрешностью ',e:0:5); Writeln ('x=',x:0:5,' f(x)=',f1(x):0:5); Readln end. |
07.10.2012, 22:11 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не исключено, что ваша проблема уже решена в аналогичных топиках Решить систему уравнений методом Ньютона, Pascal Метод Ван Хао C++ Метод Рунге-Кутта-Мерсона в Turbo Pascal Turbo Pascal, метод Симпсона Разработать прикладное дополнение для решения нелинейных уравнений методом Ньютона Метод Ньютона и Хука-Дживса |
07.10.2012, 22:32 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Код:
uses Crt; var x,a,b,e,x_old: real; function f1(z: real): real; {Основная функция} begin f1:= x*x*x + x*x*2 + 2; end; function f2(z:real): real; {Производная от основной функции} begin f2:=3*x*x+4*x ; end; begin Clrscr; a:=-3; b:=1; write('e='); readln(e); clrscr; if f1(a)*f2(a)>0 then x:=a else x:=b; x_old:=x+2*e; while abs(x-x_old)>e do begin x_old:=x; x:=x-f1(x)/f2(x); end; Writeln (' В интервале от ',a:0:0,' до ',b:0:0,' с погрешностью ',e:0:5); Writeln ('x=',x:0:5,' f(x)=',f1(x):0:5); Readln end. |
08.10.2012, 19:56 | #3 (permalink) |
Member
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вот половинное деление, а как сделать чтобы вывел все ответы т.к. по графику видно что там 2 корня...
Код:
program PRO; function f(x: real): real; begin f:=exp(ln(0.5)*x)+1-(x-2)*(x-2); end; var a, b, e, c, x: real; begin a:=-10; b:=6; write ('e='); read(e); c:=(a+b)/2; while abs(b-a)>e do begin if f(a)*f(c)<0 then b:=c else a:=c; c:=(a+b)/2; end; x:=(a+b)/2; writeln ('x=',x:3:3,' f(x)=',f(x):4:4); end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|