Аппроксимация функции методом наименьших квадратов

Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 12:37, курсовая работа

Краткое описание

Целью курсовой работы является углубление знаний по информатике, развитие и закрепление навыков работы с табличным процессором Microsoft Excel и применение их для решения задач с помощью ЭВМ из предметной области, связанной с исследованиями.
В каждом задании формулируются условия задачи, исходные данные, форма выдачи результатов, указываются основные математические зависимости для решения задачи. В соответствии с методом решения задачи разрабатывается алгоритм решения, который представляется в графической форме. Разработанная программа проходит этап отладки, в процессе которого обнаруживаются ошибки, допущенные при составлении алгоритма и написании программы. Контрольный расчет позволяет убедится в правильности работы программы.

Содержимое работы - 1 файл

Курсовая Аппроксимация функции методом наименьших квадратов ТПП-02 Вар.6.doc

— 630.50 Кб (Скачать файл)

         delta2_13,delta3_13                      -      значение определителей  для решения системы (13)  по формулам Крамера

         a1_13,a2_13,a3_13                        -      искомые коэффициенты  системы (13)

         delta_15,delta1_15,delta2_15             -       значение определителей  для решения системы (15)

                                                         по формулам Крамера

         c_15,a2_15,a1_15                         -      искомые коэффициенты  системы (15)

         Xsr,Ysr                                  -      средние значения x и y

         X_XsrY_Ysr((X-Xср)(Y-Yср)),

         X_Xsr2((X-Xср)^2),Y_Ysr2((Y-Yср)^2),

         ost_lin(a1+a2*x-y),ost_kv(a1+a2*x+a3*x^2-y),ost_exp(a1*exp(a2*x)-y),

         reg_lin(a1+a2*x-Yср),reg_kv(a1+a2*x +a3*x^2-Yср),reg_exp(a1*exp(a2*x)-Yср)    -    переменные для промежуточных расчетов  (согласно таблице 7)

         SumX_XsrY_Ysr,SumX_Xsr2,SumY_Ysr2

         Sumost_lin,Sumost_kv,Sumost_exp

         Sumreg_lin,Sumreg_kv,Sumreg_exp           -   их суммы

         Ro                                        -   коэффициент корреляции

                                                           для линейной аппроксимации

         R2_lin                                    -   коэффициент детерминированности  (R^2)

                                                           для линейной аппроксимации

         R2_kv                                     -  коэффициент детерминированности (R^2)

                                                           для квадратичной аппроксимации

         R2_exp                                    - коэффициент детерминированности (R^2)

                                                           для экспоненциальной аппроксимации

                     Описание типов}

         type

              A = array [1..25] of Real;

                  {Описание переменных}

         var

           date:text;

           i:Integer;

           X,Y:A;

           x2,xy,x3,x4,x2y,lny,xlny,Sumx,Sumy,Sumx2,Sumxy:Real;

           Sumx3,Sumx4,Sumx2y,Sumlny,Sumxlny:Real;

           delta_11,delta1_11,delta2_11,a1_11,a2_11:Real;

           delta_13,delta1_13,delta2_13,delta3_13,a1_13,a2_13,a3_13:Real;

           delta_15,delta1_15,delta2_15,c_15,a2_15,a1_15:Real;

           Xsr,Ysr,X_XsrY_Ysr,X_Xsr2,Y_Ysr2,ost_lin,ost_kv,ost_exp:Real;

        SumX_XsrY_Ysr,SumX_Xsr2,SumY_Ysr2,Sumost_lin,Sumost_kv,Sumost_exp:Real;

           Ro,R2_lin,R2_kv,R2_exp,reg_lin,reg_kv:Real;

           reg_exp,Sumreg_lin,Sumreg_kv,Sumreg_exp:Real;

                             {Основная программа}

         begin

          Assign(date,'kurs.dat');

             {Связывает переменную date с файлом kurs.dat,

              который находится на диске  С в каталоге kursinf}

          Rewrite(date);{Открываем этот файл}

             {Ввод начальных значений массивов X и Y}

           for i:=1 to 25 do begin

                   WRITE('Введите X[',i,'] = ');

                   READLN(X[i]);

                   WRITELN;

                   WRITE('Введите Y[',i,'] = ');

                   READLN(Y[i]);

                   WRITELN;

                   end;

             {Выполняем промежуточные расчеты согласно таблице 2}

           Sumx:=0;

