Что такое Inc(i) ?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Что такое Inc(i) ?

Сообщение jet »

Вот, искал инфу по одномерной минимизации, и нашел:

Код: Выделить всё

    (*************************************************************************
    Процедура минимизации значения функции методом золотого сечения.
     
    Оптимизирует функцию одного  переменного F.
     
    Параметры:
        A,B      - отрезок [A,B], на котором ищется минимум функции F.
        N        - число шагов метода
     
    После выхода переменные A и B содержат границы   отрезка,  на  котором
    находится решение задачи.
     
    Алгоритм проводит 2+N вычислений функции F.
    *************************************************************************)
    procedure GoldenSectionOptimize(var A : Double;
         var B : Double;
         const N : Integer);
    var
        i : Integer;
        S1 : Double;
        S2 : Double;
        U1 : Double;
        U2 : Double;
        FU1 : Double;
        FU2 : Double;
    begin
        S1 := (3-Sqrt(5))/2;
        S2 := (Sqrt(5)-1)/2;
        U1 := A+S1*(B-A);
        U2 := A+S2*(B-A);
        FU1 := F(U1); <--- как это понимать ?  :unsure:
        FU2 := F(U2);
        i:=1;
        while i<=N do
        begin
            if FU1<=FU2 then
            begin
                B := U2;
                U2 := U1;
                FU2 := FU1;
                U1 := A+S1*(B-A);
                FU1 := F(U1);
            end
            else
            begin
                A := U1;
                U1 := U2;
                FU1 := FU2;
                U2 := A+S2*(B-A);
                FU2 := F(U2);
            end;
            Inc(i);
        end;
    end;

Что ето такое? Inc(i);
В конце перед предпоследним end.
Только отвечать просьба как для средних умов)))))
Заранее спасибо за ответы.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Inc(i)
Dec(i)

увеличивают, уменьшают значение целого числа на 1

http://www.realcoding.net/article/view/734

А гугл что, отключили ?
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Сообщение jet »

Пардон, просто мозги кипят, не сообразил.
А контексте этой программы зачем это нужно?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Теоретически эта команда быстрее , чем другие способы
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Сообщение jet »

Все, до меня дошло.
Всем спасибо за участие.
ЗЫ Кто-нибудь может посоветовать примеры кодов по численным методам на паскале?
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Google может. Сайтов с исходниками на паскале как у дурака фантиков.
ЗЫ. А какие методы интересуют? Их тысячи.
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Сообщение jet »

- одномерная минимизация функции методом золотого сечения;
- вычисление корней полинома методом хорд(способом пропорциональных частей);
- решение системы линейных алгебраических уравнений методом Гаусса;
- решение системы линейных алгебраических уравнений методом Зейделя;
- численное интегрирование (по формуле Симпсона);
- решение дифференциального уравнения методом Эйлера(задача Коши);
- и еще какая-то страшная задача, в которой упоминается интерполяционный многочлен Лагранжа.
Большинство из вышеперечисленных слов меня пугают одним своим звучанием.
При этом подразумевается, что я еще и работающие программки нацарапать должен.
Вот такая нелегкая доля заочника)))))
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

Ну тогда велкам в раздел помощи за вознаграждение. Там многое NTFS решает :)
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Вот такая нелегкая доля заочника

Заочником быть тяжело. Сам не был, но догадываюсь т.к. учился и на дневном и на вечернем...
Но! Я бы Вам посоветовал математику этих методов поучить. В жизни пригодится. Тем более что сложного там ничего нет. Это самое простое из прикладной математики.
Есть такая простенькая книжка "Решение инженерных задач на ЭВМ" (в инете она есть http://www.twirpx.com/file/9706/ и еще много где). Там правда примеры на фортране, но достаточно просто описаны требуемые вам численные методы.
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Сообщение jet »

Язык большого значения не имеет, главное логику алгоритма понять. Препод тоже не по паскалю рекомендовал книгу.)))))
А за ответ спасибо. Обязательно последую рекомендациям.

Добавлено спустя 34 минуты 29 секунд:
Вот, господа.
Выношу на суд то, что я считаю программой.
Задача: найти минимум на указанном отрезке (а=1,b=-0,85), с точностью до E=0,01.
F(x)=x^2+a*e^(b*x)

Код: Выделить всё

program zadanie_1 
         var a,b,E,x,x1,x2,y1,y2,S : Double;
       
    begin
        write('Введите значение a,   a='); readln(a);
        write('Введите значение b,   b='); readln(b);
        write('Введите значение E,   E='); readln(E);

        S:=(1+sqrt(5))/2;
        repeat
   begin
                   x1 := b-((b-a)/S);
                   x2 := a+((b-a)/S);
                   y1 :=sqr(x1)+(a*(exp(b*x1)));
                   y2 :=sqr(x2)+(a*(exp(b*x2)));
                      if y1>=y2
      then 
          a:=x1
      else
        b:=x2;
     end
          until abs(b-a)<E
        x:=(a+b)/2;
        writeln('При x=',x,' функция имеет минимальное значение на заданном участке');
    end;

Ну, вот так вроде правильно.
Кто-то прокомментирует?
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

1. begin end в конструкции repeat until лишние
2. Что будет если b или x1 или x2 раны нулю? Если есть деление ВСЕГДА надо проверять знаменатель на ноль. Экспоненту тоже.
3. Цикл repeat until имеет способность никогда не заканчиваться. Следует итерацию ограничить некоторым числом. Например 50. Т.е. задать переменную значение которой будет на каждом шаге итерации увеличиваться.

Код: Выделить всё

var
  I: Integer;
.......

i:=1;
repeat
......
Inc(I);
until (I>50) or (abs(d-a)<E);

if (abs(d-a)<E) then
  // Решение найдено
else
 // решение не найдено за 50 итераций


Ну что-то типа этого.
jet
новенький
Сообщения: 16
Зарегистрирован: 30.10.2011 22:21:49

Сообщение jet »

Конструктивно.
Большое спасибо!
Так и умным стать можно)))))))

Добавлено спустя 5 минут 7 секунд:
tema писал(а):Ну тогда велкам в раздел помощи за вознаграждение. Там многое NTFS решает :)

Если бы я был готов платить за контрольные, я бы их не делал.
Все на уровне кафедры решается даже без наличия контрольной, в итоге дешевле выходит, чем купить контрольные.
Просто хочется разобраться самому. Если у меня маленький базис знаний по математике и программированию, еще не значит, что я не хочу узнать что-то новое.
Но в любом случае спасибо)))
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Платить за контрольные - тупик. Учатся для себя а не для зачета в зачетке.
По мне так лишних знаний не бывает, ну кроме только некоторых тайн за знание к которых ногти клещами рвать начинают. :D
Ответить