﻿<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://v.michm.ru/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://v.michm.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2_N2</id>
		<title>Васильев N2 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://v.michm.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2_N2"/>
		<link rel="alternate" type="text/html" href="http://v.michm.ru/index.php?title=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2_N2&amp;action=history"/>
		<updated>2026-05-14T20:15:24Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.23</generator>

	<entry>
		<id>http://v.michm.ru/index.php?title=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2_N2&amp;diff=20438&amp;oldid=prev</id>
		<title>Васильев Михаил: Новая страница: «Вывод программы: c0 = 11 c1 = 21 c2 = 0 b0 = -499.992 b1 = 6.19998 b2 = -4.3 b3 = -2.29928  Описание:  с0 = 11 = х1*х6, с1 = 21 = х4*х…»</title>
		<link rel="alternate" type="text/html" href="http://v.michm.ru/index.php?title=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D1%8C%D0%B5%D0%B2_N2&amp;diff=20438&amp;oldid=prev"/>
				<updated>2019-06-04T15:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «Вывод программы: c0 = 11 c1 = 21 c2 = 0 b0 = -499.992 b1 = 6.19998 b2 = -4.3 b3 = -2.29928  Описание:  с0 = 11 = х1*х6, с1 = 21 = х4*х…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Вывод программы:&lt;br /&gt;
