Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2010, 15:09   #1
KSuxa1989
 
Регистрация: 04.09.2010
Сообщений: 4
По умолчанию Аппроксимация методом наименьших квадратов

Помогите пожалуйста.....
в паскале составить программу, аппроксимирующую набор экспериментальных точек методом наименьших квадратов
Х: 1 2,2 2,4 2,7 3,1 3,5 4,5 5
У: 2,569 19,144 21,202 25,388 32,263 34,755 28,771 13,541
KSuxa1989 вне форума Ответить с цитированием
Старый 07.09.2010, 18:01   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

это вам нужно
Код:
uses CRT;
const
n=25;{сюда поставьте 8}
type
TArrayXY = array[1..2,1..n] of real;
TArray = array[1..n] of real;
var
 SumX,SumY,SumX2,SumXY,SumX3,SumX4,SumX2Y,SumLnY,SumXLnY: real;
 OPRlin,OPRkvadr,OPRa1,OPRa2,OPRa3:real;
 a1lin,a2lin,a1kvadr,a2kvadr,a3kvadr,a1exp,a2exp,cexp:real;
 Xsr,Ysr,S1,S2,S3,Slin,Skvadr,Sexp:real;
 Kkor,KdetLin,KdetKvadr,KdetExp:real;
 i:byte;
const
{ну а сюда вколотите свои массивы}
ArrayXY:TArrayXY=((12.85,12.32,11.43,10.59,10.21,9.65,9.63,9.22,8.44,8.07,7.74,7.32,7.08,6.87,5.23,5.02,4.65,4.53,3.24,2.55,1.86,1.76,1.11,0.99,0.72) , (154.77
145.59,108.37,100.76,98.32,81.43,80.97,79.04,61.76,60.54,55.86,47.63,48.03,36.85,25.65,24.98,22.87,20.32,9.06,6.23,3.91,3.22,1.22,1.10,0.53));
 begin
 ClrScr;
 SumX:=0.0;
 SumY:=0.0;
 SumXY:=0.0;
 SumX2:=0.0;
 SumX3:=0.0;
 SumX4:=0.0;
 SumX2Y:=0.0;
 SumLnY:=0.0;
 SumXLnY:=0.0;
 { Вычисление сумм x, y, x*y, x^2, x^3, x^4, (x^2)*y, Ln(y), x*Ln(y) }
 for i:=1 to n do
  begin
   SumX:=SumX+ArrayXY[1,i];
   SumY:=SumY+ArrayXY[2,i];
   SumXY:=SumXY+ArrayXY[1,i]*ArrayXY[2,i];
   SumX2:=SumX2+sqr(ArrayXY[1,i]);
   SumX3:=SumX3+ArrayXY[1,i]*ArrayXY[1,i]*ArrayXY[1,i];
   SumX4:=SumX4+sqr(ArrayXY[1,i])*sqr(ArrayXY[1,i]);
   SumX2Y:=SumX2Y+sqr(ArrayXY[1,i])*ArrayXY[2,i];
   SumLnY:=SumLnY+ln(ArrayXY[2,i]);
   SumXLnY:=SumXLnY+ArrayXY[1,i]*ln(ArrayXY[2,i])
  end;
 { Вычисление коэффициентов }
 OPRlin:=0.0;
 a1lin:=0.0;
 a2lin:=0.0;
 a1kvadr:=0.0;
 OPRkvadr:=0.0;
 a2kvadr:=0.0;
 a2kvadr:=0.0;
 a1exp:=0.0;
 a2exp:=0.0;
 OPRlin:=n*SumX2-SumX*SumX;
 a1lin:=(SumX2*SumY-SumX*SumXY)/OPRlin;
 a2lin:=(n*SumXY-SumX*SumY)/OPRlin;
 OPRkvadr:=n*SumX2*SumX4+SumX*SumX3*SumX2+SumX2*SumX*SumX3-     SumX2*SumX2*SumX2-n*SumX3*SumX3-SumX*SumX*SumX4;
 a1kvadr:=(SumY*SumX2*SumX4+SumX*SumX2Y*SumX3+SumX2*SumXY*SumX3- SumX2*SumX2*SumX2Y-SumY*SumX3*SumX3-SumX*SumXY*SumX4)/OPRkvadr;
 a2kvadr:=(n*SumXY*SumX4+SumY*SumX3*SumX2+SumX2*SumX*SumX2Y-SumX2*SumX2*SumXY-n*SumX3*SumX2Y-SumY*SumX*SumX4)/OPRkvadr;
 a3kvadr:=(n*SumX2*SumX2Y+SumX*SumXY*SumX2+SumY*SumX*SumX3-SumY*SumX2*SumX2-n*SumXY*SumX3-SumX*SumX*SumX2Y)/OPrkvadr;
 a2exp:=(n*SumXLnY-SumX*SumLnY)/OPRlin;
 cexp:=(SumX2*SumLnY-SumX*SumXLnY)/OPRlin;
 a1exp:=exp(cexp);
 { Вычисление средних арифметических x и y }
 Xsr:=SumX/n;
 Ysr:=SumY/n;
 S1:=0.0;
 S2:=0.0;
 S3:=0.0;
 Slin:=0.0;
 Skvadr:=0.0;
 Sexp:=0.0;
 Kkor:=0.0;
 KdetLin:=0.0;
 KdetKvadr:=0.0;
 KdetExp:=0.0;
 
