IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> метод Фибоначчи, где ошибка??
Catty
сообщение 25.09.2005 14:10
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


выдает минимум не точно!
Код

uses crt;

const E=0.001; l=0.1;

var  x1, x2, y1, y2, a, a1, b, b1, xmin: Extended;
    n, k, it: Word;
{---------------------------}
function f(n: Word): Comp;
var fa, fb, fc: Comp;
   i:Integer;
begin
   fa:=0; fb:=1;
   for i:= 3 to n do begin
                     fc:=fa+fb;
                     fa:=fb;
                     fb:=fc;
                     f:=fc;
                     end;
end;
{---------------------------}
BEGIN   clrscr;
       a:=2; b:=4; a1:=a; b1:=b; n:=3;
       While f(n)< (b1-a1)/l do n:=n+1;
       Writeln('n= ',n,'   f(n)= ',f(n):3:0);
       x1:= a+f(n-2)/f(n)*(b-a);
       x2:= a+f(n-1)/f(n)*(b-a);
       y1:= 5*sin(x1)*sin(x1)-1/(sqr(x1)+1)+4;
       y2:= 5*sin(x2)*sin(x2)-1/(sqr(x2)+1)+4;
        k:= 1; it:=0;
       Repeat
       it:=it+1;
       if y1>y2 then begin
                     a:=x1;
                     x1:=x2;
                     x2:=a+f(n-k-1)/f(n-k)*(b-a);
                     y2:=5*sin(x2)*sin(x2)-1/(sqr(x2)+1)+4;
                     k:=k+1;
                     end
       else  begin
                     b:=x2;
                     x2:=x1;
                     x1:=a+f(n-k-2)/f(n-k)*(b-a);
                     y1:=5*sin(x1)*sin(x1)-1/(sqr(x1)+1)+4;
                     k:=k+1;
                     end;
       Until k=n-2;
       x2:=x1+E;
       y1:=5*sin(x1)*sin(x1)-1/(sqr(x1)+1)+4;
       y2:=5*sin(x2)*sin(x2)-1/(sqr(x2)+1)+4;
       if y1<y2 then b:=x2
                else a:=x1;
       Writeln ('Optimalnoe reshenie v intervale [',a1:6:2,',', b1:6:2,']');
       Writeln  ('Kilkist iteracij', it:6);
       if a=a1 then xmin:= a1 else
       if b=b1 then xmin:= b1 else xmin:=(a+b)/2;
  Writeln ('Pri x=',xmin:7:2,' funkcija prinimaet min znachenie ',
           (5*sin(xmin)*sin(xmin)-1/(sqr(xmin)+1)+4):8:3);
  Readln;
END.


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.09.2005 15:38
Сообщение #2


Гость






Catty, что-то не то с алгоритмом. Попробуй перед Until поставить
       writeln(' x1 = ', x1:8:3, ' y1 = ', y1:8:3,
' x2 = ', x2:8:3, ' y2 = ', y2:8:3);
для контроля, и посмотри, какие значения x, y присутствуют... blink.gif
Цитата(Results)
n= 9  f(n)=  21
x1 =    2.762 y1 =    4.571 x2 =    3.238 y2 =    3.959
x1 =    3.238 y1 =    4.571 x2 =    3.524 y2 =    4.621
x1 =    3.048 y1 =    3.947 x2 =    3.238 y2 =    4.621
x1 =    2.952 y1 =    4.074 x2 =    3.048 y2 =    4.621
x1 =    2.857 y1 =    4.285 x2 =    2.952 y2 =    4.621
x1 = 1718815233565055.000 y1 =    6.057 x2 =    2.857 y2 =    4.621
x1 =    2.857 y1 =    6.057 x2 = -31020420974920486000000000000000.000 y2 =  4.8113325873064343E+0063
Optimalnoe reshenie v intervale [  2.00,  4.00]
Kilkist iteracij    6
Pri x=  2.90 funkcija prinimaet min znachenie    4.169
 К началу страницы 
+ Ответить 
Catty
сообщение 25.09.2005 20:04
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


о да! и как это исправить??....я не знаю.... sad.gif


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Catty
сообщение 26.09.2005 21:13
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


HEELP!! Ну что никто не может мне помочь!!??


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 11:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"