c0 = 11 c1 = 21 c2 = 0&lt;br /&gt;
b0 = -499.992 b1 = 6.19998 b2 = -4.3 b3 = -2.29928&lt;br /&gt;
&lt;br /&gt;
Описание: &lt;br /&gt;
с0 = 11 = х1*х6, с1 = 21 = х4*х4, с2 = 0 = х1&lt;br /&gt;
&lt;br /&gt;
Модель:&lt;br /&gt;
&lt;br /&gt;
-500 + 6.2*х1*х6 - 4.3*х4*х4 - 2.3*х1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Name        : CorrelCoeficent.cpp&lt;br /&gt;
// Author      : MIHAIL_WAS&lt;br /&gt;
// Version     :&lt;br /&gt;
// Copyright   : &lt;br /&gt;
// Description : Hello World in C++, Ansi-style&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstring&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int const numParametrs = 7;&lt;br /&gt;
int const numVar = 3;&lt;br /&gt;
&lt;br /&gt;
double** AllocationMatrix (double **x, int dim1, int dim2) {&lt;br /&gt;
	x = new double*[dim1];&lt;br /&gt;
	for (int i = 0; i &amp;lt; dim1; i++) {&lt;br /&gt;
		x[i] = new double[dim2];&lt;br /&gt;
	}&lt;br /&gt;
	return x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class InputData {&lt;br /&gt;
public:&lt;br /&gt;
	int size;&lt;br /&gt;
	double *array;&lt;br /&gt;
	double m1;&lt;br /&gt;
	double m2;&lt;br /&gt;
	double sigma;&lt;br /&gt;
	string name;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
	InputData (const double *_array, int _size) {&lt;br /&gt;
		size = _size;&lt;br /&gt;
		array = new double[size];&lt;br /&gt;
		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
			array[i] = _array[i];&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void parametrs () {&lt;br /&gt;
		m1 = 0;&lt;br /&gt;
		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
			m1 += array[i];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		m1 /= size;&lt;br /&gt;
&lt;br /&gt;
		m2 = 0;&lt;br /&gt;
		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
			m2 += (array[i] - m1)*(array[i] - m1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		m2 /= (size - 1);&lt;br /&gt;
		sigma = pow(m2, 0.5);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void print() {&lt;br /&gt;
		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
			cout &amp;lt;&amp;lt; array[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	~InputData() {&lt;br /&gt;
		delete[] array;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void correlation_coefficient0 (InputData *x, InputData *y, double *r) {&lt;br /&gt;
	double m1x = x-&amp;gt;m1, m1y = y-&amp;gt;m1;&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; x-&amp;gt;size; i++) {&lt;br /&gt;
		*r += (x-&amp;gt;array[i] - m1x)*(y-&amp;gt;array[i] - m1y);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	*r /= ((x-&amp;gt;size - 1)*x-&amp;gt;sigma*y-&amp;gt;sigma);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void correlation_coefficient1(InputData *x1, InputData *x2, double *r, double *arrayR, int i, int imax) {&lt;br /&gt;
	double rx1x2 = 0;&lt;br /&gt;
	correlation_coefficient0(x1, x2, &amp;amp;rx1x2);&lt;br /&gt;
&lt;br /&gt;
	*r = (arrayR[i] - arrayR[imax]*rx1x2)/(pow( (1 - arrayR[imax]*arrayR[imax])*(1 - rx1x2*rx1x2), 0.5));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void correlation_coefficient2(InputData *x1, InputData *x2, InputData *x3, InputData *y, double *r, double *arrayR1, double *arrayR2,&lt;br /&gt;
		int i, int imax1, int imax2) {&lt;br /&gt;
&lt;br /&gt;
	double a = arrayR2[i];&lt;br /&gt;
	double b = arrayR2[imax2];&lt;br /&gt;
	double c0 = 0, c1 = 0, c2 = 0;&lt;br /&gt;
&lt;br /&gt;
	correlation_coefficient0(x1, x3, &amp;amp;c0);&lt;br /&gt;
	correlation_coefficient0(x1, x2, &amp;amp;c1);&lt;br /&gt;
	correlation_coefficient0(x2, x3, &amp;amp;c2);&lt;br /&gt;
&lt;br /&gt;
	double c = (c0 - c1*c2)/(pow((1 - c1*c1)*(1 - c2*c2), 0.5));&lt;br /&gt;
	*r = (a - b*c)/(pow((1 - b*b)*(1 - c*c), 0.5));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vector&amp;lt; InputData* &amp;gt; adding_parametrs (vector &amp;lt;InputData*&amp;gt; v, int N) {&lt;br /&gt;
&lt;br /&gt;
	int size = v.size();&lt;br /&gt;
	double *x = new double[N];&lt;br /&gt;
	for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
&lt;br /&gt;
		for (int j = i; j &amp;lt; size; j++) {&lt;br /&gt;
&lt;br /&gt;
			for (int e = 0; e &amp;lt; N; e++) {&lt;br /&gt;
				x[e] = v[i]-&amp;gt;array[e] * v[j]-&amp;gt;array[e];&lt;br /&gt;
			}&lt;br /&gt;
			v.push_back(new InputData(x, N));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return v;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vector&amp;lt; InputData* &amp;gt; import_data(int size) {&lt;br /&gt;
	vector &amp;lt; InputData* &amp;gt; parametrs;&lt;br /&gt;
	ifstream file (&amp;quot;data.inp&amp;quot;, ios::out);&lt;br /&gt;
	string str = &amp;quot;&amp;quot;;&lt;br /&gt;
	int index = 0;&lt;br /&gt;
	double **x = AllocationMatrix(x, size, numParametrs - 1);&lt;br /&gt;
	double *y = new double[size];&lt;br /&gt;
	double *current_x = new double[size];&lt;br /&gt;
&lt;br /&gt;
	while(getline(file, str)) {&lt;br /&gt;
&lt;br /&gt;
		string substr = &amp;quot;&amp;quot;;&lt;br /&gt;
		int count = 0;&lt;br /&gt;
		for (unsigned int i = 0; i &amp;lt; str.length(); i++) {&lt;br /&gt;
&lt;br /&gt;
			if ((int)str[i] != 9) {&lt;br /&gt;
				substr += str[i];&lt;br /&gt;
			}&lt;br /&gt;
			else {&lt;br /&gt;
				count++;&lt;br /&gt;
&lt;br /&gt;
				if (count == 1) {&lt;br /&gt;
					index = atoi(substr.c_str());&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					x[index - 1][count - 2] = atoi(substr.c_str());&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				substr = &amp;quot;&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		y[index - 1] = atof(substr.c_str());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; numParametrs - 1; i++) {&lt;br /&gt;
		for (int j = 0; j &amp;lt; size; j++) {&lt;br /&gt;
			current_x[j] =  x[j][i];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		InputData *memberOfClass = new InputData(current_x, size);&lt;br /&gt;
		parametrs.push_back(memberOfClass);&lt;br /&gt;
	}&lt;br /&gt;
	parametrs = adding_parametrs(parametrs, size);&lt;br /&gt;
	InputData *memberOfClass = new InputData(y, size);&lt;br /&gt;
	parametrs.push_back(memberOfClass);&lt;br /&gt;
	file.close();&lt;br /&gt;
	return parametrs;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TransposeMatrix (double **x, double **xT, int size_1, int size_2) {&lt;br /&gt;
	for (int i = 0; i &amp;lt; size_1; i++) {&lt;br /&gt;
		for (int j = 0; j &amp;lt; size_2; j++) {&lt;br /&gt;
			xT[j][i] = x[i][j];&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MultMatrix(double **x, double **y, double **c, int size_11, int size_22, int size_12) {&lt;br /&gt;
	for (int i = 0; i &amp;lt; size_11; i++) {&lt;br /&gt;
		for (int j = 0; j &amp;lt; size_22; j++) {&lt;br /&gt;
			for (int k = 0; k &amp;lt; size_12; k++) {&lt;br /&gt;
				c[i][j] += x[i][k] * y[k][j];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reverseMatrix (double **x, int size) {&lt;br /&gt;
	double **e = AllocationMatrix(e, size, size);&lt;br /&gt;
	double a = 0;&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
		for (int j = 0; j &amp;lt; size; j++) i == j ? e[i][j] = 1 : e[i][j] = 0;&lt;br /&gt;
&lt;br /&gt;
	for(int i = 0; i &amp;lt; size; i++){&lt;br /&gt;
&lt;br /&gt;
		a = x[i][i];&lt;br /&gt;
		for(int j = 0 ; j &amp;lt; size; j++){&lt;br /&gt;
			x[i][j] /= a;&lt;br /&gt;
			e[i][j] /= a;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for (int k = i + 1; k &amp;lt; size; k++ ){&lt;br /&gt;
&lt;br /&gt;
			a = x[k][i];&lt;br /&gt;
			for(int j = 0; j &amp;lt; size; j++){&lt;br /&gt;
				x[k][j] -= x[i][j] * a;&lt;br /&gt;
				e[k][j] -= e[i][j] * a;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for(int i = size - 1; i &amp;gt;0; i--){&lt;br /&gt;
		for(int j = i - 1; j &amp;gt;= 0; j--){&lt;br /&gt;
&lt;br /&gt;
			a = x[j][i];&lt;br /&gt;
			for(int k = 0; k &amp;lt; size; k++){&lt;br /&gt;
				x[j][k] -= x[i][k] * a;&lt;br /&gt;
				e[j][k] -= e[i][k] * a;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
		for (int j = 0; j &amp;lt; size; j++)&lt;br /&gt;
			x[i][j] = e[i][j];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double* MNK_second_method(double *x1, double *x2, double *x3, double *y, int size) {&lt;br /&gt;
&lt;br /&gt;
	double **x = AllocationMatrix(x, size, 4);&lt;br /&gt;
	double **yMatrix = AllocationMatrix(yMatrix, size, 1);&lt;br /&gt;
	double **xT = AllocationMatrix(xT,  numVar + 1, size);&lt;br /&gt;
	double **x_xT = AllocationMatrix(x_xT, numVar + 1, numVar + 1);&lt;br /&gt;
	double **x_xT_xT = AllocationMatrix(x_xT_xT, numVar + 1, size);&lt;br /&gt;
	double **B = AllocationMatrix(B, numVar + 1, 1);&lt;br /&gt;
&lt;br /&gt;
		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
			x[i][0] = 1;&lt;br /&gt;
			x[i][1] = x1[i];&lt;br /&gt;
			x[i][2] = x2[i];&lt;br /&gt;
			x[i][3] = x3[i];&lt;br /&gt;
			yMatrix[i][0] = y[i];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	TransposeMatrix(x, xT, size, numVar + 1);&lt;br /&gt;
	MultMatrix(xT, x, x_xT, numVar + 1, numVar + 1, size);&lt;br /&gt;
	reverseMatrix(x_xT, numVar + 1);&lt;br /&gt;
	MultMatrix(x_xT, xT, x_xT_xT, numVar + 1, size, numVar + 1);&lt;br /&gt;
	MultMatrix(x_xT_xT, yMatrix, B, numVar + 1, 1, size);&lt;br /&gt;
&lt;br /&gt;
	double *B_final = new double[numVar + 1];&lt;br /&gt;
	for (int i = 0; i &amp;lt; numVar + 1; i++) {&lt;br /&gt;
		B_final[i] = B[i][0];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return B_final;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
	int N = 50;&lt;br /&gt;
&lt;br /&gt;
	vector &amp;lt; InputData* &amp;gt; parametrs;&lt;br /&gt;
	parametrs = import_data(N);&lt;br /&gt;
&lt;br /&gt;
	for (unsigned int i = 0; i &amp;lt; parametrs.size(); i++) {&lt;br /&gt;
		parametrs[i]-&amp;gt;parametrs();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	double *r0 = new double[parametrs.size() - 1];&lt;br /&gt;
	int max_correlationIndex = 0;&lt;br /&gt;
	double max_correlationCoefficient = -1;&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; parametrs.size() - 1; i++) {&lt;br /&gt;
		double r = 0;&lt;br /&gt;
		correlation_coefficient0(parametrs[i], parametrs[parametrs.size() - 1], &amp;amp;r);&lt;br /&gt;
		r0[i] = r;&lt;br /&gt;
&lt;br /&gt;
		if (fabs(r0[i]) &amp;gt; max_correlationCoefficient) {&lt;br /&gt;
			max_correlationIndex = i;&lt;br /&gt;
			max_correlationCoefficient = fabs(r0[i]);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int max_correlationIndex1 = 0;&lt;br /&gt;
	max_correlationCoefficient = -1;&lt;br /&gt;
	int j = 0;&lt;br /&gt;
	double *r1 = new double[parametrs.size() - 1];&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; parametrs.size() - 1; i++) {&lt;br /&gt;
		double r = 0;&lt;br /&gt;
&lt;br /&gt;
		if (i != max_correlationIndex) {&lt;br /&gt;
			correlation_coefficient1(parametrs[i], parametrs[max_correlationIndex], &amp;amp;r, r0, i, max_correlationIndex);&lt;br /&gt;
			r1[j] = r;&lt;br /&gt;
&lt;br /&gt;
			if (fabs(r) &amp;gt; max_correlationCoefficient) {&lt;br /&gt;
				max_correlationCoefficient = fabs(r);&lt;br /&gt;
				max_correlationIndex1 = j;&lt;br /&gt;
			}&lt;br /&gt;
			j++;&lt;br /&gt;
		} else {&lt;br /&gt;
			r1[j] = 0;&lt;br /&gt;
			j++;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int max_correlationIndex2 = 0;&lt;br /&gt;
	max_correlationCoefficient = -1;&lt;br /&gt;
	j = 0;&lt;br /&gt;
	double *r2 = new double[parametrs.size() - 3];&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; parametrs.size() - 1; i++) {&lt;br /&gt;
		double r = 0;&lt;br /&gt;
&lt;br /&gt;
		if ((i != max_correlationIndex) &amp;amp;&amp;amp; (i != max_correlationIndex1)) {&lt;br /&gt;
&lt;br /&gt;
			correlation_coefficient2(parametrs[i], parametrs[max_correlationIndex], parametrs[max_correlationIndex1],&lt;br /&gt;
					parametrs[parametrs.size() - 1], &amp;amp;r, r0, r1, i, max_correlationIndex, max_correlationIndex1);&lt;br /&gt;
			r2[j] = r;&lt;br /&gt;
&lt;br /&gt;
			if (fabs(r) &amp;gt; max_correlationCoefficient) {&lt;br /&gt;
				max_correlationCoefficient = fabs(r);&lt;br /&gt;
				max_correlationIndex2 = j;&lt;br /&gt;
			}&lt;br /&gt;
			j++;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	double *mnk = new double[numVar + 1];&lt;br /&gt;
	mnk = MNK_second_method(parametrs[max_correlationIndex]-&amp;gt;array, parametrs[max_correlationIndex1]-&amp;gt;array, parametrs[max_correlationIndex2]-&amp;gt;array, parametrs[parametrs.size() - 1]-&amp;gt;array, 50);&lt;br /&gt;
&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;c0 = &amp;quot; &amp;lt;&amp;lt; max_correlationIndex &amp;lt;&amp;lt; &amp;quot; c1 = &amp;quot; &amp;lt;&amp;lt; max_correlationIndex1 &amp;lt;&amp;lt; &amp;quot; c2 = &amp;quot; &amp;lt;&amp;lt; max_correlationIndex2 &amp;lt;&amp;lt; endl;&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;b0 = &amp;quot; &amp;lt;&amp;lt; mnk[0] &amp;lt;&amp;lt; &amp;quot; b1 = &amp;quot; &amp;lt;&amp;lt; mnk[1] &amp;lt;&amp;lt; &amp;quot; b2 = &amp;quot; &amp;lt;&amp;lt; mnk[2] &amp;lt;&amp;lt; &amp;quot; b3 = &amp;quot; &amp;lt;&amp;lt; mnk[3] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Васильев Михаил</name></author>	</entry>

	</feed>