argon bulletin board

Експертно търсене  

Новини:

Автор Тема: java. metod na gaus-jordan  (Прочетена 3130 пъти)

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« -: 12.07.2004, 07:42:00 »

Zdraveite,

Ima li funkciq na Java za presmqtane na obratnata matrica po metoda na Gaus-Jordan nqkoi, koito da ima jelanie da q spodeli vyv foruma? Blagodarq predvaritelno!
Активен

Цуйка

  • Гост
java. metod na gaus-jordan
« Отговор #1 -: 12.07.2004, 13:07:00 »

Имаше една в Java3D :)) Ама тя смята само 4x4 матрици. Не знам дали смята по Гаус-Жордан...
Не виждам само какъв е проблема да си я напишеш сам? До колкото си спомням едно време по Числени Методи ги писахме всичките тия програмки... за точки за изпита :)
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« Отговор #2 -: 12.07.2004, 15:34:00 »

G-n Цуйка,

Problemyt e dosta syshtestven i se naricha vreme.

iskreno vash:
Atanas Chanev
Активен

Цуйка

  • Гост
java. metod na gaus-jordan
« Отговор #3 -: 12.07.2004, 17:10:00 »

г-н artanis,
тогава не очаквайте някой да си го губи, за да отговаря на тъпия ви въпрос.

Искрено ваш
Цуйка и Пуйка
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« Отговор #4 -: 13.07.2004, 00:19:00 »

g-n Цуйка и Пуйка,

Ako razpolagah s vyprosnata funkciq, bih q dal vyv foruma na tozi, koito se nujdae ot neq. Nqma da zagubq mnogo vreme, no shte spechelq uvajenieto mu i moga da ochakvam sydeistvie, kogato az ne iskam da gubq ot vremeto, za da pisha neshto, koeto nqkoi e pisal predi men. No Vie gi razbirate tezi neshta g-n Цуйка. Nali rabotite v ekip.
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
java. metod na gaus-jordan
« Отговор #5 -: 13.07.2004, 02:54:00 »

В интерес на истината имам го тоя метод на C++ защото си играх по числени да го пиша но стана бъгав и не мисля, че ще свърши работа. Търси в Google.

[This message has been edited by sasquatch (edited 13-07-2004).]
Активен

Цуйка

  • Гост
java. metod na gaus-jordan
« Отговор #6 -: 13.07.2004, 13:56:00 »

г-н artanis,
значи все пак разбирате от Кирилица (или поне от copy-paste). Аз вече си мислех че сте от ония Linux Hacker Wannabe's дето са чули че истиските програмисти пишат само под Линукс, обаче не им стига акъла да си го кирилизират. Ама явно не сте. Така че ако може ДА ПИШЕТЕ НА КИРИЛИЦА, щото не разбирам шлохавица. Искам само да ви напомня темата на дипломната Ви работа - доколкото си спомням беше някъф синтактичен анализатор на БЪЛГАРСКИ език... не на маймуница... Или ви е срам да се наречете българин, а?
Колкото до екипа - прав сте. Не мога да работя в екип, в който всички постоянно ме питат "Защо като търся детерминантата на 7x8 матрица и метода ми мята Exception?", "Имаш ли клас за събиране на матрици?", "Как се прави вложен цикъл?", "Защо не мога да си кръстя променливата #$??хуйбатемлякукраватаемъжка????" и разни такива въпроси от компетенцията на чичко Google.

PS. И не ми прави забележки за думи като 'някъф'... много добре знам как се пишат.

Case dismissed!
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« Отговор #7 -: 13.07.2004, 17:16:00 »

g-n koito raboti v ekip,

Rabotq po vyprosa za kirilizaciq na linux-a si. Kolkoto do akyla mi, kogato napravq testovete za inteligentnost na MENSA, shte Vi informiram svoevremenno za rezultata.
Ne me e sram, che sym bylgarin, nito me e sram da napisha imeto si vyv foruma.
Kolkoto do "Защо като търся детерминантата на 7x8 матрица и метода ми мята Exception?", "Имаш ли клас за събиране на матрици?", "Как се прави вложен цикъл?", "Защо не мога да си кръстя променливата #$??хуйбатемлякукраватаемъжка????" ...  

Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
java. metod na gaus-jordan
« Отговор #8 -: 27.07.2004, 00:01:00 »

