Kod programu

using System;

using System.IO;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

//using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Ekonometria

{

public partial class Form1 : Form

{

//int[] grf;

double[,] zmienne;//= new Double[10, 5];

double[] macierz_R0;//= new Double[4];//??

double[,] macierz_R;//= new Double[4, 4];

double[] det_macierz_R;

double[,] macierz_tmp; // macierz tymczasowa R*

double[,] macierz_tmp_R; //macierz tymczasowa R

double[] macierz_rw; //macierz wspolczynnikow korelacji rw

double[] det_macierz_M;//macierz wyznacznikow macierzy R*

double[,] wynik_MNK;

//double C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11;//wyznaczniki dla kombinacji

// double[,] R_wyzerowan;

double[] srednie;

double r_kryt,alfa=0.1;

static int X = 0; //statyczna zmiennna do liczenia wywołań funcji

int l_zmiennych=4, l_obserwacji=10, l_elementow;//???

List<int> indeksy;

public Form1()

{

InitializeComponent();

wyczyscWszystko();

//indeksy.Add(1);

// indeksy.Add(2);

}

private void licz_srednie()

{

srednie = new Double[l_zmiennych+1];

for (int kol = 0; kol < l_zmiennych+1; kol++) //??

{

for (int wiersz = 0; wiersz < l_obserwacji; wiersz++)

srednie[kol] += zmienne[wiersz, kol];

srednie[kol] /= (double)l_obserwacji;

}

}

private double licz_korelacja2()

{

macierz_tmp = new Double[3,3];

macierz_tmp_R = new Double[2,2];

det_macierz_M = new Double[6];

det_macierz_R = new Double[6];

//przekątne macierzy wypełnione 1

for (int i = 0; i < 3; i++)

macierz_tmp[i,i]=1.0;

//wyznaczniki macierz

label10.Text += "Wyznaczniki macierz: " + "\n";

//C1={x1,x2}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[1];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[1];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 1];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[1, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[1, 1];

det_macierz_M[0] = wyznacznik(macierz_tmp);

det_macierz_R[0] = wyznacznik(macierz_tmp_R);

label10.Text += "C1 = {x1,x2}: " + "\n";

label10.Text += "M1: " + det_macierz_M[0].ToString("0.0000");

label11.Text += "C1 = {x1,x2}: " + "\n";

label10.Text += " R1: " + det_macierz_R[0].ToString("0.0000") + "\n";

//C2 = {x1,x3}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[2];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[2];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 2];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[2, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[2, 2];

det_macierz_M[1] = wyznacznik(macierz_tmp);

det_macierz_R[1] = wyznacznik(macierz_tmp_R);

label10.Text += "C2 = {x1,x3}: " + "\n";

label10.Text += "M2: " + det_macierz_M[1].ToString("0.0000");

label11.Text += "C2 = {x1,x3}: " + "\n";

label10.Text += " R2: " + det_macierz_R[1].ToString("0.0000") + "\n";

//C3 = {x1,x4}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[3, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[3, 3];

det_macierz_M[2] = wyznacznik(macierz_tmp);

det_macierz_R[2] = wyznacznik(macierz_tmp_R);

label10.Text += "C3 = {x1,x4}: " + "\n";

label10.Text += "M3: " + det_macierz_M[2].ToString("0.0000");

label11.Text += "C3 = {x1,x4}: " + "\n";

label10.Text += " R3: " + det_macierz_R[2].ToString("0.0000") + "\n";

//C4 = {x2,x3}

macierz_tmp[0, 1] = macierz_R0[1];

macierz_tmp[0, 2] = macierz_R0[2];

macierz_tmp[1, 0] = macierz_R0[1];

macierz_tmp[2, 0] = macierz_R0[2];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[1, 1];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[1, 2];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[2, 1];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[2, 2];

det_macierz_M[3] = wyznacznik(macierz_tmp);

det_macierz_R[3] = wyznacznik(macierz_tmp_R);

label10.Text += "C4 = {x2,x3}: " + "\n";

label10.Text += "M4: " + det_macierz_M[3].ToString("0.0000");

label11.Text += "C4 = {x2,x3}: " + "\n";

label10.Text += " R4: " + det_macierz_R[3].ToString("0.0000") + "\n";

//C5 = {x2,x4}

macierz_tmp[0, 1] = macierz_R0[1];

macierz_tmp[0, 2] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[1];

macierz_tmp[2, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[1, 1];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[1, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[3, 1];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[3, 3];

det_macierz_M[4] = wyznacznik(macierz_tmp);

det_macierz_R[4] = wyznacznik(macierz_tmp_R);

label10.Text += "C5 = {x2,x4}: " + "\n";

label10.Text += "M5: " + det_macierz_M[4].ToString("0.0000") ;

label11.Text += "C5 = {x2,x4}: " + "\n";

label10.Text += " R5: " + det_macierz_R[4].ToString("0.0000") + "\n";

//C6 = {x3,x4}

macierz_tmp[0, 1] = macierz_R0[2];

macierz_tmp[0, 2] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[2];

macierz_tmp[2, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[2, 2];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[2, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[3, 2];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[3, 3];

det_macierz_M[5] = wyznacznik(macierz_tmp);

det_macierz_R[5] = wyznacznik(macierz_tmp_R);

label10.Text += "C6 = {x3,x4}: " + "\n";

label10.Text += "M6: " + det_macierz_M[5].ToString("0.0000");

label11.Text += "C6 = {x3,x4}: " + "\n";

label10.Text += " R6: " + det_macierz_R[5].ToString("0.0000") + "\n";

macierz_rw = new Double[6];

double max = 0;

int imax=0;

for (int i = 0; i < 6; i++)

{

//label13.Text += (det_macierz_M[i] / det_macierz_R[i]).ToString("0.00000") + "\n";

macierz_rw[i] = Math.Sqrt(1-(det_macierz_M[i]/det_macierz_R[i]));

if (macierz_rw[i] > max)

{

max = macierz_rw[i];

imax = i+1;

}

label12.Text += macierz_rw[i].ToString("0.0000") + "\n";

}

label13.Text += "Najwiekszy współczynnik korelacji wielorakiej " + max.ToString("0.0000") + "\n" + "otrzymany przez zestaw zmiennych objaśniających: C" + imax;

MNK2(imax);

return max;

}

private double licz_korelacja3()

{

det_macierz_M = new Double[4];

det_macierz_R = new Double[4];

macierz_tmp = new Double[4, 4];

macierz_tmp_R = new Double[3, 3];

for (int i = 0; i < 4; i++)

macierz_tmp[i, i] = 1.0;

label10.Text += "Wyznaczniki macierz: " + "\n";

//C7 = {x1,x2,x3}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[1];

macierz_tmp[0, 3] = macierz_R0[2];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[1];

macierz_tmp[3, 0] = macierz_R0[2];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 1];

macierz_tmp_R[0, 2] = macierz_tmp[1, 3] = macierz_R[0, 2];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[1, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[1, 1];

macierz_tmp_R[1, 2] = macierz_tmp[2, 3] = macierz_R[1, 2];

macierz_tmp_R[2, 0] = macierz_tmp[3, 1] = macierz_R[2, 0];

macierz_tmp_R[2, 1] = macierz_tmp[3, 2] = macierz_R[2, 1];

macierz_tmp_R[2, 2] = macierz_tmp[3, 3] = macierz_R[2, 2];

det_macierz_M[0] = wyznacznik(macierz_tmp);

det_macierz_R[0] = wyznacznik(macierz_tmp_R);

label10.Text += "C7 = {x1,x2,x3}: " + "\n";

label10.Text += "M7: " + det_macierz_M[0].ToString("0.0000");

label11.Text += "C7 = {x1,x2,x3}: " + "\n";

label10.Text += " R7: " + det_macierz_R[0].ToString("0.0000") + "\n";

/*for (int j = 0; j < 4; j++)

{

for (int i = 0; i < 4; i++)

{

if (macierz_tmp[j, i] >= 0)

label10.Text += " ";

label10.Text += macierz_tmp[j, i].ToString("0.0000") + " ";

}

label10.Text += "\n";

}*/

//C8 = {x1,x2,x4}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[1];

macierz_tmp[0, 3] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[1];

macierz_tmp[3, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 1];

macierz_tmp_R[0, 2] = macierz_tmp[1, 3] = macierz_R[0, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[1, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[1, 1];

macierz_tmp_R[1, 2] = macierz_tmp[2, 3] = macierz_R[1, 3];

macierz_tmp_R[2, 0] = macierz_tmp[3, 1] = macierz_R[3, 0];

macierz_tmp_R[2, 1] = macierz_tmp[3, 2] = macierz_R[3, 1];

macierz_tmp_R[2, 2] = macierz_tmp[3, 3] = macierz_R[3, 3];

det_macierz_M[1] = wyznacznik(macierz_tmp);

det_macierz_R[1] = wyznacznik(macierz_tmp_R);

label10.Text += "C8 = {x1,x2,x4}: " + "\n";

label10.Text += "M8: " + det_macierz_M[1].ToString("0.0000");

label11.Text += "C8 = {x1,x2,x4}: " + "\n";

label10.Text += " R8: " + det_macierz_R[1].ToString("0.0000") + "\n";

//C9 = {x2,x3,x4}

macierz_tmp[0, 1] = macierz_R0[1];

macierz_tmp[0, 2] = macierz_R0[2];

macierz_tmp[0, 3] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[1];

macierz_tmp[2, 0] = macierz_R0[2];

macierz_tmp[3, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[1, 1];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[1, 2];

macierz_tmp_R[0, 2] = macierz_tmp[1, 3] = macierz_R[1, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[2, 1];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[2, 2];

macierz_tmp_R[1, 2] = macierz_tmp[2, 3] = macierz_R[2, 3];

macierz_tmp_R[2, 0] = macierz_tmp[3, 1] = macierz_R[3, 1];

macierz_tmp_R[2, 1] = macierz_tmp[3, 2] = macierz_R[3, 2];

macierz_tmp_R[2, 2] = macierz_tmp[3, 3] = macierz_R[3, 3];

det_macierz_M[2] = wyznacznik(macierz_tmp);

det_macierz_R[2] = wyznacznik(macierz_tmp_R);

label10.Text += "C9 = {x2,x3,x4}: " + "\n";

label10.Text += "M9: " + det_macierz_M[2].ToString("0.0000");

label11.Text += "C9 = {x2,x3,x4}: " + "\n";

label10.Text += " R9: " + det_macierz_R[2].ToString("0.0000") + "\n";

//C10 = {x1,x3,x4}

macierz_tmp[0, 1] = macierz_R0[0];

macierz_tmp[0, 2] = macierz_R0[2];

macierz_tmp[0, 3] = macierz_R0[3];

macierz_tmp[1, 0] = macierz_R0[0];

macierz_tmp[2, 0] = macierz_R0[2];

macierz_tmp[3, 0] = macierz_R0[3];

macierz_tmp_R[0, 0] = macierz_tmp[1, 1] = macierz_R[0, 0];

macierz_tmp_R[0, 1] = macierz_tmp[1, 2] = macierz_R[0, 2];

macierz_tmp_R[0, 2] = macierz_tmp[1, 3] = macierz_R[0, 3];

macierz_tmp_R[1, 0] = macierz_tmp[2, 1] = macierz_R[2, 0];

macierz_tmp_R[1, 1] = macierz_tmp[2, 2] = macierz_R[2, 2];

macierz_tmp_R[1, 2] = macierz_tmp[2, 3] = macierz_R[2, 3];

macierz_tmp_R[2, 0] = macierz_tmp[3, 1] = macierz_R[3, 0];

macierz_tmp_R[2, 1] = macierz_tmp[3, 2] = macierz_R[3, 2];

macierz_tmp_R[2, 2] = macierz_tmp[3, 3] = macierz_R[3, 3];

det_macierz_M[3] = wyznacznik(macierz_tmp);

det_macierz_R[3] = wyznacznik(macierz_tmp_R);

label10.Text += "C10 = {x1,x3,x4}: " + "\n";

label10.Text += "M10: " + det_macierz_M[3].ToString("0.0000");

label11.Text += "C10 = {x1,x3,x4}: " + "\n";

label10.Text += " R10: " + det_macierz_R[3].ToString("0.0000") + "\n";

macierz_rw = new Double[4];

double max = 0;

int imax = 0;

for (int i = 0; i < 4; i++)

{

//label13.Text += (det_macierz_M[i] / det_macierz_R[i]).ToString("0.00000") + "\n";

macierz_rw[i] = Math.Sqrt(1 - (det_macierz_M[i] / det_macierz_R[i]));

if (macierz_rw[i] > max)

{

max = macierz_rw[i];

imax = i + 7;

}

label12.Text += macierz_rw[i].ToString("0.0000") + "\n";

}

label13.Text += "Najwiekszy współczynnik korelacji wielorakiej " + max.ToString("0.0000") + "\n" + "otrzymany przez zestaw zmiennych objaśniających: C" + imax;

MNK3(imax);

return max;

}

private void MNK2(int zestaw_zmiennych)

{

double[,] Y = new double[l_obserwacji, 1];

double[,] Xt = new double[3, l_obserwacji];

double[,] Xt_X= new double[3, 3];

double[,] Xt_Y = new double[3, 1];

double[,] odworona_Xt_X = new double[3, 3];

wynik_MNK = new Double[3, 1];

int zmienna1=0, zmienna2=0;

double[,] tmp_X = new double[l_obserwacji, 3];

label20.Text += " dla kombinacji zmiennych C" + zestaw_zmiennych;

if (zestaw_zmiennych == 1) //C1 = {x1,x2}

{

zmienna1 = 1;

zmienna2 = 2;

label20.Text += " = {x1,x2}";

}

if (zestaw_zmiennych == 2) //C2 = {x1,x3}

{

zmienna1 = 1;

zmienna2 = 3;

label20.Text += " = {x1,x3}";

}

if (zestaw_zmiennych == 3) //C3 = {x1,x4}

{

zmienna1 = 1;

zmienna2 = 4;

label20.Text += " = {x1,x4}";

}

if (zestaw_zmiennych == 4) //C4 = {x2,x3}

{

zmienna1 = 2;

zmienna2 = 3;

label20.Text += " = {x2,x3}";

}

if (zestaw_zmiennych == 5) //C5 = {x2,x4}

{

zmienna1 = 2;

zmienna2 = 4;

label20.Text += " = {x2,x4}";

}

if (zestaw_zmiennych == 6) //C6 = {x3,x4}

{

zmienna1 = 3;

zmienna2 = 4;

label20.Text += " = {x3,x4}";

}

// wypelnienie dwoch kolumn zmiennymi oraz wypelnienie ostatniej kolumny 1-kami

for (int i = 0; i < l_obserwacji; i++)

{

tmp_X[i, 0] = zmienne[i, zmienna1];

tmp_X[i, 1] = zmienne[i, zmienna2];

tmp_X[i, 2] = 1;

Y[i, 0] = zmienne[i, 0];

//wyświetlenie macierzy X rozwazanych zmiennych

if (comboBox3.SelectedIndex == 0)

{

label17.Text += tmp_X[i, 0].ToString("0.0000") + " ";

label17.Text += tmp_X[i, 1].ToString("0.0000") + " ";

label17.Text += tmp_X[i, 2].ToString("0.0000") + " ";

label17.Text += "\n";

}

}

//wyswietlanie macierzy Y

if (comboBox3.SelectedIndex == 1)

{

for (int i = 0; i < Y.GetLength(0); i++)

{

label17.Text += Y[i, 0].ToString("0.0000") + " ";

label17.Text += "\n";

}

}

Xt = transponuj(tmp_X);

// wyswietlanie macierzy transponowanej

if (comboBox3.SelectedIndex == 2)

{

for (int i = 0; i < Xt.GetLength(0); i++)

{

for (int j = 0; j < Xt.GetLength(1); j++)

{

label17.Text += Xt[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Xt_X = mnozenie(Xt, tmp_X);

//wyswietlanie macierzy mnozonej Xt*X

if (comboBox3.SelectedIndex == 3)

{

for (int i = 0; i < Xt_X.GetLength(0); i++)

{

for (int j = 0; j < Xt_X.GetLength(1); j++)

{

label17.Text += Xt_X[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

odworona_Xt_X = odwrotna(Xt_X);

//wyswietlanie macierzy odwroconej maceirzy Xt_X

if (comboBox3.SelectedIndex == 4)

{

for (int i = 0; i < odworona_Xt_X.GetLength(0); i++)

{

for (int j = 0; j < odworona_Xt_X.GetLength(1); j++)

{

label17.Text += odworona_Xt_X[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Xt_Y = mnozenie(Xt, Y);

//wyswietlanie macierzy mnożonej Xt*Y

if (comboBox3.SelectedIndex == 5)

{

for (int i = 0; i < Xt_Y.GetLength(0); i++)

{

for (int j = 0; j < Xt_Y.GetLength(1); j++)

{

label17.Text += Xt_Y[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

wynik_MNK = mnozenie(odworona_Xt_X, Xt_Y);

//wyswietlanie macierzy mnożonej Xt*Y

if (comboBox3.SelectedIndex == 6)

{

for (int i = 0; i < wynik_MNK.GetLength(0); i++)

{

for (int j = 0; j < wynik_MNK.GetLength(1); j++)

{

label17.Text += wynik_MNK[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

label5.Text = "y = " + wynik_MNK[0, 0].ToString("0.0000") + " x" + zmienna1 + " + " + wynik_MNK[1, 0].ToString("0.0000") + " x" + zmienna2 + " + " + wynik_MNK[2, 0].ToString("0.0000");

// --------------------------- Odchylenie standardowe współczynnika resztkowego ----------------------------------

double[,] Yt_Xa = new double[1, 1];

double[,] Yt_Y = new double[1, 1];

double[,] Yt = new double[1, l_obserwacji];

double[,] Da = new double [3,3];

double Yt_YminusYt_Xa;

double Su, Su2, sredniaY, V;

Yt = transponuj(Y);

//wyswietlanie transponowanej macierzy Y

if (comboBox3.SelectedIndex == 7)

{

for (int i = 0; i < Yt.GetLength(0); i++)

{

for (int j = 0; j < Yt.GetLength(1); j++)

{

label17.Text += Yt[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_Xa = mnozenie(transponuj (Xt_Y), wynik_MNK);

//wyswietlanie wymnozonej macierzy transponowanej Y oraz Xt_Y

if (comboBox3.SelectedIndex == 8)

{

for (int i = 0; i < Yt_Xa.GetLength(0); i++)

{

for (int j = 0; j < Yt_Xa.GetLength(1); j++)

{

label17.Text += Yt_Xa[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_Y = mnozenie(Yt, Y);

//wyswietlanie wymnozonej macierzy transponowanej Y oraz Y

if (comboBox3.SelectedIndex == 9)

{

for (int i = 0; i < Yt_Y.GetLength(0); i++)

{

for (int j = 0; j < Yt_Y.GetLength(1); j++)

{

label17.Text += Yt_Y[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_YminusYt_Xa = Yt_Y[0, 0] - Yt_Xa[0, 0];

Su2 = Yt_YminusYt_Xa / (l_obserwacji - 5);

//wyswietlanie wariacji skladnika resztokowego

if (comboBox3.SelectedIndex == 10)

{

label17.Text += Su2.ToString("0.0000");

}

Su = Math.Sqrt(Su2);

label21.Text+= Su.ToString("0.0000");

Da = mnozenie(odworona_Xt_X, Su2);

label5.Text += "\n" + "D(a1)=(" + Da[0, 0].ToString("0.0000") + "); D(a2)=(" + Da[1, 1].ToString("0.0000") + "); D(a3)=(" + Da[2, 2].ToString("0.0000") + ")";

sredniaY = 0;

for (int i = 0; i < Y.GetLength(0); i++)

{

sredniaY = sredniaY + Y[i, 0];

}

sredniaY = sredniaY / Y.GetLength(0);

//wyswietlanie sredniej zmiennych Y

if (comboBox3.SelectedIndex == 11)

{

label17.Text = sredniaY.ToString("0.0000");

}

V = (Su / sredniaY) * 100;

label22.Text += V.ToString("0.00");

}

private void MNK3(int zestaw_zmiennych)

{

double[,] Y = new double[l_obserwacji, 1];

double[,] Xt = new double[4, l_obserwacji];

double[,] Xt_X = new double[4, 4];

double[,] Xt_Y = new double[4, 1];

double[,] odworona_Xt_X = new double[4, 4];

wynik_MNK = new Double[4, 1];

int zmienna1 = 0, zmienna2 = 0, zmienna3 =0;

double[,] tmp_X = new double[l_obserwacji, 4];

label20.Text += " dla kombinacji zmiennych C" + zestaw_zmiennych;

if (zestaw_zmiennych == 7) //C7 = {x1,x2,x3}

{

zmienna1 = 1;

zmienna2 = 2;

zmienna3 = 3;

label20.Text += " = {x1,x2,x3}";

}

if (zestaw_zmiennych == 8) //C8 = {x1,x2,x4}

{

zmienna1 = 1;

zmienna2 = 2;

zmienna3 = 4;

label20.Text += " = {x1,x2,x4}";

}

if (zestaw_zmiennych == 9) //C9 = {x2,x3,x4}

{

zmienna1 = 2;

zmienna2 = 3;

zmienna3 = 4;

label20.Text += " = {x2,x3,x4}";

}

if (zestaw_zmiennych == 10) //C10 = {x1,x3,x4}

{

zmienna1 = 1;

zmienna2 = 3;

zmienna3 = 4;

label20.Text += " = {x1,x3,x4}";

}

// wypelnienie dwoch kolumn zmiennymi oraz wypelnienie ostatniej kolumny 1-kami

for (int i = 0; i < l_obserwacji; i++)

{

tmp_X[i, 0] = zmienne[i, zmienna1];

tmp_X[i, 1] = zmienne[i, zmienna2];

tmp_X[i, 2] = zmienne[i, zmienna3];

tmp_X[i, 3] = 1;

Y[i, 0] = zmienne[i, 0];

//wyświetlenie macierzy X rozwazanych zmiennych

if (comboBox3.SelectedIndex == 0)

{

label17.Text += tmp_X[i, 0].ToString("0.0000") + " ";

label17.Text += tmp_X[i, 1].ToString("0.0000") + " ";

label17.Text += tmp_X[i, 2].ToString("0.0000") + " ";

label17.Text += tmp_X[i, 3].ToString("0.0000") + " ";

label17.Text += "\n";

}

}

//wyswietlanie macierzy Y

if (comboBox3.SelectedIndex == 1)

{

for (int i = 0; i < Y.GetLength(0); i++)

{

label17.Text += Y[i, 0].ToString("0.0000") + " ";

label17.Text += "\n";

}

}

Xt = transponuj(tmp_X);

// wyswietlanie macierzy transponowanej

if (comboBox3.SelectedIndex == 2)

{

for (int i = 0; i < Xt.GetLength(0); i++)

{

for (int j = 0; j < Xt.GetLength(1); j++)

{

label17.Text += Xt[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Xt_X = mnozenie(Xt, tmp_X);

//wyswietlanie macierzy mnozonej Xt*X

if (comboBox3.SelectedIndex == 3)

{

for (int i = 0; i < Xt_X.GetLength(0); i++)

{

for (int j = 0; j < Xt_X.GetLength(1); j++)

{

label17.Text += Xt_X[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

odworona_Xt_X = odwrotna(Xt_X);

//wyswietlanie macierzy odwroconej maceirzy Xt_X

if (comboBox3.SelectedIndex == 4)

{

for (int i = 0; i < odworona_Xt_X.GetLength(0); i++)

{

for (int j = 0; j < odworona_Xt_X.GetLength(1); j++)

{

label17.Text += odworona_Xt_X[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Xt_Y = mnozenie(Xt, Y);

//wyswietlanie macierzy mnożonej Xt*Y

if (comboBox3.SelectedIndex == 5)

{

for (int i = 0; i < Xt_Y.GetLength(0); i++)

{

for (int j = 0; j < Xt_Y.GetLength(1); j++)

{

label17.Text += Xt_Y[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

wynik_MNK = mnozenie(odworona_Xt_X, Xt_Y);

//wyswietlanie macierzy mnożonej Xt*Y

if (comboBox3.SelectedIndex == 6)

{

for (int i = 0; i < wynik_MNK.GetLength(0); i++)

{

for (int j = 0; j < wynik_MNK.GetLength(1); j++)

{

label17.Text += wynik_MNK[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

label5.Text = "y = " + wynik_MNK[0, 0].ToString("0.0000") + " x" + zmienna1 + " + " + wynik_MNK[1, 0].ToString("0.0000") + " x" + zmienna2 + " + " + wynik_MNK[2, 0].ToString("0.0000") + " x" + zmienna3 + " + " + wynik_MNK[3, 0].ToString("0.0000");

// --------------------------- Odchylenie standardowe współczynnika resztkowego ----------------------------------

double[,] Yt_Xa = new double[1, 1];

double[,] Yt_Y = new double[1, 1];

double[,] Yt = new double[1, l_obserwacji];

double[,] Da = new double[4, 4];

double Yt_YminusYt_Xa;

double Su, Su2, sredniaY, V;

Yt = transponuj(Y);

//wyswietlanie transponowanej macierzy Y

if (comboBox3.SelectedIndex == 7)

{

for (int i = 0; i < Yt.GetLength(0); i++)

{

for (int j = 0; j < Yt.GetLength(1); j++)

{

label17.Text += Yt[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_Xa = mnozenie(transponuj(Xt_Y), wynik_MNK);

//wyswietlanie wymnozonej macierzy transponowanej Y oraz Xt_Y

if (comboBox3.SelectedIndex == 8)

{

for (int i = 0; i < Yt_Xa.GetLength(0); i++)

{

for (int j = 0; j < Yt_Xa.GetLength(1); j++)

{

label17.Text += Yt_Xa[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_Y = mnozenie(Yt, Y);

//wyswietlanie wymnozonej macierzy transponowanej Y oraz Y

if (comboBox3.SelectedIndex == 9)

{

for (int i = 0; i < Yt_Y.GetLength(0); i++)

{

for (int j = 0; j < Yt_Y.GetLength(1); j++)

{

label17.Text += Yt_Y[i, j].ToString("0.0000") + " ";

}

label17.Text += "\n";

}

}

Yt_YminusYt_Xa = Yt_Y[0, 0] - Yt_Xa[0, 0];

Su2 = Yt_YminusYt_Xa / (l_obserwacji - 5);

//wyswietlanie wariacji skladnika resztokowego

if (comboBox3.SelectedIndex == 10)

{

label17.Text += Su2.ToString("0.0000");

}

Su = Math.Sqrt(Su2);

label21.Text += Su.ToString("0.0000");

Da = mnozenie(odworona_Xt_X, Su2);

label5.Text += "\n" + " (" + Da[0, 0].ToString("0.0000") + "); (" + Da[1, 1].ToString("0.0000") + "); (" + Da[2, 2].ToString("0.0000") +"); (" + Da[3, 3].ToString("0.0000") + ")";

sredniaY = 0;

for (int i = 0; i < Y.GetLength(0); i++)

{

sredniaY = sredniaY + Y[i, 0];

}

sredniaY = sredniaY / Y.GetLength(0);

//wyswietlanie sredniej zmiennych Y

if (comboBox3.SelectedIndex == 11)

{

label17.Text = sredniaY.ToString("0.0000");

}

V = (Su / sredniaY) * 100;

label22.Text += V.ToString("0.00");

}

private double licz_rij(int i, int j)

{

int t;

double licznik = 0,mianownik_i=0,mianownik_j=0;

for (t = 0; t < l_obserwacji; t++)//tu

{

licznik += (zmienne[t, i] - srednie[i]) * (zmienne[t, j] - srednie[j]);

mianownik_i += (zmienne[t, i] - srednie[i]) * (zmienne[t, i] - srednie[i]);

mianownik_j += (zmienne[t, j] - srednie[j]) * (zmienne[t, j] - srednie[j]);

}

return licznik / (Math.Sqrt(mianownik_i * mianownik_j));

}

private void licz_macierze_R()

{

macierz_R0 = new Double[l_zmiennych];

macierz_R = new Double[l_zmiennych, l_zmiennych];

licz_srednie();

for (int i = 0; i < l_zmiennych; i++)

macierz_R0[i] = licz_rij(0, i + 1);

for (int i = 0; i < l_zmiennych; i++)

for (int j = 0; j < l_zmiennych; j++)

macierz_R[i, j] = licz_rij(i + 1, j + 1);

}

private void wyswietl_macierze()

{

label3.Text = "";

label4.Text = "";

for (int i = 0; i < l_zmiennych; i++)

{

if (macierz_R0[i] >= 0)

label4.Text += " ";

label4.Text += macierz_R0[i].ToString("0.0000") + "\n";

}

for (int j = 0; j < l_zmiennych; j++)

{

for (int i = 0; i < l_zmiennych; i++)

{

if (macierz_R[j,i] >= 0)

label3.Text += " ";

label3.Text += macierz_R[j,i].ToString("0.0000") + " ";

}

label3.Text += "\n";

}

}

private void button1_Click(object sender, EventArgs e)

{

StreamReader sr = null;

label18.Text = "Wczytane zmienne" + "\n";

char[] delimiterChars = { ' ', '\t' };

string[] liczby;

List<string> linie=new List<string>();

int wiersz=0;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

wyczyscWszystko();

textBox1.Text = openFileDialog1.FileName;

try

{

sr = new StreamReader(openFileDialog1.OpenFile());

using (sr)

{

string linia;

while ((linia = sr.ReadLine()) != null)

{

if (linia.Length < 3)

break;

linie.Add(linia);

//liczby=linia.Split(delimiterChars,StringSplitOptions.RemoveEmptyEntries);

//for (int kol = 0; kol < 5; kol++)

// zmienne[wiersz, kol] = Double.Parse(liczby[kol]);

//wiersz++;

}

}

l_obserwacji = linie.Count;

numericUpDown1.Maximum=l_obserwacji;

//numericUpDown1.Value = 10;

l_zmiennych = linie[0].Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries).Length-1;

//inicjalizuj_tablice();

zmienne = new Double[l_obserwacji, l_zmiennych + 1];

foreach (string linia in linie)

{

liczby = linia.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);

for (int kol = 0; kol <= l_zmiennych; kol++)

{

zmienne[wiersz, kol] = Double.Parse(liczby[kol].Replace('.',','));

label18.Text += zmienne[wiersz, kol].ToString("0.0000") + " ";

}

wiersz++;

label18.Text += "\n";

}

button2.Enabled = true;

button3.Enabled = true;

}

catch (Exception ex)

{

MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);

}

}

button2.Enabled = true;

button3.Enabled = true;

}

private void wyczyscWszystko()

{

Graphics x = this.CreateGraphics();

//x.FillRectangle(Brushes.Silver, 10, 150, 850, 150);

x.FillRectangle(new SolidBrush(this.BackColor), 10, 150, 850, 150);

label3.Text = "";

label4.Text = "";

label5.Text = "";

label10.Text = "Obliczenia" + "\n";

label11.Text = "Wspólczynniki korelacji wielorakiej: " + "\n";

label12.Text = "";

label13.Text = "";

label15.Text = "Współczynnik determinacji R^2= ";

label17.Text = "";

label18.Text = "Wczytane dane z pliku: \n";

label20.Text = "Klasyczna Metoda Najmnieszych Kwadratow";

label21.Text = "Odchylenie standardowe składnika resztokowego Su: ";

label22.Text = "Współczynnik zmienności losowej V: ";

label23.Text = "Obliczone błędy";

}

private void button2_Click(object sender, EventArgs e)

{

oblicz();

}

private void oblicz()

{

wyczyscWszystko();

double rw = 0, R2;

indeksy = new List<int>();

alfa = Convert.ToDouble(comboBox1.SelectedItem.ToString());

l_obserwacji = Decimal.ToInt32(numericUpDown1.Value);

l_elementow = Convert.ToInt32(comboBox2.SelectedItem.ToString());

licz_macierze_R();

wyswietl_macierze();

if (l_elementow == 2) rw = licz_korelacja2();

if (l_elementow == 3) rw = licz_korelacja3();

R2 = rw * rw;

label15.Text += R2.ToString("0.0000") + "\n";

//estymacja();

//button2.Enabled = false;

}

private double[,] transponuj(double[,] A) //transponowanie macierzy

{

double[,] wynik;

wynik= new double[A.GetLength(1), A.GetLength(0)];

for (int i = 0; i < A.GetLength(1); i++)//wiersze

for (int j = 0; j < A.GetLength(0); j++)//kolumny

wynik[i, j] = A[j, i];

return wynik;

}

private double[,] mnozenie(double[,] A,double[,] B) //mnożenie 2 macierzy

{

double[,] wynik = new double[A.GetLength(0), B.GetLength(1)];

if (A.GetLength(1) != B.GetLength(0))

{

MessageBox.Show("Wymiary nie są prawidłowe");

return wynik;

}

for (int i = 0; i < wynik.GetLength(0); i++) //wiersze

for (int j = 0; j < wynik.GetLength(1); j++) //kolumny

{

for (int t = 0; t < A.GetLength(1);t++ )//też pętla

wynik[i,j]+=A[i,t]*B[t,j];

}

return wynik;

}

private double[,] mnozenie(double[,] A, double k) //możenie macierzy przez stałą

{

double[,] wynik = new double[A.GetLength(0), A.GetLength(1)];

for (int i = 0; i < wynik.GetLength(0); i++) //wiersze

for (int j = 0; j < wynik.GetLength(1); j++) //kolumny

{

wynik[i, j] += A[i, j] * k;

}

return wynik;

}

private double[,] odwrotna(double[,] A) //wyznaczanie macierzy odwrotnej

{

double wyz = wyznacznik(A);

double[,] wynik = new double[A.GetLength(0), A.GetLength(0)];

if (wyz == 0.0)

{

MessageBox.Show("Nie można policzyć macierzy odwrotnej.");

return wynik;

}

for (int i = 0; i < wynik.GetLength(0); i++)

for (int j = 0; j < wynik.GetLength(0); j++)

wynik[j, i] = wyznacznik(minor(A, i, j)) / wyz * (Double)Math.Pow(-1, i + j);

return wynik;

}

private double wyznacznik(double[,] A)

{

double wyz = 0.0;

if (A.GetLength(0) != A.GetLength(1))

{

MessageBox.Show("Nie można policzyć wyznacznika.");

return 0.0;

}

if (A.Length==1)

return A[0, 0];

for (int j = 0; j < A.GetLength(1); j++)

wyz += (A[0, j] * wyznacznik(minor(A, 0, j)) * (Double)System.Math.Pow(-1, 0 + j));

return wyz;

}

private double[,] minor(double[,] A, int iRow, int iCol)

{

double[,] wynik = new double[A.GetLength(0)-1,A.GetLength(1)-1];

int m = 0, n = 0;

for (int i = 0; i < A.GetLength(0); i++)

{

if (i == iRow)

continue;

n = 0;

for (int j = 0; j < A.GetLength(1); j++)

{

if (j == iCol)

continue;

wynik[m, n] = A[i, j];

n++;

}

m++;

}

return wynik;

}

private void Form1_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 1;

comboBox2.SelectedIndex = 0;

comboBox3.SelectedIndex = 5;

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

//button2.Enabled = true;

}

private void Form1_Paint(object sender, PaintEventArgs e) //odświeżanie grafu

{

}

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)

{

}

private void button3_Click(object sender, EventArgs e)

{

oblicz();

}

private void label20_Click(object sender, EventArgs e)

{

}

private void label18_Click(object sender, EventArgs e)

{

}

private void label24_Click(object sender, EventArgs e)

{

}

private void panel2_Paint(object sender, PaintEventArgs e)

{

}

private void label23_Click(object sender, EventArgs e)

{

}

private void panel6_Paint(object sender, PaintEventArgs e)

{

}

}

}