background image

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

 

background image

        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"; 
 
 

background image

 
            //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]; 

background image

            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]; 

background image

            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); 

background image

            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]; 

background image

            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"; 
                } 
                 

background image

            } 
            //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") + " "; 
                    } 

background image

                    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 

background image

            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} 

background image

            { 
                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"; 
                } 
            } 
 
 
 

background image

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

background image

                    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"; 
                } 

background image

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

background image

                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]); 

background image

                            //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";  
 

background image

        } 
 
        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)]; 
 

background image

 
            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; 

background image

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