Форум программистов, компьютерный форум CyberForum.ru

Аппроксимация МНК для линейной, квадратической и экспоненциальной функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск дубликатов в бинарном дереве http://www.cyberforum.ru/cpp-beginners/thread1200003.html
Требуется создать функцию поиска дубликатов ИНФОРМАЦИОННОЙ ЧАСТИ, НЕ КЛЮЧА в бинарном дереве. Ничего похожего в гугле и здесь на форуме не нашёл. Везде, где идёт теория о бинарном дереве дубликаты "опускаются". Код не прошу (это было бы слишком хорошо). Не могу разработать алгоритм. Помогите теорией...
C++ С++ ошибка Приветствую. Проблема с visual studio 2012. Всегда показывает такую ошибку, подскажите как это можно исправить? http://www.cyberforum.ru/cpp-beginners/thread1199959.html
C++ Запросить ввод нескольких чисел, и определить, сколько из этих чисел отрицательны
Привет всем!Прошу помочь мне в решении задачи!Надо написать такую программу,чтобы она просила пользователя ввести несколько чисел и потом отобразила сколько из этих чисел отрицательны.Скажите,как можно это реализовать?И как можно больше разных вариантов. Всем заранее спасибо !
C++ Ошибка C4700
Всем привет! Need help! Пишу программку в среде Visual Studio Express 2013 для Windows Desktop. Уже всё перепробовал. То ошибка LNK2019 всплывает, то C4700. При данной реализации, представленной ниже появляется ошибка: Ошибка 1 error C4700: использована неинициализированная локальная переменная...
C++ Задача. Перезагрузка операторов http://www.cyberforum.ru/cpp-beginners/thread1199914.html
Создать класс Дата, с конструкторами, деструктором, установить дату, увеличить на 1 день (++), уменьшить на один день, добавить дни +=. Перегрузить инкремент и декремент как постфиксный и префиксный, перегрузить ввод и вывод в поток. Помогите пожалуйста решить, уважаемые формучане!!:wall:
C++ Нужно исправить ошибку /* source: http://runnable.com/Us53wIV1TEVWAAHd/how-to-search-a-node-in-a-linked-list-for-c%2B%2B * A sample code of search a node with a given value in a linked list, * and return the pointer of that node if it exists. * OUTLINE: traverse the linked list and compare the given value with * each node, and return the pointer of the node when they turn out * to be the same in value. */... подробнее

Показать сообщение отдельно
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9

Аппроксимация МНК для линейной, квадратической и экспоненциальной функции - C++

05.06.2014, 14:14. Просмотров 731. Ответов 1
Метки (Все метки)

