pascal метод касательных



Автор Kristina Larionova задал вопрос в разделе Другие языки и технологии

Составить программу на языке Pascal,численно решающую уравнение с одной неизвестной методом касательных и методом хорд. и получил лучший ответ

Ответ от Kelavric kelavric[гуру]
Касательных:
PROGRAM Newton;
FUNCTION F(x:real):real;
BEGIN
F := (((x-26)*x+131)*x-226)*x+120;
END;
FUNCTION dF(x:real):real;
BEGIN
dF := ((4*x-78)*x+262)*x-226;
END;
VAR
eps, x, y :real;
BEGIN
eps := 1e-4;
x := 21.0;
y := F(x);
WHILE abs(y) > eps DO
BEGIN
x := x - y / dF(x);
y := F(x);
END;
WriteLn(x, F(x));
END.
Хорд - аналогично, но лень рисовать.
Globe
Просветленный
(24604)
Вот это меня смущает:
begin
x:=x0;
x0:=x;
Зачем? Ведь ни x, ни x0 еще не инициализированы.
Дальше:
x0:=21.0;
repeat
x0:=x;
Сначала присваиваем x0 начальное значение, а внутри цикла на первом же шаге его затираем мусором из х. Это как-то неправильно.
Наконец,
until (abs(x-x0)<e);
Нам же не малость шага интересна, а малость целевой функции?

Ответ от Cublen[гуру]
примени эту программу к своей функции
program integral; {*************** ***********************}
uses crt;
const n0=20;
var
ntek:integer;
a,b,j1,j2,e:real;
function fun(x:real):real;
begin fun:=sin(x);end;
function trap(n:integer;a,b:real{;function f:real}):real;
var i:integer;
h,s:real;
begin
h:=(b-a)/n;
s:=(fun(a)+fun(b))/2;
for i:=1 to n-1 do s:=s+fun(a+i*h);
trap:=h*s;
end;{trap}
BEGIN clrscr; writeln('vvesti A, B i E');
readln(a,b,e); {b:=pi;}
j1:=0;
ntek:=n0;
repeat
j2:=j1;
j1:=trap(ntek,a,b{,fun}); writeln('j2=',j2:8:6,' j1=',j1:8:6);
ntek:=2*ntek;
until abs(j1-j2)<=e;
writeln('y=',j1:8:5);
readkey;
END.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Составить программу на языке Pascal,численно решающую уравнение с одной неизвестной методом касательных и методом хорд.
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*