for i:=1 to n do
  begin
   S1:=S1+(ArrayXY[1,i]-Xsr)*(ArrayXY[2,i]-Ysr);
   S2:=S2+sqr(ArrayXY[1,i]-Xsr);
   S3:=S3+sqr(ArrayXY[2,i]-Ysr);
   Slin:=Slin+sqr(a1lin+a2lin*ArrayXY[1,i]-ArrayXY[2,i]);
Skvadr:=Skvadr+sqr(a1kvadr+a2kvadr*ArrayXY[1,i]+a3kvadr*ArrayXY[1,i]*ArrayXY[1,i]-ArrayXY[2,i]);
   Sexp:=Sexp+sqr(a1exp*exp(a2exp*ArrayXY[1,i])-ArrayXY[2,i]);
  end;
 { Вычисление коэффициентов корреляции и детерминированности }
 Kkor:=S1/sqrt(S2*S3);
 KdetLin:=1-Slin/S3;
 KdetKvadr:=1-Skvadr/S3;
 KdetExp:=1-Sexp/S3;
 { Вывод результатов }
 WriteLn('Линейная функция');
 WriteLn('a1=',a1lin:8:5);
 WriteLn('a2=',a2lin:8:5);
 WriteLn('Квадратичная функция');
 WriteLn('a1=',a1kvadr:8:5);
 WriteLn('a2=',a2kvadr:8:5);
 WriteLn('a3=',a3kvadr:8:5);
 WriteLn('Экспоненциальная функция');
 WriteLn('a1=',a1exp:8:5);
 WriteLn('a2=',a2exp:8:5);
 WriteLn('c=',cexp:8:5);
 WriteLn('Xcp=',Xsr:8:5);
 WriteLn('Ycp=',Ysr:8:5);
 WriteLn('Коэффициент корреляции ',Kkor:8:5);
 WriteLn('Коэффициент детерминированности (линейная аппроксимация) ',KdetLin:2:5);
 WriteLn('Коэффициент детерминированности (квадратическая аппроксимация) ',KdetKvadr:2:5);
 WriteLn('Коэффициент детерминированности (экспоненциальная аппроксимация) ',KdetExp:2:5);
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 08.09.2010, 15:20   #3
KSuxa1989
 
Регистрация: 04.09.2010
Сообщений: 4
Радость

пасибо)
KSuxa1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение нелинейной системы уравнений методом наименьших квадратов. Svetochka92 Общие вопросы C/C++ 2 03.04.2010 18:26
Аппроксимация функции методом наименьших квадратов(МНК) vitaly38 Помощь студентам 1 29.03.2010 21:50
Паскаль. Аппроксимация функции методом наименьших квадратов. 3abeel Фриланс 17 13.07.2009 09:21
Лаба в Паскале!Аппроксимация функции методом наименьших квадратов! Weltkind Фриланс 1 16.06.2009 17:01
Помощь в решении задачи методом наименьших квадратов Aleks_R Помощь студентам 0 28.04.2009 15:39