Не можеш да си кирилизираш linux-а казваш. Чудна работа наистина при положение че той си е кирилизиран (или поне всички distro-та от последните 3-4 години по мои наблюдения), не се налага да правиш нищо освен да си инсталираш един български keyboard layout под KDE (и има phonetic за разлика от win), за GNOME не знам не го използвам.

[This message has been edited by sasquatch (edited 27-07-2004).]
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« Отговор #9 -: 01.08.2004, 23:07:00 »

г-н sasquatch,

Федората я кирилизирах лесно. Просто го отлагах по една или друга причина. Както сега отлагам кирилизацията на licq. Предполагам, че просто трябва да добавя кирилски шрифт. Но не съм открил още къде. Може би ще открия утре, ако не го оставя за другиден. btw по северното черноморие тази година е доста приятно. Без Албена - там е много тъпо. А, да и са пръскали срещу комари и други гадини. За разлика от Пловдив, където си ги търпим...

Gute Nacht!
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
java. metod na gaus-jordan
« Отговор #10 -: 03.08.2004, 22:32:00 »

Предлагам на този, който се интересува следния java код за намиране на обратната матрица на дадена матрица. Това е само работеща версия. Функциите могат да се напишат и по-четливо. (например детерминанта на матрица от 3ти ред да се смята във функцията determinanta(double[][] mtx)).

Използван е методът на адюнгираните количества (от учебника по ЛААГ издаден от Пловдивско Университетско Издателство) вместо този на Гаус-Жордан, защото елементите на матриците, които използвам са в интервала (0, 1] и има риск при закръгляне по метода на Гаус-Жордан да се получи голяма бъркотия.

Методът смята само обратната матрица на матрици nxn, n>3.

class Aminus1
{
  public static double adiungiranoKolichestvo(int i1, int j1, double[][] mtx1)
  {
    int koef1;
    if(((i1+j1)%2)==0) koef1 = 1;
    else koef1 = -1;
    return koef1*adiungiranMinor(i1,j1,mtx1);
  }

 public static double adiungiranMinor(int i, int j, double[][] mtx)
  {
    double toBeReturned = 0;
    int koef;
    boolean greshka = false;
    //матрица на която ще търся адюнгиран минор
/*    System.out.println("Това е матрицата на която ще търся адюнгиран минор:");
      for(int c=0; c<mtx.length; c++)
      {
        for(int d=0; d<mtx.length; d++)
        {
          System.out.print(mtx[c][d]);
     System.out.print(" ");
        }
        System.out.println("");
      }*/
    //проверявам дали индексите са коректни
    if(i<0) greshka = true;
    if(j<0) greshka = true;
    if(i>=mtx.length) greshka = true;
    if(j>=mtx.length) greshka = true;
    if(greshka) System.out.println("някой от индексите не е коректен!");


    double[][] minor = new double[mtx.length-1][mtx.length-1];

   //следващото инициализира матрицата от n-1 ред
    for(int k=0; k<minor.length; k++)
      for(int l=0; l<minor.length; l++)
      {
        if((k<i)&&(l<j)) minor[k][l] = mtx[k][l];
        if((k<i)&&(l>=j)) minor[k][l] = mtx[k][l+1];
   if((k>=i)&&(l<j)) minor[k][l] = mtx[k+1][l];
   if((k>=i)&&(l>=j)) minor[k][l] = mtx[k+1][l+1];
      }

   //матрица от н-1 ред, която е без i,jтия елемент
/*    System.out.println("Това е подматрицата без i,j-тия елемент:");
    for(int e=0; e<minor.length; e++)
      {
        for(int f=0; f<minor.length; f++)
        {
          System.out.print(minor[e][f]);
     System.out.print(" ");
        }
        System.out.println("");
      }*/
    //тук се пресмятат детерминанти
    if(minor.length == 3)
    {
/*      System.out.println("на тази матрица 3х3 търся детерминанта:");
      for(int a=0; a<3; a++)
      {
        for(int b=0; b<3; b++)
        {
          System.out.print(minor[a]);
     System.out.print(" ");
        }
        System.out.println("");
      }
      System.out.println("");
      System.out.println("междинна детерминанта:");
      System.out.println(minor[0][0]*minor[1][1]*minor[2][2] +minor[1][0]*minor[2][1]*minor[0][2]+minor[0][1]*minor[1][2] *minor[2][0]-minor[2][0]*minor[1][1]*minor[0][2]-minor[1][0] *minor[0][1]*minor[2][2]-minor[2][1]*minor[1][2]*minor[0][0]);*/
      return minor[0][0]*minor[1][1]*minor[2][2] +minor[1][0]*minor[2][1]*minor[0][2]+minor[0][1] *minor[1][2]*minor[2][0]-minor[2][0]*minor[1][1] *minor[0][2]-minor[1][0]*minor[0][1]*minor[2][2] -minor[2][1]*minor[1][2]*minor[0][0];
    }
    else
    {
      for(int k=0; k<minor.length; k++)
      {
        toBeReturned += minor[0][k]*adiungiranoKolichestvo(0,k,minor);
      }
      return toBeReturned;
    }
  }

