Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.10.2012, 22:11   #1 (permalink)
ayPinki
Member
 
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Половинное деление, метод ньютона, Pascal

Исправьте ошибки пожалуйста, сами формулы записаны правильно. точность e=0.00001

Половинное деление...
Код:
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.
ayPinki вне форума   Ответить с цитированием

Старый 07.10.2012, 22:11
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Не исключено, что ваша проблема уже решена в аналогичных топиках

Решить систему уравнений методом Ньютона, Pascal
Метод Ван Хао C++
Метод Рунге-Кутта-Мерсона в Turbo Pascal
Turbo Pascal, метод Симпсона
Разработать прикладное дополнение для решения нелинейных уравнений методом Ньютона
Метод Ньютона и Хука-Дживса

Старый 07.10.2012, 22:32   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от ayPinki Посмотреть сообщение
Метод Ньютона
Код:
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.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 08.10.2012, 19:56   #3 (permalink)
ayPinki
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.
ayPinki вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 05:01.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.