Здравствуйте!
Подскажите, подалуйста! Мне нужно найти экстремумы функции методом поразрядного приближения. Delphi выдает Floating point division by zero. Где здесь ошибка?
Код:
function F1(x: real):real;
begin
F1:=Ln(x)/Sqrt(x);
end;
procedure TForm1.Result1Click(Sender: TObject);
const n=10;
var
h,x: real;
begin
try
eps:=StrToFloat(Trim(Edit2.Text)); //преобразуем ввод в число
except //если возникла ошибка
ShowMessage('Неверно задана точность');
Edit2.SetFocus;
Exit;
end;
try
a:=StrToFloat(Trim(Edit3.Text)); //преобразуем ввод в число
except //если возникла ошибка
ShowMessage('Неверно задана нижняя граница исследуемого интервала');
Edit3.SetFocus;
Exit;
end;
try
b:=StrToFloat(Trim(Edit4.Text)); //преобразуем ввод в число
except //если возникла ошибка
ShowMessage('Неверно задана верхняя граница исследуемого интервала');
Edit4.SetFocus;
Exit;
end;
if a<=0 then
begin
ShowMessage('Нижняя граница интервала не входит в область допустимых значений функции');
Edit3.SetFocus;
Exit;
end;
if b<a then
ShowMessage('Значение нижней границы исследуемого интервала не должно превышать значение верхней')
else
begin
h:=(b-a)/n;
begin
c:=a;
d:=b;
while h>=eps do
begin
begin
while x<=d do
begin
x:=c+h;
Xmin:=c;
if F1(x)<F1(Xmin) then Xmin:=x;
end;
end;
if Xmin=a then
begin
c:=Xmin;
d:=Xmin+h;
h:=h/n;
end;
if Xmin=b then
begin
c:=Xmin-h;
d:=Xmin;
h:=h/n;
end;
if (Xmin<>a) or (Xmin<>b) then
begin
c:=Xmin-h;
d:=Xmin+h;
h:=h/n;
end;
end;
end;
begin
c:=a;
d:=b;
while h>=eps do
begin
begin
while x<=d do
begin
x:=c+h;
Xmax:=c;
if F1(x)>F1(Xmax) then Xmax:=x;
end;
end;
if Xmax=a then
begin
c:=Xmax;
d:=Xmax+h;
h:=h/n;
end;
if Xmax=b then
begin
c:=Xmax-h;
d:=Xmax;
h:=h/n;
end;
if (Xmin<>a) or (Xmin<>b) then
begin
c:=Xmax-h;
d:=Xmax+h;
h:=h/n;
end;
end;
end;
end;
Label15.Caption:=FloatToStrF(F1(Xmin),ffFixed,7,7);
Label14.Caption:=FloatToStrF(F1(Xmax),ffFixed,7,7);
end;