Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 31. 12. 2009 16:53

jarrro
Příspěvky: 5490
Škola: UMB BB Matematická analýza
Reputace:   303 
Web
 

zacyklenie v jave

Code:

public class SimplexMethod { 
   private static TriangularMatrixAlgorithms<Fraction> tma = new TriangularMatrixAlgorithms<Fraction>(); 

   public static Fraction Maximize(Vector<Fraction> c, 
         NumericMatrix<Fraction> a, Vector<Fraction> b) { 
      if ((c == null) || (a == null) || (b == null)) { 
         throw new NullPointerException(); 
      } 
      if ((c.getLength() != a.getNoColumns()) 
            || (b.getLength() != a.getNoRows())) { 
         throw new IllegalArgumentException(); 
      } 
      NumericMatrix<Fraction> tojeterazjedno = new NumMatrix<Fraction>(a 
            .getNoRows() + 1, a.getNoColumns() + a.getNoRows() + 1); 
      Fraction[][] polevtjtj = new Fraction[tojeterazjedno.getNoRows()][tojeterazjedno 
            .getNoColumns()]; 
      for (int i = 0; i < tojeterazjedno.getNoRows() - 1; i++) { 
         for (int j = 0; j < tojeterazjedno.getNoColumns() - 1; j++) { 
            if ((i < a.getNoRows()) && (j < a.getNoColumns())) { 
               polevtjtj[i][j] = a.getElement(i, j); 
            } else { 
               if (j == (i + a.getNoColumns())) { 
                  polevtjtj[i][j] = Fraction.ONE; 
               } else { 
                  polevtjtj[i][j] = Fraction.ZERO; 
               } 
            } 
         } 

      } 
      for (int i = 0; i < tojeterazjedno.getNoColumns(); i++) { 
         if (i < c.getLength()) { 
            polevtjtj[tojeterazjedno.getNoRows() - 1][i] = c.getElement(i) 
                  .negate(); 
         } else { 
            polevtjtj[tojeterazjedno.getNoRows() - 1][i] = Fraction.ZERO; 
         } 
      } 
      for (int i = 0; i < tojeterazjedno.getNoRows() - 1; i++) { 
         polevtjtj[i][tojeterazjedno.getNoColumns() - 1] = b.getElement(i); 
      } 
      tojeterazjedno = new NumMatrix<Fraction>(polevtjtj); 
      System.out.println(tojeterazjedno); 
      boolean optimalne = true; 
      for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) { 
         if (tojeterazjedno.getElement(tojeterazjedno.getNoRows() - 1, i) 
               .compareTo(Fraction.ZERO) < 0) { 
            optimalne = false; 
             
         } 

      } 
      int stlpec=0; 
      int riadok=0; 
      boolean cyklus=true; 
      ArrayList<Fraction> zoznam = new ArrayList<Fraction>(); 

      while (!optimalne) { 
         for (int i = 1; i < tojeterazjedno.getNoColumns()-1; i++) { 
            zoznam.add(tojeterazjedno.getElement( 
                  tojeterazjedno.getNoRows() - 1, i)); 
         } 
         Collections.sort(zoznam); 
         cyklus=true; 
         tu: 
            if(cyklus){ 
         for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) { 
            if (tojeterazjedno 
                  .getElement(tojeterazjedno.getNoRows() - 1, i).equals( 
                        zoznam.get(0))) { 
               stlpec = i; 
               cyklus=false; 
                   break tu; 
            } 
         }} 
       
         zoznam.clear(); 
         for (int i = 0; i < a.getNoRows(); i++) { 
            if (tojeterazjedno.getElement(i, stlpec) 
                  .equals(Fraction.ZERO)){ 
               zoznam.add(new Fraction(Integer.MAX_VALUE)); 
            }else{ 
               zoznam.add(tojeterazjedno.getElement(i, 
                     tojeterazjedno.getNoColumns() - 1).divide( 
                     tojeterazjedno.getElement(i, stlpec))); 
            } 
         } 
         Collections.sort(zoznam); 
         cyklus=true; 
         sem: 
            if(cyklus){ 
         for (int i = 0; i < a.getNoRows(); i++) { 
            if(tojeterazjedno.getElement(i, stlpec).equals(Fraction.ZERO)){ 
                
            }else{ 
            if (tojeterazjedno.getElement(i, 
                  tojeterazjedno.getNoColumns() - 1).divide( 
                  tojeterazjedno.getElement(i, stlpec)).equals( 
                  zoznam.get(0))) { 
               riadok = i; 
               cyklus=false; 
               break sem; 
             
            }} 
         }} 
          
         zoznam.clear(); 
         for (int i = 0; i < tojeterazjedno.getNoRows(); i++) { 
            if (i != riadok){ 
               if (!(tojeterazjedno.getElement(i, stlpec) 
                     .equals(Fraction.ZERO))&&(!(tojeterazjedno.getElement(riadok, stlpec).equals(Fraction.ZERO)))) { 
                  tojeterazjedno = tma.multiplyRowWithScalar( 
                        tojeterazjedno, riadok, tojeterazjedno 
                              .getElement(i, stlpec).divide( 
                                    tojeterazjedno.getElement( 
                                          riadok, stlpec)) 
                              .negate()); 
                  tojeterazjedno = tma.sumRows(tojeterazjedno, riadok, i); 
               } 
            } 
         } 
         tojeterazjedno=tma.multiplyRowWithScalar(tojeterazjedno, riadok, tojeterazjedno.getElement(riadok,stlpec).invert()); 
         System.out.println(tojeterazjedno); 
         cyklus=true; 
         optimalne = true; 
         tuto: 
            if(cyklus){ 
         for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) { 
            if (tojeterazjedno 
                  .getElement(tojeterazjedno.getNoRows() - 1, i) 
                  .compareTo(Fraction.ZERO) < 0) { 
               optimalne = false; 
               cyklus=false; 
               break tuto; 
            } 

         } 
            } 
          
      } 

      return null; 
   } 

}

neviete náhodou čo tu môže spôsobovať zacyklenie mne sa zdá ako keby tojeterazjedno bolo vždy to isté a v cykle sa nezmenilo aj keď ho mením


MATH IS THE BEST!!!

Offline

 

#2 01. 01. 2010 17:12

jarrro
Příspěvky: 5490
Škola: UMB BB Matematická analýza
Reputace:   303 
Web
 

Re: zacyklenie v jave

už som to vyriešil v prvom for cykle vo while mám int i=1 a má byť 0


MATH IS THE BEST!!!

Offline

 

#3 01. 01. 2010 17:16

xxsawer
Příspěvky: 196
Reputace:   
 

Re: zacyklenie v jave

↑ jarrro:
Kdyz na to tak koukám tak kdekoli :) Ne, přijde mi to děsně nepřehledný a nechce se mi to luštit...To odsazování je šílený a na to pokračování na dalších řádkách taky nejsem zvyklej...
Cyklama se to tam jenom hemží...jestli nevíš kde je problém tak hoď do každýho nějakej výpis a máš to hned

Offline

 

#4 01. 01. 2010 17:38

jarrro
Příspěvky: 5490
Škola: UMB BB Matematická analýza
Reputace:   303 
Web
 

Re: zacyklenie v jave

↑ xxsawer:už je to ok tam v tom fore hneď pod while je int i=1 a má byť 0 už to ide dobre


MATH IS THE BEST!!!

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson