Matica - Determinant Komplexne čisla – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Matica - Determinant Komplexne čisla – Java – Fórum – Programujte.comMatica - Determinant Komplexne čisla – Java – Fórum – Programujte.com

 

29. 11. 2015   #1
-
0
-

Dobrý Den

Robim semestralku matice s komplexnimi čislami a nvm sa akosi pohnuť a chcel by som vedieť či bi ste mi neporadili ako by sa dalo naprogramovať determinant pre matice 3 a viššie bo co som pozeral ostatných na internete tak večšina robí laplasov rozvoj čize zmenšuje maticu do štádia 2x2 a nato už použiju metodu čo maju alebo by sa premňa skor hodil viac Gausova metoda a vyrobiť  Trojuholníkovú maticu.
Trieda Matematika sa stará oto že ked mám dajakú matematickú operáciu s čislami(napr. 5*4 alebo 5i*4) tak čo ma vypísať ako výsledok
Doplnanie čisiel do matice mam riešene cez Double a Boolean(ak je true cislo je imaginarne)

 public Cislo determinant (){

        Cislo det = new Cislo (0,false);
        Cislo pom1 = new Cislo (0,false);
        Cislo pom2 = new Cislo (0,false);
      
        if(pole2d.length == 1) {
            det = pole2d[0][0];

            System.out.println(" ");
            System.out.println("determinant matice A je: " + det );
        }

        if(pole2d.length == 2) {
            Matematika.nasobenie(pole2d[0][0], pole2d[1][1], pom1);
            Matematika.nasobenie(pole2d[0][1], pole2d[1][0], pom2);
            Matematika.rozdiel(pom1, pom2, det);
            System.out.println(" ");
            System.out.println("determinant matice A je: " + det );
        }

       if(pole2d.length > 2) { 
            for(int i = 0; i < pole2d[0].length; i++) {
                Cislo temp[][] = new Cislo [pole2d.length - 1][pole2d[0].length - 1];

                for(int j = 1; j < pole2d.length; j++) {

Nahlásit jako SPAM
IP: 185.42.4.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
1. 12. 2015   #2
-
-2
-
Mimo téma

Pořád nic?

Když už jsi tak hloupí nebo líný že nevíš jak na to, zkus prohledat knihy a ukrást z nich algoritmy. To bude přímo úměrné tvým schopnostem.

Nahlásit jako SPAM
IP: 217.112.161.–
sleepy
~ Anonymní uživatel
422 příspěvků
1. 12. 2015   #3
-
0
-

Urob rozklad na vl. hodnoty a tie vynasob. Tu je link: https://en.wikipedia.org/wiki/Eigenvalue_algorithm#Iterative_algorithms

Dalsia vec nechapem na co je dobry ten boolean a ze cislo je imaginarne. Uz keby si velmi chcel skorej sa ti zide vytvorit si vlastny objekt komplexneho cisla (nie ze by na nete nebolo miliarda kniznic ktore to vedia myslim ze aj apache, cize ti staci gradle, alebo maven). Avsak lepsie je puzit nieco taketo:

(A + iB) (x+iy)^T = (x' + i y')^T -> (Ax -By) + i(Ay + Bx) cize si spravis vektori dim = 2n a maticu rozmeru (2nx2n) aj ked vidis ze ta sa bude stale skladat len z matice (2nxn) cize mozes zostat len s tymto vzorcom. x,y su vektory a A,B su stvorcove matice. A je realna cast a B je komplexna podobne x a y. Ries to iterativne. Je to rychlejsie a ak sa ti podari aby to konvergovalo tak aj presnejsie, ako tvoje riesenie (Tu si uvedom ze pc je obmedzene 64bitmi, a ze operacie - (myslene tak: a + h - a) a / -> cisom blizkym 0 su povazovane za nestabilne).

Nahlásit jako SPAM
IP: 5.178.55.–
1. 12. 2015   #4
-
0
-

NotBeginer  niesom hlupy v reali ovladam ako funguje matika ohladne Determinantu matic bez problemov dokonca som si aj sam Nakodil ako to bude vipadat kebize pouzivam Int ako premenu lenze u komplexnich ide oto ze sa nedivas iba na 1 zlozku ako u matic cez Int ale tu musim davat pozor na realnu a imaginarnu cast a na zaklade toho upravovat maticu ci cez Gausovu metodu alebo Laplasov rozvoj  lebo je laksie nakodit algoritmus ked mas prvki matice  2 a 3 ako ked mas 2+5i a 4+2i

Dik  sleepy urcite to pozriem podla toho a necham sa inspirovat a Boolean uz nemam som dnes nanovo prerobil celu triedu Cislo co mi doplna hodnoti a spravil som to praktickejsie a prehladnejsie

Nahlásit jako SPAM
IP: 145.255.156.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
2. 12. 2015   #5
-
-1
-
Mimo téma

#4 BlackSnake

Pokud to umíš spočítat na papír (např. 10x10,8x8) pak algoritmizace problému není problém.

Nahlásit jako SPAM
IP: 217.112.161.–
15. 12. 2015   #6
-
0
-

Tak doplnam MEtodu na determinant mam ju hotovu a funguje

if (this.aPole2d.length > 3 ) { //Determinant matice o velikosti 4+ - Gausova Eliminacna Metoda
                Cislo[][] subMatica = new Cislo [this.aRiadky][this.aStlpce];
                for (int x =0 ; x< this.aPole2d.length-1; x++) {
                    for (int i = 0 + x; i < this.aPole2d.length-1; i++) {
                        if(i==0) {
                            for (int j = 0; j < this.aPole2d[i].length; j++) {
                                subMatica[0 + x][j] = Matematika. podiel(aPole2d[0+x][j], aPole2d[i][0+x]); //deleno
                            }
                        } else {
                            for (int j = 0 + x; j < this.aPole2d[i].length; j++) {
                                //subMatica[0][j] = Matematika. podiel(aPole2d[0][j], aPole2d[i-1][0]); //deleno
                                subMatica[0 + x][j] = Matematika. podiel(subMatica[0 + x][j], subMatica[0 + x][0 + x]);
                            }
                        }

                        if (i < this.aPole2d.length-1) {
                            for (int j = 0 + x; j < this.aPole2d[i].length; j++) {

                                subMatica[0 + x][j] = Matematika.nasobenie(subMatica[0 + x][j], aPole2d[i + 1][0 + x]);
                            }
                        }

                        if (i < this.aPole2d.length-1) {
                            for (int j = 0+x; j < this.aPole2d[i].length; j++) {

                                subMatica[i + 1][j] = Matematika.rozdiel( aPole2d[i + 1][j], subMatica[0 + x][j]);

                                subMatica[0][j]= aPole2d[0][j];

                            }
                        }

                    }
                }

                for (int i = 0; i < subMatica.length; i++) {

                    for (int j = 0; j < subMatica[i].length; j++) {
                        if (i == j) {
                            if (i == 0 && j == 0) {
                                det= getCisloNaSuradnici(i,j);
                            } else {
                                det= Matematika.nasobenie(getCisloNaSuradnici(i,j), det) ;
                            }
                        }

                    }
                }
                return det;
            }

Ak mate dake pripomienky nevahajte mi Napisat PM a Davam Vlakno Lock ked to uz mam hotove

Nahlásit jako SPAM
IP: 185.42.4.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý