GEM - Dolni trojuhelnikovy tvar, jednotkova matice – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

GEM - Dolni trojuhelnikovy tvar, jednotkova matice – Java – Fórum – Programujte.comGEM - Dolni trojuhelnikovy tvar, jednotkova matice – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Honza
~ Anonymní uživatel
393 příspěvků
30. 12. 2013   #1
-
0
-

Zdravim,

dělám semestrálku do školy, a vybral jsem si asi větší ořech, z kterýho mi jde hlava kolem. Dělám program pro práci s maticí a maticema. Zkrátka mám matici libovolného tvaru a potřebuju jí eliminovat na horní a dolní trojúhelníkový tvar a na jednotkovou matici. Klasicky se GEM dělá že jsou nuly pod diagonálou, s tim jsem si poradil, ale pokud chci nuly nad diagonálou (a matice neni čtvercovýho typu, to je pak jednodušší) jsem ztracenej. Zkoušel jsem různý možnosti i gůglit a tak nějak jsem se dostal až sem. 

Tady je část tý mojí nádhery, na eliminaci pro jedničky nad diagonálou:

public double[][] dolni() {
        double[][] p = this.matice;
        double d = 0.0;
        for (int i = p[0].length - 1; i > 0; i--) {
            for (int k = p.length - 1; k > 0; k--) {
                d = p[k-1][i] / p[k][i];
                for (int j = p[0].length - 1; j > 0; j--) {
                    p[k-1][j] = p[k-1][j] - p[k][j] * d;
                }
            }
        }
return p;

}

Problém je hlavně v tom, že se nepoposunuju po diagonále při výpočtu "d" a pak mi tam zbude NaN. Jenže nevim jak se posouvat, ten druhej index pole "i" s tim nijak nehnu tak aby to platilo pro obecnou matici.


Poprosil bych zkušenější pokud by mi mohli poradit co nejsem schopnej vidět. 

Když to tak píšu, napadá mě, že tu jednotkovou si nejdíve zkusim na papír než se budu ptát na blbosti. :)

Děkuju předem za radu.

Nahlásit jako SPAM
IP: 37.48.51.–
Reklama
Reklama
Honza
~ Anonymní uživatel
393 příspěvků
30. 12. 2013   #2
-
0
-

#1 Honza
Oprava

Tady je část tý mojí nádhery, na eliminaci pro jedničky nad diagonálou:


"pro nuly nad diagonálou"

Nahlásit jako SPAM
IP: 37.48.51.–
Flowy0
Věrný člen
30. 12. 2013   #3
-
0
-

ak si predstavime ze matica ma suradnice x pre poradie stlpca a y pre poradie riadku so zaciatkom v lavom hornom rohu tak suradnice pre diagonalu su vtedy ked x = y ... pre prvky pod diagonalou plati ze x < y a pre prvky nad zase x > y ... verim ze ti nerobi problem spravit prechod polom a pre kazdy prvok skontrolovat do ktorej skupiny patri a na zaklade toho sa rozhodnut ...

spravis si iteraciu cez prvotny array[] cize iteraciu x ... na kazdej pozicii najdes dalsi array[] (stlpec) v ktorom zase najdes podla indexu prvok na danom riadku ... cize y ... staci ti prejst kazdy takto ziskany array od zaciatku do jeho konca

dalo by sa to optimalizovat aby si pri hladani danej casti prechadzal len dany pocet pozicii ale to uz si domysli sam ak chces

btw tvoja "optimalizacia" cyklu prechodom od konca do zaciatku riadku je chybna ... JVM si pri spusteni bezneho kodu optimalizuje zistovanie dlzky pola cize ho nezistuje zakazdym (ak ho nemenis) ... na druhej strane tvoje pravidelne odpocitavanie je pre procesor narocnejsie ako keby si pripocitaval ... a navyse mas tam chybu pretoze vynechavas prve prvky na pozicii 0

ps: ak chces prechadzat pole po riadkoch (v tomto pripade sa prechadza po stlpcoch) tak musis maticu ukladat transponovanu ... toto je vecsinou samo vyriesene tym ze si tu maticu vytvaras sam a teda hodnoty zadavas na zadane pozicie ... toto riesenie je v podstate nutne len ked predpokladas maticu ktora nema pevne m alebo n

Nahlásit jako SPAM
IP: 95.102.35.–
https://github.com/Flowy
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, 15 hostů

Moderátoři diskuze

 

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