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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++Builder] Регулятор 
V
    Опции темы
Bondleha
Дата 24.10.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Суть проблемы такая!! Делаю курсовой!! Расчитываю регулятор!! Нужно получить оптимальные настройки!! НЕ пойму выскакивает ошибка"OverFlow"не могу ввести точно и начальные настройки подскажите в чем дело за ранее благодарен!!
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>
#define N 850

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int ch=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Series1->Clear();
       double q_0=StrToFloat(Edit6->Text),
              q_1=StrToFloat(Edit7->Text),
              q_2=StrToFloat(Edit8->Text);

    double a_1=StrToFloat(Edit1->Text),
              a_2=StrToFloat(Edit2->Text),
              b1=StrToFloat(Edit4->Text),
              b2=StrToFloat(Edit4->Text),
              eps=StrToFloat(Edit9->Text);
        long int n=N,i,j;
        int mc=4;
double e[N],u[N],h0,h1,h2,yq_0[N],yq_1[N],yq_2[N],uq_0[N],uq_1[N],
           uq_2[N],z=5,yz[N];
   double s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,y[N];
 double dj;
  //начальные условия
        for(i=1;i<=mc;i++)
        {
                y[i]=0;
            yq_0[i]=0;
            yq_1[i]=0;
            yq_2[i]=0;
                e[i]=0;

         }
         for(i=1;i<=mc-1;i++)
      {
            yz[i]=0;
            u[i]=0;
            uq_0[i]=0;
            uq_1[i]=0;
            uq_2[i]=0;
      }
           for(i=mc;i<=n;i++) yz[i]=z;
        h0=0.003;
        h1=0.003;
        h2=0.003;
        j=1;
        label:
        s1=s2=s3=0;
        ch++;
        for(i=mc;i<n;i++)
        {
                e[i]=yz[i]-y[i];
                u[i]=u[i-1]+q_0*e[i]+q_1*e[i-1]+q_2*e[i-2];
                y[i]=a_1*y[i-1]+a_2*y[i-2]+b1*u[i]+b2*u[i-1];

                uq_0[i]=uq_0[i-1]+ e[i] +q_0*(-yq_0[i])+q_1*(-yq_0[i-1])+q_2*(-yq_0[i-2]);
                uq_1[i]=uq_1[i-1]+e[i-1]+q_0*(-yq_1[i])+q_1*(-yq_1[i-1])+q_2*(-yq_1[i-2]);
                uq_2[i]=uq_2[i-1]+e[i-2]+q_0*(-yq_2[i])+q_1*(-yq_2[i-1])+q_2*(-yq_2[i-2]);

                yq_0[i+1]=a_1*yq_0[i-1]+a_2*yq_0[i-2]+b1*uq_0[i]+b2*uq_0[i-1];
                yq_1[i+1]=a_1*yq_1[i-1]+a_2*yq_1[i-2]+b1*uq_1[i]+b2*uq_1[i-1];
                yq_2[i+1]=a_1*yq_2[i-1]+a_2*yq_2[i-2]+b1*uq_2[i]+b2*uq_2[i-1];

                s1+=(yz[i]-y[i])*(-yq_0[i]);
                s2+=(yz[i]-y[i])*(-yq_1[i]);
                s3+=(yz[i]-y[i])*(-yq_2[i]);
                }
        dj=sqrt(pow(s1,2)+pow(s2,2)+pow(s3,2));
        Memo1->Lines->Add(dj);
         if(dj>eps)
    {
                if(j != 1)
            {
                        if((s1*s4) > 0)h0=h0*1.9;
                    else h0=h0/3.;
                    if((s2*s5) > 0)h1=h1*1.9;
                    else h1=h1/3.;
                    if((s3*s6) > 0)h2=h2*1.9;
                    else h2=h2/3.;
                }
                else
                {
                        h0=0.0003;
                        h1=0.0003;
                        h2=0.0003;
                }
                q_0=q_0-h0*s1/dj;
                q_1=q_1-h1*s2/dj;
                q_2=q_2-h2*s3/dj;
                j++;
                s4=s1;
                s5=s2;
                s6=s3;
                goto label;
        }
        double q0=floor(q_0*1000000);
       double q1=floor(q_1*1000000);
        double q2=floor(q_2*1000000);
        Edit10->Text=FloatToStr(q0/1000000);
        Edit11->Text=FloatToStr(q1/1000000);
        Edit12->Text=FloatToStr(q2/1000000);
        Edit13->Text=FloatToStr(dj);
        Label3->Caption="Оптимум достигнут!";
        Edit14->Text=IntToStr(ch);
        for(i=mc;i<floor(n/2);i++)
        {
                e[i]=yz[i]-y[i];
                u[i]=u[i-1]+q_0*e[i]+q_1*e[i-1]+q_2*e[i-2];
                y[i]=a_1*y[i-1]+a_2*y[i-2]+b1*u[i]+b2*u[i-1];;

        }
        for(i=1;i<floor(n/2);i++)
        {
                Series1->AddXY(i,y[i],"",clBlack);
        }


}
//---------------------------------------------------------------------------



Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  PID.rar 413,60 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.