Здравствуйте. За ранее извиняюсь,наверное достал наших ув. программистов,т.к. за месяц это уже второе сообщение.В общем,буду как всегда краток. Даны табличные данные х и у
нужно написать программу которая будет апроксимировать эти данные для линейной,квадратической и експоненциальной функции.- Я нашел программу на Паскале,слегка ее модифицировал, и она работает прекрасно. Но вот беда,при попытке перевести ее на Язык С++(в среде Висуал студио(извините если не так написал) забадался фиксить мелкие баги и ошибочки. Вроде бы все исправил,но программа вообще отказываеться давать какой либо внятный результат. Прошу уважаемых программистов,помогите бедному ребенку с прогрммой.
Листинг программы на с++ прикладываю. Если кому в друг пригодиться,прикладываю рабочий код программы на Паскале(мне не жалко):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian" );
int const n=5;
int i,j;
double TArray[n];
double SumX,SumY,SumX2,SumXY,SumX3,SumX4,SumX2Y,SumLnY,SumXLnY;
 double OPRlin,OPRkvadr,OPRa1,OPRa2,OPRa3;
 double a1lin,a2lin,a1kvadr,a2kvadr,a3kvadr,a1exp,a2exp,cexp;
double Xsr,Ysr,S1,S2,S3,Slin,Skvadr,Sexp;
 double Kkor,KdetLin,KdetKvadr,KdetExp;
 char I;
double TArrayXY[2][n]={{0,1,2,4,5},{2.1,2.4,2.6,2.8,3.0}};
 for(int i=0;i<1;i++)
for (int j=0;j<n;j++)
cout<<"TArrayXY["<<i<<"]["<<j<<"]=";cin>>TArrayXY[i][j];
{
 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;
for(int i=0;i<1;i++)
for (int j=0;j<n;j++)
cout<<"TArrayXY["<<i<<"]["<<j<<"]=";cin>>TArrayXY[i][j]; 
  {
   for(i=0;i<n;i++)
{SumX=SumX+TArrayXY[0][i];
SumY=SumY+TArrayXY[1][i];
SumXY=SumXY+TArrayXY[0][i]*TArrayXY[1][i];
SumX2=SumX2+(TArrayXY[0][i]*TArrayXY[0][i]);
SumX3=SumX3+TArrayXY[0][i]*TArrayXY[0][i]*TArrayXY[0][i];
SumX4=SumX4+(TArrayXY[0][i]*TArrayXY[0][i])*(TArrayXY[0][i]*TArrayXY[0][i]);
SumX2Y=SumX2Y+(TArrayXY[0][i]*TArrayXY[0][i])*TArrayXY[1][i];
SumLnY=SumLnY+log(TArrayXY[1][i]);
SumXLnY=SumXLnY+TArrayXY[0][i]*log(TArrayXY[1][i]);}
  }
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);
 
 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=0;i<n;i++)
{using namespace std;
    S1=S1+(TArrayXY[0][i]-Xsr)*(TArrayXY[1][i]-Ysr);
S2=S2+(TArrayXY[0][i]-Xsr*TArrayXY[0][i]-Xsr);
S3=S3+(TArrayXY[1][i]-Ysr*TArrayXY[1][i]-Ysr);
Slin=Slin+(a1lin+a2lin*TArrayXY[0][i]-TArrayXY[1][i]*a1lin+a2lin*TArrayXY[0][i]-TArrayXY[1][i]);
Skvadr=Skvadr+(a1kvadr+a2kvadr*TArrayXY[0][i]+a3kvadr*TArrayXY[0][i]*TArrayXY[0][i]-TArrayXY[1][i]*a1kvadr+a2kvadr*TArrayXY[0][i]+a3kvadr*TArrayXY[0][i]*TArrayXY[0][i]-TArrayXY[1][i]);
Sexp=Sexp+(a1exp*exp(a2exp*TArrayXY[0][i])-TArrayXY[1][i]*a1exp*exp(a2exp*TArrayXY[0][i])-TArrayXY[1][i]);}
  Kkor=S1/sqrt(S2*S3);
 KdetLin=1-Slin/S3;
 KdetKvadr=1-Skvadr/S3;
 KdetExp=1-Sexp/S3;
cout<<"Линейная функция\n";
 cout<<"a1= "<<a1lin;
 cout<<"a2= "<<a2lin;
 cout<<"Квадратичная функция";
 cout<<"a1= "<<a1kvadr;
 cout<<"a2= "<<a2kvadr;
 cout<<"a3= "<<a3kvadr;
 cout<<"Экспоненциальная функция/n";
 cout<<"a1= "<<a1exp;
cout<<" a2= "<<a2exp;
cout<<" c= "<<cexp;
 cout<<"n ""Xcp= "<<Xsr;
 cout<<" Ycp= "<<Ysr;
 cout<<" Коэффициент корреляции" <<Kkor;
 cout<<" Коэффициент детерминированности (линейная аппроксимация)" <<KdetLin;
 cout<<"Коэффициент детерминированности (квадратическая аппроксимация)"<< KdetKvadr;
 cout<<"Коэффициент детерминированности (экспоненциальная аппроксимация)"<<KdetExp;
system("pause");
return 0;
}
}
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
uses winCRT;
const
n=5;
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=((0,1,2,4,5) , (2.1,2.4, 2.6, 2.8, 3.0));
 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;
 { vichislenie symm 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;
 { vichislenie koeff}
 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);
 { vichislenie x i 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;
 { vichislenie korelyc i determinacii }
 Kkor:=S1/sqrt(S2*S3);
 KdetLin:=1-Slin/S3;
 KdetKvadr:=1-Skvadr/S3;
 KdetExp:=1-Sexp/S3;
 { vivod rezult }
 WriteLn('lineynaya');
 WriteLn('a1=',a1lin:8:5);
 WriteLn('a2=',a2lin:8:5);
 WriteLn('kvadr');
 WriteLn('a1=',a1kvadr:8:5);
 WriteLn('a2=',a2kvadr:8:5);
 WriteLn('a3=',a3kvadr:8:5);
 WriteLn('exp');
 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('koef. korelyaciii ',Kkor:8:5);
 WriteLn('koef determin(lineynaya aprox) ',KdetLin:2:5);
 WriteLn('koef determin kvadr aprox) ',KdetKvadr:2:5);
 WriteLn('koef detrem exp aprox) ',KdetExp:2:5);
end.
еще раз прощу помощи)За ранее благодарен вам)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru