Kod programu

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)

{

}

}

}


Wyszukiwarka

Podobne podstrony:
Kod programu Puzzle
Frezowanie kod programu
Digital LC Meter Version 2, kod programu
Toczenie kod programu
Kod programu
kod programu frezowanie LUKASZ
toczenie kod programu Lukasz
Piŕkny kod Tajemnice mistrzˇw programowania
Czysty kod Podręcznik dobrego programisty
12-kod~1, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy programowania, l2
Kod do Programu i instalacja Time Factory
Kod źródłowy programu p1
13-kod~1, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy programowania, l2
Jak pisaŠ przenoÂny kod Wstŕp do programowania wieloplatformowego
beta kod pierwszy program

więcej podobnych podstron