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)
{
}
}
}