Sumy:=0;

           Sumx2:=0;

           Sumxy:=0;

           Sumx3:=0;

           Sumx4:=0;

           Sumx2y:=0;

           Sumlny:=0;

           Sumxlny:=0;

           for i:=1 to 25 do    begin

               x2:=X[i]*X[i];

               xy:=X[i]*Y[i];

               x3:=X[i]*X[i]*X[i];

               x4:=X[i]*X[i]*X[i]*X[i];

               x2y:=X[i]*X[i]*Y[i];

               lny:=LN(Y[i]);

               xlny:=X[i]*lny;

               Sumx:=Sumx+X[i];

               Sumy:=Sumy+Y[i];

               Sumx2:=Sumx2+x2;

               Sumxy:=Sumxy+xy;

               Sumx3:=Sumx3+x3;

               Sumx4:=Sumx4+x4;

               Sumx2y:=Sumx2y+x2y;

               Sumlny:=Sumlny+lny;

               Sumxlny:=Sumxlny+xlny;

               end;

         {Аппроксимируем функцию y=f(x) линейной  функцией у=a1+a2*x

                   (находим коэффициенты a1 и a2)}

           delta_11:=25*Sumx2-Sumx*Sumx;

           delta1_11:=Sumy*Sumx2-Sumx*Sumxy;

           delta2_11:=25*Sumxy-Sumy*Sumx;

           a1_11:=delta1_11/delta_11;

           a2_11:=delta2_11/delta_11;

        {Аппроксимируем функцию y=f(x) квадратичной функцией y=a1+a2*x+a3*x^2

                    (находим коэффициенты a1, a2 и a3)}

          delta_13:=25*Sumx2*Sumx4+Sumx*Sumx3*Sumx2+Sumx*Sumx3*Sumx2-Sumx2*Sumx2*Sumx2-Sumx*Sumx*Sumx4-25*Sumx3*Sumx3;

      delta1_13:=Sumy*Sumx2*Sumx4+Sumxy*Sumx3*Sumx2+Sumx*Sumx3*Sumx2y-Sumx2y*Sumx2*Sumx2-Sumx3*Sumx3*Sumy-Sumxy*Sumx*Sumx4;

          delta2_13:=25*Sumxy*Sumx4+Sumy*Sumx3*Sumx2+Sumx*Sumx2y*Sumx2-Sumx2*Sumx2*Sumxy-25*Sumx2y*Sumx3-Sumy*Sumx*Sumx4;

          delta3_13:=25*Sumx2*Sumx2y+Sumxy*Sumx*Sumx2+Sumx*Sumx3*Sumy-Sumy*Sumx2*Sumx2-Sumx*Sumx*Sumx2y-Sumxy*Sumx3*25;

          a1_13:=delta1_13/delta_13;

          a2_13:=delta2_13/delta_13;

          a3_13:=delta3_13/delta_13;

        {Аппроксимируем функцию y=f(x) экпоненциальной функцией y=a1*exp(a2*x)

                      (находим коэффициенты a1 и a2)}

          delta_15:=25*Sumx2-Sumx*Sumx;

          delta1_15:=Sumlny*Sumx2-Sumx*Sumxlny;

          delta2_15:=25*Sumxlny-Sumlny*Sumx;

          c_15:=delta1_15/delta_15;

          a2_15:=delta2_15/delta_15;

          a1_15:=exp(c_15);

         {Находим среднее арифметическое значений x и y}

          Xsr:=Sumx/25;

          Ysr:=Sumy/25;

         {Выполняем промежуточные расчеты согласно таблице 7}

         SumX_XsrY_Ysr:=0;

         SumX_Xsr2:=0;

         SumY_Ysr2:=0;

         Sumost_lin:=0;

         Sumost_kv:=0;

         Sumost_exp:=0;

         Sumreg_lin:=0;

         Sumreg_kv:=0;

         Sumreg_exp:=0;

         for i:=1 to 25 do begin

             X_XsrY_Ysr:=(X[i]-Xsr)*(Y[i]-Ysr);

             X_Xsr2:=(X[i]-Xsr)*(X[i]-Xsr);

             Y_Ysr2:=(Y[i]-Ysr)*(Y[i]-Ysr);

             ost_lin:=((a1_11+a2_11*X[i])-Y[i])*((a1_11+a2_11*X[i])-Y[i]);

             ost_kv:=((a1_13+a2_13*X[i]+a3_13*X[i]*X[i])-Y[i])*((a1_13+a2_13*X[i]+

                     a3_13*X[i]*X[i])-Y[i]);

             ost_exp:=((a1_15*exp(a2_15*X[i]))-Y[i])*((a1_15*exp(a2_15*X[i]))-Y[i]);

             reg_lin:=((a1_11+a2_11*X[i])-Ysr)*((a1_11+a2_11*X[i])-Ysr);

             reg_kv:=((a1_13+a2_13*X[i]+a3_13*X[i]*X[i])-Ysr)*((a1_13+a2_13*X[i]+

                     a3_13*X[i]*X[i])-Ysr);

             reg_exp:=((a1_15*exp(a2_15*X[i]))-Ysr)*((a1_15*exp(a2_15*X[i]))-Ysr);

             SumX_XsrY_Ysr:=SumX_XsrY_Ysr+X_XsrY_Ysr;

             SumX_Xsr2:=SumX_Xsr2+X_Xsr2;

             SumY_Ysr2:=SumY_Ysr2+Y_Ysr2;

             Sumost_lin:=Sumost_lin+ost_lin;

             Sumost_kv:=Sumost_kv+ost_kv;

             Sumost_exp:=Sumost_exp+ost_exp;

             Sumreg_lin:=Sumreg_lin+reg_lin;

             Sumreg_kv:=Sumreg_kv+reg_kv;

             Sumreg_exp:=Sumreg_exp+reg_exp;

             end;

         {Находим коэффициент корреляции (для линейной аппроксимации)}

         Ro:=SumX_XsrY_Ysr/(sqrt(SumX_Xsr2*SumY_Ysr2));

         {Находим коэффициенты детерминированности}

         {Для линейной аппроксимации}

          R2_lin:=1-(Sumost_lin/(Sumost_lin+Sumreg_lin));

         {Для квадратичной аппроксимации}

          R2_kv:=1-(Sumost_kv/(Sumost_kv+Sumreg_kv));

         {Для экспоненциальной аппроксимации}

          R2_exp:=1-(Sumost_exp/(Sumost_exp+Sumreg_exp));

        {Вывод результатов}

        WRITELN;

        WRITELN(date,'      Результаты расчета');

        WRITELN(date,'    коэффициентов аппроксимации');

        WRITELN(date);

        WRITELN(date,'    Для линейной аппроксимации');

        WRITELN(date);

        WRITE(date,'   a1=',a1_11:8:4); Write(date,'   ');

        WRITE(date,'   a2=',a2_11:7:4);

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'    Для квадратичной аппроксимации');

        WRITELN(date);

        WRITE(date,'   a1=',a1_13:8:5); Write(date,'  ');

        WRITE(date,'   a2=',a2_13:7:5); Write(date,'  ');

        WRITE(date,'   a3=',a3_13:7:5);

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'    Для экспоненциальной аппроксимации');

        WRITELN(date);

        WRITELN(date);

        WRITE(date,'   a1=',a1_15:7:5); Write(date,'   ');

        WRITE(date,'   a2=',a2_15:7:5);

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'      Результаты расчета коэффициента');

        WRITELN(date,'          корреляции (для линейной)');

        WRITE(date,'   Ro=',Ro:7:5);

        WRITELN(date,'      Результаты  расчета коэффициентов');

        WRITELN(date,'          детерминированности');

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'    Для линейной аппроксимации');

        WRITELN(date);

        WRITE(date,'   R2_lin=',R2_lin:7:5);

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'    Для квадратичной аппроксимации');

        WRITELN(date);

        WRITE(date,'   R2_kv=',R2_kv:7:5);

        WRITELN(date);

        WRITELN(date);

        WRITELN(date,'    Для экспоненциальной аппроксимации');

        WRITELN(date);

        WRITE(date,'   R2_exp=',R2_exp:7:5);

        Close(date);{Закрытие файла, связанного с переменной date}

        WRITELN('      Результаты расчета');

        WRITELN('    коэффициентов аппроксимации');

        WRITELN;

        WRITELN('    Для линейной аппроксимации');

        WRITELN;

        WRITE('   a1=',a1_11:8:4); Write('   ');

        WRITE('   a2=',a2_11:7:4);

        WRITELN;

        WRITELN('    Для квадратичной аппроксимации');

        WRITELN;

        WRITE('   a1=',a1_13:8:5); Write('  ');

        WRITE('   a2=',a2_13:7:5); Write('  ');

        WRITE('   a3=',a3_13:7:5);

        WRITELN;

        WRITELN('    Для экспоненциальной  аппроксимации');

        WRITELN;

        WRITE('   a1=',a1_15:7:5); Write('   ');

        WRITE('   a2=',a2_15:7:5);

        WRITELN;

        WRITELN('      Нажмите клавишу ENTER...');

        READLN;

        WRITELN('      Результаты расчета коэффициента');

        WRITELN('          корреляции (для линейной)');

        WRITELN;

        WRITE('   Ro=',Ro:7:5);

        WRITELN;

        WRITELN('       Результаты расчета коэффициентов');

        WRITELN('          детерминированности');

        WRITELN;

        WRITELN('    Для линейной аппроксимации');

        WRITELN;

        WRITE('   R2_lin=',R2_lin:7:5);

        WRITELN;

        WRITELN('    Для квадратичной аппроксимации');

       WRITELN;

        WRITE('   R2_kv=',R2_kv:7:5);

        WRITELN;

        WRITELN('    Для экспоненциальной аппроксимации');

        WRITELN;

        WRITE('   R2_exp=',R2_exp:7:5);

Информация о работе Аппроксимация функции методом наименьших квадратов