 public static double determinanta(double[][] mtx)
  {
    double toBeReturned = 0;
    int koef;

   if(mtx.length != mtx[0].length)
    {
      System.out.println("детерминанта на матрица mxn, m!=n");
      //това не е много коректно, тъй като детерминантата не е 0
      return 0;
    }
    else
    {
      for(int i=0; i<mtx.length; i++)
      {
        toBeReturned += mtx[0]*adiungiranoKolichestvo(0,i,mtx);
      }
    }
    return toBeReturned;
  }
  public static void main(String[] args)
  {
    int dimension = 5;
    double det = 0;

   double[][] mymtx = new double[dimension][dimension];
    double[][] mymtxMinus1 = new double[dimension][dimension];

   //инициализация - инициализират се елементите на матрицата
/*    for(int i=0; i<dimension; i++)
    for(int j=0; j<dimension; j++)
    {
      if(i==j) mymtx[j] = 10;
      else mymtx[j] = 0;
    }*/
    mymtx[0][0] = 1;
    mymtx[0][1] = 2;
    mymtx[0][2] = 1;
    mymtx[0][3] = 1;
    mymtx[0][4] = 2;
    mymtx[1][0] = 3;
    mymtx[1][1] = 1;
    mymtx[1][2] = 1;
    mymtx[1][3] = 1;
    mymtx[1][4] = 1;
    mymtx[2][0] = 1;
    mymtx[2][1] = 1;
    mymtx[2][2] = 1;
    mymtx[2][3] = 1;
    mymtx[2][4] = 0;
    mymtx[3][0] = 0;
    mymtx[3][1] = 1;
    mymtx[3][2] = 2;
    mymtx[3][3] = 0;
    mymtx[3][4] = 1;
    mymtx[4][0] = 1;
    mymtx[4][1] = 0;
    mymtx[4][2] = 0;
    mymtx[4][3] = 0;
    mymtx[4][4] = 1;
    //коя е матрицата на която ще търся обратната матрица
    for(int i=0; i<dimension; i++)
    {
      for(int j=0; j<dimension; j++)
      {
        System.out.print(mymtx[j]);
   System.out.print(" ");
      }
      System.out.println("");
    }
    //тук пресмятам детерминанта
    System.out.println("детерминантата на A е:");
    det = determinanta(mymtx);
    System.out.println(det);
    System.out.println("");
    System.out.println("обратната матрица на A е:");
    for(int i=0; i<dimension; i++)
    for(int j=0; j<dimension; j++)
    {
      mymtxMinus1[j] = adiungiranoKolichestvo(j, i, mymtx)/det;
    }
    //извеждане на резултата
    for(int i=0; i<dimension; i++)
    {
      for(int j=0; j<dimension; j++)
      {
        System.out.print(mymtxMinus1[j]);
   System.out.print(" ");
      }
      System.out.println("");
    }
    System.out.println("");
  }
}
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
java. metod na gaus-jordan
« Отговор #11 -: 06.08.2004, 22:03:00 »

Gute Nacht! - Това звучи доста грубиянско ...

Иначе за програмата - браво, аз нямам време да пиша подобни неща имам мноооого работа и като свърша да работя изобщо не ми е до програмиране, черноморието ще го видя септември месец как е Засега си направих десет дни на планина  


[This message has been edited by sasquatch (edited 06-08-2004).]
Активен