Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 25.32 KB | None | 0 0
  1. package pigment;
  2.  
  3. import java.lang.Math.*;
  4. import java.util.ArrayList;
  5. import Jama.*;
  6.  
  7. class Counting
  8. {  
  9.    Counting(){}                     //pusty konstruktor klasy
  10.    
  11.    static void sort(String[] a, double[]...arg) //metoda sortowania bąbelkowego o zmien-
  12.    {            //nej liczbie argumentów. Metoda sortuje
  13.         double[] temp=new double[arg.length+1]; //malejąco element tablicy, która jest dru-
  14.         String temp1;                //gim argumentem wywołania, w pozostałych
  15.                          //Zmienia pozycje elementów względem posor-
  16.         int change = 1;              //towanej tablicy*/
  17.        
  18.         while(change>0)
  19.         {
  20.             change=0;
  21.             for(int j=0; j<a.length-1; j++)
  22.             {
  23.                 if(arg[0][j]<arg[0][j+1])
  24.                 {
  25.                     temp1=a[j+1];              
  26.                     a[j+1]=a[j];                  
  27.                     a[j] = temp1;
  28.                    
  29.                     for(int k=0; k<arg.length; k++)
  30.                     {
  31.                         temp[k]=arg[k][j+1];              
  32.                         arg[k][j+1]=arg[k][j];                  
  33.                         arg[k][j] = temp[k];
  34.                     }
  35.                     change++;
  36.                 }
  37.             }
  38.         }
  39.    }
  40.    
  41.      static ArrayList<String> check_similarity(String path, String back, ArrayList<Item> list_of_pigments)
  42.     {      /*metoda wyznaczająca podobieństwo między widmami
  43.             metoda zwraca obiekt typu ArrayList, który zawiera nazwę ba-
  44.            danej próbki oraz wykaz pigmentów bazowych z wyliczonymi współczynnikami podobieństwa*/
  45.         ArrayList<String> result=new ArrayList<>();
  46.         String[] base_name=new String[list_of_pigments.size()];
  47.                                                                                                          //tablica przechowująca nazwy pigmentów referen-
  48.         Item unknown=new Item(path, back);                        //cyjnych
  49.         unknown.set_everything();                                           //dokonanie reprezentacji widma badanego w postaci
  50.                                                                                                         //obiektu Item
  51.         double[] wavesx=unknown.get_waves();                //tablice charaktersytyk widma badanego
  52.         double[] reflectancesx=unknown.get_reflectance();
  53.         double[] errorsx=unknown.get_error();
  54.         int unknown_size=unknown.get_size();
  55.         String unknown_name=unknown.get_name();
  56.         //tablica przechowująca wartości współczynników podobieństwa oraz ich niepewność
  57.         double[][] array_of_similarity=new double [2][list_of_pigments.size()];
  58.        
  59.         double[] mintab1=list_of_pigments.get(0).get_waves();
  60.         double min=mintab1[0];
  61.         double max=mintab1[mintab1.length-1];
  62.            
  63.          for(int x=0; x<list_of_pigments.size(); x++)
  64.          {
  65.              double[] mintab=list_of_pigments.get(x).get_waves();  //sprawdzenie, które z widm ma najwęższe
  66.                                                                                             //spektrum odbiciowe
  67.              if(mintab[0]>min)
  68.              {
  69.                  min=mintab[0];
  70.              }
  71.              else if(mintab[mintab.length-1]<max)
  72.              {
  73.                  max=mintab[mintab.length-1];
  74.              }
  75.          }
  76.  
  77.         for (int i=0; i<list_of_pigments.size(); i++) //pętla po wszystkich elementach
  78.         {                                                                                //biblioteki
  79.             double similarity=0.0;
  80.             double uncertain_of_similarity;
  81.             double sum_of_errorsx=0.0;     //zmienne pomocnicze w wyznaczaniu niepewności
  82.             double sum_of_errorsb=0.0;
  83.             double size=0.0;
  84.            
  85.             double[] wavesb=list_of_pigments.get(i).get_waves();     //tablice charakterystyk
  86.             double[] reflectancesb= list_of_pigments.get(i).get_reflectance(); //widma
  87.             double[] errorsb= list_of_pigments.get(i).get_error();  //referencyjnego
  88.             int base_size=list_of_pigments.get(i).get_size();
  89.            
  90.             base_name[i]=list_of_pigments.get(i).get_name();    //zapamiętanie nazwy pi-
  91.                                     //gmentu bazowego
  92.             for(int j=0; j<unknown_size; j++)   //pętla przechodząca po wszyst-kich pun-
  93.             {           //ktach widma badanego porównania dokonuje się w zakresie fal
  94.                 for(int k=0; k<base_size; k++)                                                    //widma badanego
  95.                 {
  96.                     if(wavesx[j]>=min&&wavesx[j]<=max)
  97.                     {
  98.                         if(wavesx[j]==wavesb[k])                            //wartości odbić można porównać wówczas,gdy
  99.                         {                                                                           //przypisane są tej samej długości fali
  100.                            similarity=similarity+Math.pow(reflectancesx[j]-reflectancesb[k], 2.0);    
  101.                            size=size+1.0;         //zgodnie z 3.4.1 wyznacza się kwadrat różnicy reflektancji
  102.                                                                  //obliczenia niepewności wg 3.4.2
  103.                             sum_of_errorsx=sum_of_errorsx+Math.pow(errorsx[j]*(reflectancesb[k]-reflectancesx[j]), 2.0);
  104.  
  105.                             sum_of_errorsb=sum_of_errorsb+Math.pow(errorsb[k]*(reflectancesb[k]-reflectancesx[j]), 2.0);
  106.                         }
  107.  
  108.                         if(k!=base_size-1)
  109.                         {
  110.                             if(wavesx[j]>wavesb[k] && wavesx[j]<wavesb[k+1])
  111.                             {                                                                // jeżeli wartość odbicia widma bazowego nie przypada
  112.                                 double x1=wavesb[k];                   //na tą samą długość fali, co wi-
  113.                                 double y1=reflectancesb[k];        //dma badanego, wówczas war-tość ref-
  114.                                 double x2=wavesb[k+1];              //lektancji szacuje się wyznaczając
  115.                                 double y2=reflectancesb[k+1];    //prostą łączącą dwa punkty, których
  116.                                 double z=wavesx[j];              //odcięte ograniczają badaną długość
  117.                                                                                             //fali
  118.                                 double ref=y1+((z-x1)*((y2-y1)/(x2-x1)));
  119.  
  120.                                 similarity=similarity+Math.pow(reflectancesx[j]-ref, 2.0);
  121.                                  size=size+1.0;
  122.                                 //z prawa przenoszenia niepewności wyznacza się niepewność otrzymanej wartości odbicia
  123.                                 double error_of_ref=Math.sqrt(Math.pow((1+((z+x1)/(x2-x1)))*errorsb[k],2.0)+Math.pow(((z-x1)/(x2-x1))*errorsb[k+1],2.0));
  124.  
  125.                                 sum_of_errorsx=sum_of_errorsx+Math.pow(errorsx[j]*(ref-reflectancesx[j]), 2.0);
  126.                                 sum_of_errorsb=sum_of_errorsb+Math.pow(error_of_ref*(ref-reflectancesx[j]), 2.0);  
  127.                             }
  128.                         }
  129.                     }
  130.                 }
  131.             }
  132.            
  133.             similarity=similarity/size; //S i u(S) według 3.4.1 i 3.4.2
  134.             uncertain_of_similarity=(Math.sqrt( sum_of_errorsx+sum_of_errorsb))/size;
  135.  
  136.             array_of_similarity[0][i]=Math.exp(-similarity)*100.0;
  137.             array_of_similarity[1][i]=Math.exp(-similarity)*100.0*uncertain_of_similarity;
  138.         }
  139.        
  140.         double[] array1=new double[list_of_pigments.size()];      //tablice pomocnicze,
  141.         double[] array2=new double[list_of_pigments.size()];      //dzięki którym możliwe
  142.                                                                //jest posortowanie otrzymanej tablicy podobieństw
  143.         for(int z=0; z<list_of_pigments.size(); z++)                    
  144.         {
  145.             array1[z]=array_of_similarity[0][z];
  146.             array2[z]=array_of_similarity[1][z];
  147.         }
  148.        
  149.         sort(base_name, array1, array2);    //sortowanie tablicy podobieństw, niepewności
  150.                 //oraz nazwy pigmentów zmieniają tak swoje poło-
  151.         result.add(unknown_name);   //żenie w tablicy, aby odpowiadały wartościom S
  152.         result.add("\n");
  153.        
  154.         for(int z=0; z<list_of_pigments.size(); z++)
  155.         {
  156.             result.add("Pigment  \t"+base_name[z]+"  \tS: \t"+Double.toString(array1[z])+"\t  u(S): \t "+Double.toString(array2[z]));
  157.                           //wypełnienie listy otrzymanymi wartościami
  158.         }                                                                                            
  159.         result.add("\n");
  160.        
  161.         return result;
  162. }
  163.    
  164.     static ArrayList<String> count_SAM(String path, String back, ArrayList<Item> list_of_pigments)
  165.     { //metoda wyliczająca współczynnik SAM podobieństw widm. Stworzona analogicznie do
  166.         ArrayList<String> result=new ArrayList<>();     /*metody check_similarity(), różni się je-
  167.                                                                             dynie wzorem na współczyn-nik i jego niepewność*/
  168.            
  169.         String[] base_name=new String[list_of_pigments.size()];
  170.        
  171.         Item unknown=new Item(path, back);
  172.         unknown.set_everything();
  173.        
  174.         double[] wavesx=unknown.get_waves();
  175.         double[] reflectancesx=unknown.get_reflectance();
  176.         double[] errorsx=unknown.get_error();
  177.         int unknown_size = unknown.get_size();
  178.         String unknown_name=unknown.get_name();
  179.        
  180.         double [][] array_of_sam = new double [2][list_of_pigments.size()];
  181.  
  182.          double[] mintab1=list_of_pigments.get(0).get_waves();
  183.          double min=mintab1[0];
  184.          double max=mintab1[mintab1.length-1];
  185.            
  186.           for(int x=0; x<list_of_pigments.size(); x++)
  187.           {
  188.              double[] mintab=list_of_pigments.get(x).get_waves(); //sprawdzenie, które z widm ma najwęższe
  189.                                                                                             //spektrum odbiciowe
  190.              if(mintab[0]>min)
  191.              {
  192.                  min=mintab[0];
  193.              }
  194.              else if(mintab[mintab.length-1]<max)
  195.              {
  196.                  max=mintab[mintab.length-1];
  197.              }
  198.           }
  199.          
  200.         for (int i=0; i<list_of_pigments.size(); i++)
  201.         {      
  202.             double sam;
  203.             double sum1 = 0.0;      //zmienne pomocnicze do wyznaczenia SAM
  204.             double sum2 = 0.0;
  205.             double sum3 = 0.0;
  206.             double uncertain_of_sam;
  207.  
  208.             double[]wavesb=list_of_pigments.get(i).get_waves();
  209.             double[]reflectancesb=list_of_pigments.get(i).get_reflectance();
  210.             double[]errorsb=list_of_pigments.get(i).get_error();
  211.             int base_size=list_of_pigments.get(i).get_size();
  212.  
  213.             base_name[i]=list_of_pigments.get(i).get_name();
  214.            
  215.             for(int j=0; j<unknown_size; j++)
  216.             {
  217.                 if(wavesx[j]>=min&&wavesx[j]<=max)
  218.                 {
  219.                     for(int k=0; k<base_size; k++)
  220.                     {
  221.                         if(wavesx[j]==wavesb[k])
  222.                         {
  223.                            sum1=sum1+(reflectancesx[j]*reflectancesb[k]);   //licznik SAM oraz
  224.                            sum2=sum2+(Math.pow(reflectancesx[j], 2.0));     //czynniki mianownika
  225.                            sum3=sum3+(Math.pow(reflectancesb[k], 2.0));     //wg 1.3.4 oraz 3.4.3
  226.                         }
  227.  
  228.                         if(k!=base_size-1)
  229.                         {
  230.                             if(wavesx[j]>wavesb[k]&& wavesx[j]<wavesb[k+1])
  231.                             {
  232.                                 double x1=wavesb[k];
  233.                                 double y1=reflectancesb[k];
  234.                                 double x2=wavesb[k+1];
  235.                                 double y2=reflectancesb[k+1];
  236.                                 double z=wavesx[j];
  237.  
  238.                                 double ref= y1+((z-x1)*((y2-y1)/(x2-x1)));
  239.  
  240.                                 sum1=sum1+(reflectancesx[j]*ref);
  241.                                 sum2=sum2+(Math.pow(reflectancesx[j], 2.0));
  242.                                 sum3=sum3+(Math.pow(ref, 2.0));
  243.                             }
  244.                         }
  245.                     }
  246.                 }
  247.             }
  248.            
  249.             sam = Math.acos((sum1)/((Math.sqrt(sum2))*(Math.sqrt(sum3))));
  250.            
  251.             double xb=sum1;    //zmienne pomocnicze do wyznaczenia niepewności SAM
  252.             double xx=sum2;
  253.             double bb=sum3;
  254.             double a;
  255.             double b;
  256.             double suma=0.0;
  257.             double sumb=0.0;
  258.            
  259.              for(int m=0; m<unknown_size; m++)   //w celu wyznaczenia u(SAM) konieczne
  260.             {                    //jest ponowne przejscie po wszystkich elementach widma badanego
  261.                  if(wavesx[m]>=min&&wavesx[m]<=max)
  262.                  {
  263.                     for(int n=0; n<base_size; n++)                                                                                                                                      
  264.                     {
  265.                         if(wavesx[m]==wavesb[n])
  266.                         {
  267.                            a=((reflectancesb[n]*xb*Math.sqrt(xx))-(reflectancesx[m]*bb*Math.sqrt(xx)))/(xx*Math.pow(bb, 1.5)*(Math.sqrt(1-((xb)/(Math.sqrt(xx)*Math.sqrt(bb))))))*errorsb[n];
  268.                            b=((reflectancesx[m]*xb*Math.sqrt(bb))-(reflectancesb[n]*xx*Math.sqrt(bb)))/(bb*Math.pow(xx, 1.5)*(Math.sqrt(1-((xb)/(Math.sqrt(xx)*Math.sqrt(bb))))))*errorsx[m];
  269.  
  270.                            suma=suma+Math.pow(a, 2.0);
  271.                            sumb=sumb+Math.pow(b, 2.0);
  272.                         }
  273.                        
  274.                         if(n!=base_size-1)
  275.                         {
  276.                             if(wavesx[m]>wavesb[n]&& wavesx[m]<wavesb[n+1])
  277.                             {
  278.                                 double x1=wavesb[n];
  279.                                 double y1=reflectancesb[n];
  280.                                 double x2=wavesb[n+1];
  281.                                 double y2=reflectancesb[n+1];
  282.                                 double z=wavesx[m];
  283.  
  284.                                 double ref= y1+((z-x1)*((y2-y1)/(x2-x1)));
  285.  
  286.                                 double error_of_ref=Math.sqrt(Math.pow((1+((z+x1)/(x2-x1)))*errorsb[n],2.0)+Math.pow(((z-x1)/(x2-x1))*errorsb[n+1],2.0));
  287.  
  288.                                 a=((reflectancesb[n]*xb*Math.sqrt(xx))-(reflectancesx[m]*bb*Math.sqrt(xx)))/(xx*Math.pow(bb, 1.5)*(Math.sqrt(1-((xb)/(Math.sqrt(xx)*Math.sqrt(bb))))))*errorsb[n];
  289.                                 b=((reflectancesx[m]*xb*Math.sqrt(bb))-(ref*xx*Math.sqrt(bb)))/(bb*Math.pow(xx, 1.5)*(Math.sqrt(1-((xb)/(Math.sqrt(xx)*Math.sqrt(bb))))))*error_of_ref;
  290.  
  291.                                 suma=suma+Math.pow(a, 2.0);
  292.                                 sumb=sumb+Math.pow(b, 2.0);
  293.                             }    
  294.                         }
  295.                      }
  296.                  }
  297.               }
  298.            
  299.             uncertain_of_sam=Math.sqrt(suma+sumb);
  300.  
  301.             array_of_sam [0][i]=Math.exp(-sam)*100.0;
  302.             array_of_sam[1][i]=Math.exp(-sam)*100.0*uncertain_of_sam;
  303.         }
  304.        
  305.          double[] array1=new double[list_of_pigments.size()];
  306.          double[] array2=new double[list_of_pigments.size()];
  307.        
  308.          for(int z=0; z<list_of_pigments.size(); z++)
  309.          {
  310.             array1[z]=array_of_sam[0][z];
  311.             array2[z]=array_of_sam[1][z];
  312.          }
  313.        
  314.          sort(base_name, array1, array2);    //sortowanie
  315.        
  316.          result.add(unknown_name);
  317.          result.add("\n");
  318.        
  319.          for(int z=0; z<list_of_pigments.size(); z++)
  320.          {
  321.             result.add("Pigment\t  "+base_name[z]+"  \tSAM:\t  "+Double.toString(array1[z])+"  \tu(SAM):\t  "+Double.toString(array2[z]));
  322.          }
  323.          result.add("\n");
  324.        
  325.         return result;
  326.     }
  327.    
  328.     static ArrayList<String> check_containing(String path, String back, ArrayList<Item> list, String option)
  329.     {   //metoda wyznaczająca składowe widm mieszanych, jej konstukcja
  330.         ArrayList<String> result=new ArrayList<>();   /*również jest podobna do budowy
  331.                                                                                                     dwóch poprzednich metod*/
  332.          String[] base_name=new String[list.size()];
  333.        
  334.         Item unknown=new Item(path, back);
  335.         unknown.set_everything();
  336.        
  337.         double[] unknown_wave=unknown.get_waves();         //widmo badane
  338.         double[] unknown_ref=unknown.get_reflectance();
  339.         int unknown_size=unknown.get_size();
  340.         String unknown_name=unknown.get_name();
  341.        
  342.         double[] temporary_ref ;
  343.         double[] temporary_wave;
  344.        
  345.         double min=unknown_wave[0];
  346.         double max=unknown_wave[unknown_wave.length-1];
  347.        
  348.         for(int x=0; x<list.size(); x++)
  349.         {
  350.             double[] mintab=list.get(x).get_waves();    //sprawdzenie, które z widm ma najwęższe
  351.                                                                                             //spektrum odbiciowe
  352.             if(mintab[0]>min)
  353.             {
  354.                 min=mintab[0];
  355.             }
  356.             else if(mintab[mintab.length-1]<max)
  357.             {
  358.                 max=mintab[mintab.length-1];
  359.             }
  360.         }
  361.            
  362.         ArrayList<Double>  matrixA=new ArrayList<>();
  363.         ArrayList<Double> matrixB=new ArrayList<>();
  364.        //lista matrixA przechowuje punkty widm bazowych, matrixB punkty widma badanego wg wzoru 3.4.7
  365.         Matrix a;  
  366.         Matrix b;
  367.         Matrix x;
  368.              
  369.         for(int i=0; i<list.size(); i++) //pętla przechodząca po elementach bazy
  370.         {
  371.             temporary_wave = list.get(i).get_waves();   //długość fali i odbicie widma
  372.             temporary_ref = list.get(i).get_reflectance();  //bazowego
  373.            
  374.             base_name[i]=list.get(i).get_name();    //tablica przechowująca nazwę widma bazy
  375.                  
  376.             for(int j=0; j<unknown_size; j++)   //pętla przechodząca po wszytskich pun-
  377.             {           //ktach widma badanego
  378.                 if((unknown_wave[j]>=min)&&(unknown_wave[j]<=max)) //widmo jest analizowane tylko
  379.                 {                                                               //w najwęższym możliwym zakresie długości fal
  380.                     for(int k=0; k<list.get(i).get_size(); k++)  //pętla przechodząca po wszystkich punktach wi-
  381.                     {                                                               //dma odniesienia
  382.                         if (unknown_wave[j]==temporary_wave[k])
  383.                         {
  384.                              matrixA.add(temporary_ref[k]);   //wypełnianie matrixA wartościa-
  385.                         }               //mi odbić widm bazowych
  386.                                                
  387.                         else if (unknown_wave[j]>temporary_wave[k]&&unknown_wave[j]<temporary_wave[k+1])
  388.                         {
  389.                             double x1=temporary_wave[k];
  390.                             double y1=temporary_ref[k];
  391.                             double x2=temporary_wave[k+1];
  392.                             double y2=temporary_ref[k+1];
  393.                             double z=unknown_wave[j];
  394.                                    
  395.                             matrixA.add(y1+((z-x1)*((y2-y1)/(x2-x1))));
  396.                         }
  397.                     }
  398.                 }
  399.             }
  400.         }
  401.        
  402.         for(int m=0; m<unknown_size; m++)   //wypełnianie matrixB wartościami odbić widma
  403.         {           //analizowanego
  404.             if((unknown_wave[m]>=min)&&(unknown_wave[m]<=max))
  405.             {
  406.                 matrixB.add(unknown_ref[m]);
  407.             }
  408.         }
  409.        
  410.         double[][] mb=new double[matrixB.size()][1];    //tablice pomocnicze w stworzeniu macierzy a i b
  411.         double[][] ma=new double[matrixA.size()/list.size()][list.size()];
  412.        
  413.         for(int t=0; t<matrixB.size(); t++)
  414.         {
  415.             mb[t][0]=matrixB.get(t);
  416.         }
  417.         int counter1=0;
  418.         int counter2=0;
  419.        
  420.         for(int t=0; t<matrixA.size(); t++)
  421.         {
  422.             if(counter1==(matrixA.size()/list.size()))
  423.             {
  424.                 counter1=0;
  425.                 counter2++;
  426.                 ma[t-((matrixA.size()/list.size())*counter2)][counter2]=matrixA.get(t);
  427.                 counter1++;
  428.             }
  429.             else
  430.             {
  431.                 ma[t-((matrixA.size()/list.size())*counter2)][counter2]=matrixA.get(t);
  432.                 counter1++;
  433.             }
  434.         }
  435.        
  436.         a=new Matrix(ma);      //utworzenie obiektów macierzowych z wyznaczonych
  437.         b=new Matrix(mb);      //list matrixA i matrixB
  438.        
  439.         x = Matrixes.find_overdetermined(a, b); /*rozwiązanie problemu najmniejszych kwadra-
  440.          tów dla macierzy a i b; metoda nazywa się find_overdetermined(), gdyż rozważany układ*/
  441.         int number_of_minus_item=0;             //ma więcej równań niż niewiadomych, jest nad-
  442.         ArrayList<Integer> counters=new ArrayList<>();  //określony
  443.        
  444.          for(int g=0; g<x.getRowDimension(); g++)   //wyznaczenie ilości ujemnych współczyn-
  445.         {                                                                                   //ników w otrzymanym rozwiązaniu oraz ich
  446.            if(x.get(g, 0)<0)                                                    //sumy
  447.            {
  448.                 number_of_minus_item++;
  449.                 counters.add(g);
  450.            }
  451.         }
  452.          
  453.         while(number_of_minus_item>0) //dopóki liczba ujemnych współczynnikow nie ró-
  454.         {                                                                //wna się zeru, należy wykonać poniższe operacje
  455.             double sum_of_coefficient=0.0;
  456.             ArrayList<String> similarity=new ArrayList<>();
  457.             double[] s=new double[list.size()];
  458.             int counter=0;
  459.              
  460.             if(option.equals("S"))              //dobór algorytmu, wg którego ma się odbyć poró-
  461.             {                                                   //wnywanie widm
  462.                 similarity=Counting.check_similarity(path, back, list);
  463.             }
  464.             else if(option.equals("SAM"))
  465.             {
  466.                 similarity=Counting.count_SAM(path, back, list);
  467.             }
  468.              
  469.             for(int i=0; i<s.length; i++)
  470.             {
  471.                 s[i]=Double.parseDouble(similarity.get(5+i*6));
  472.             }
  473.              
  474.             for(int g=0; g<x.getRowDimension(); g++)  
  475.             {                                                                                  
  476.                 if(x.get(g, 0)<0)                                        //suma ujemnych współczynników            
  477.                 {
  478.                     sum_of_coefficient=sum_of_coefficient+s[g];
  479.                     counter++;
  480.                 }
  481.             }
  482.            
  483.             for(int g=0; g<x.getRowDimension(); g++)  
  484.             {                                                                                  
  485.                 if(x.get(g, 0)<0)                                                    
  486.                 {
  487.                     if(g==counters.get(0))
  488.                     {
  489.                         x.set(g, 0, 0.0);
  490.                     }
  491.                     sum_of_coefficient=sum_of_coefficient+(1/s[g]);
  492.                 }
  493.             }
  494.            
  495.             for(int g=0; g<x.getRowDimension(); g++)  
  496.             {                                                                                  
  497.                 if(x.get(g, 0)<0)     //przydzielenie wag ujemnych współczynników dodatnim            
  498.                 {
  499.                     x.set(g, 0, x.get(g,0)-(x.get(counters.get(0), 0)*(1/s[g])/sum_of_coefficient));
  500.                 }
  501.             }
  502.            
  503.             number_of_minus_item=0;
  504.             counters.removeAll(counters);
  505.            
  506.             for(int g=0; g<x.getRowDimension(); g++)  
  507.             {                                                                                  
  508.                 if(x.get(g, 0)<0)                                                    
  509.                 {
  510.                     number_of_minus_item++;
  511.                     counters.add(g);
  512.                 }
  513.             }
  514.         }
  515.        
  516.         double sum=0.0;
  517.        
  518.         for(int g=0; g<x.getRowDimension(); g++)
  519.         {
  520.             sum=sum+x.get(g, 0);
  521.         }
  522.        
  523.         for(int g=0; g<x.getRowDimension(); g++)
  524.         {
  525.             x.set(g, 0, (x.get(g, 0))/sum);         //normalizacja otrzymanych wag
  526.         }
  527.  
  528.         double[] array1=new double[list.size()];
  529.        
  530.          for(int z=0; z<list.size(); z++)
  531.          {
  532.             array1[z]=x.get(z, 0);
  533.          }
  534.        
  535.          sort(base_name, array1);   //sortowanie otrzymanych wyników
  536.        
  537.          result.add(unknown_name+"\n");
  538.        
  539.          for(int z=0; z<list.size(); z++)
  540.          {
  541.             result.add("Pigment \t "+base_name[z]+"\t  containing:  \t"+Double.toString(array1[z]));
  542.          }
  543.          result.add("\n");
  544.      
  545.         return result;
  546.     }
  547. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement