-
Data: 2010-09-16 05:11:22
Temat: Re: rzadkie dane do układu równań liniowych
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 16 Wrz, 03:08, Mariusz Marszałkowski <m...@g...com> wrote:
> On 15 Wrz, 21:57, bartekltg <b...@g...com> wrote:> > Danych jest (było gdy
wysyłałem) 10tys.
>
> > Nie zrozumiales. Macierz jest 10 000 na 16. Ale jej
> > rząd to 13. Maceirz ejst osobliwa, liniowo zalezna.
> > To stad w pierwszej kolejnosci biorą sie zypelnie
> > rozne wektroy dajace ten sam wynkik.
>
> Zrozumiałem ale nie mogłem uwierzyć.
> Dane generowałem funkcją Rand z excela,
> jak to możliwe że dla 10tys losowych wektorów
> układ równań nie jest jednoznaczny?
Ktoś tu niedawno ładnie powiedział, ze pomiedzy osobliwoscia
a nieosobliwoscia jest obszar 'numerycznej osobliwosci':)
Ale tu problem jest bardziej algebraiczny.
Patrzmy na wektorki wierszowe. Są dlugości N i mają
k 'przedziałow' o tej własnosci, ze jest w nim dokladnie
jedna jedynka. Popatrzmy na przestrzen rozpieta przez
wszytkie takie wektory (jest ich mniej niz 10tys, dla N=12,
k=4 81, ogolnie, (N/k)^k ).
Popatrzmy teraz na nastepujecy wektor: w jednym przedziale
(całm) +1, w drugim -1, a w pozostalych 0. Taki wektor nie
lezy w naszej przestrzeni (jest prostopadly do wszytkich innych).
[1;1;1; 0;0;0; -1; -1; -1; 0;0;0;] czy
[ 0;0;0; -1; -1; -1; 0;0;0; 1;1;1] sa prostopadle do kazdego
[ X;Y;V;Z ] gdzie XYVZ za trojwymairowymi wektorami z jedna jedynka.
Wymiar takiej przestrzeni to k-1.
Niezaleznie, ile wektorkow wylosujesz, Twoje pokrycie
ma wymiar co najwyzej N- (k-1).
Skoro taka jest struktura zadania, widac, tak być musi:)
Od biedy mozna sie zastanawiać nad usunieciem
niektorych kolumn (rownowaznie, pewne parametry
stale zero), ale ni ma wielkiej potrzeby jesli godzimy
sie na niejednoznacznosc parametrow.
> > BTW, kopnales sie w wyliczaniach:
> Masz rację, ponieważ nie trzeba mnożyć przez zera.
> Danych jest 10^9 rekordów.
> Rekord ma długość 10^6
> Rekord zawiera np. tylko 4 jedynki i resztę zer.
> Czyli aby ustalić to co w excelu nazwałem
> "poprawką", wystarczy średnio 10^9/10^6*4
> operacji, czyli zaledwie około 4tys.
> "poprawek" jest 10^6, czyli 10^6*4tys...
> Może to się jednak da policzyć dla 4
> niezerowych :)
Oszacowanie na ilosc operacji w celu pojedynczej
poprawki zgadza sie. Ale z tym excelem to dowcip rozumiem;)
Ja wole za podstawową jednostke mieć sprasowany wektor
kolumnowy macierzy A (a nie wierszowy) wiec mam
10^6 rekordow po średnio 10^9/10^6*4 wartosci.
Dzieki temu mam wszytko na widelcu.
Pewnie co jakis czas jednak warto policzyc od nowa Ax-b,
bo poprawki moga nam sie rozjezdzać.
> > Moze poznym wieczorkeim wrzuce kod (od razu ostrzegam,
> > z lenistwa matlabowski;)
>
> Chętnie zobaczę, ale w zupełności wystarczy mi jeśli
> potwierdzisz/zaprzeczysz że mówisz o takiej samej
> metodzie jak w excelu.
Wesja dość robocza, duzo smieci. Wiecej czasu poswieca
na wygenerowanie odpowiedniej postaci danych (w jezykach
blisko bebechow nie bedzie to problemem) niz na same obliczenia.
'Dokłaność' 10^-10, wykonal 25 duzych iteacji
(tu panuje duzy rozrzut) w minute.
Dla N=1000; M=100000; 5 sekund.
Kasujac odpowiedni komentarz dostajesz macierz rzadką
ktora mozna potestowac neizbyt duze zadania.
Pozdrawiam
bartekltg
PS. byly jakies serwisy do umieszczania kodu,
oczywiscie zapomnailem i nie moge znalesc..
function [x,b,y,A ] = main( tol )
%MAIN Summary of this function goes here
% Detailed explanation goes here
N=1000;
M=1000000;
k=4;
N=floor(N/k)*k;
tic
%wygenerowalismy nasza macierz, wiersz to nasz k jedynkowy
%wektor zapisany w postaci sprasowanej: same indeksy,
%gdzie znajduje sie jedynka. Bardziej przyda sie nam inna postać.
%wektor to sprasowany wektor macierza A z zadania.
wA = floor((1+rand(M,k)*(N/k))+ ones(M,k)*diag(0:k-1)*N/k);
toc
tic
wiersz =(1:M)'*ones(1,k);
% kA{j} to sprasowana j-ta _kolumna_ macierzy A
% z zagadnienia min(norm(Ax-b))
%tworzenie kA dalekie od optymalnego, ale dydaktyczne
% a2 to <a*a>, gdzie a to wektor z kA.
A=[];
%A= sparse((1:M)'*ones(1,k),wA,1,M,N); %nie potrzeba, ale porosciej
wygenerowac kA
kA={};
a2 = [];
toc
tic
for j=1:N, % to jest zle, trwa dwa razy dluzej niz wlasciwe
obliczenia.
r=wiersz(wA==j);
kA{j}=r;
a2(j)=length(r);
end;
toc
disp('...for')
tic
clear wA; %szkoda pamieci,
b=rand(M,1); %wektor wynikow.
x=zeros(N,1); %wektorki
y=-b; %w residuum Ax-b
toc
disp('ognia');
tic
popr=1;
cykli=0;
while popr>tol, %powtarzaj, az suma wzglednych poprawek bedzie mala.
%nie do konca dobre kryterium, ale popr >= sum( A'*y ) po wykonaniu
wewn. pętli
perm=randperm(N); % w kazdym duzym obiegu poprawimy kazdy
wspolczynnik.
popr=0;
for j=1:N,
a=perm(j); % a - indeks poprawianego wspolczynnia
v=kA{a}; % sprasowany wektor kolumnowy odpowiadajacy
indeksowi a
delta=sum(y(v))/a2(a); % <y, A(:,a)>/||A(:,a)||^2
x(a)=x(a)-delta;
y(v)=y(v)-delta;
popr=popr+abs(delta/x(a));
end;
popr
cykli=cykli+1;
end;
toc
cykli %a tak dla ciekawosic.
Następne wpisy z tego wątku
- 17.09.10 01:33 Mariusz Marszałkowski
- 17.09.10 02:40 Mariusz Marszałkowski
- 17.09.10 17:23 bartekltg
- 17.09.10 19:27 Mariusz Marszałkowski
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-25 Wrocław => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2024-12-25 Warszawa => Sales Assistant <=
- 2024-12-25 Kraków => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-25 Lublin => System Architect (Java background) <=
- 2024-12-25 Szczecin => Specjalista ds. public relations <=
- 2024-12-25 Wrocław => Key Account Manager <=
- 2024-12-25 Kraków => Full Stack .Net Engineer <=
- 2024-12-25 Kraków => Programista Full Stack .Net <=
- 2024-12-25 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-25 Białystok => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-25 Białystok => Delphi Programmer <=
- 2024-12-25 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-25 Kraków => Ekspert IT (obszar systemów sieciowych) <=
- 2024-12-25 Mińsk Mazowiecki => Spedytor Międzynarodowy <=
- 2024-12-24 Dzisiaj Bentlejem czyli przybieżeli sześciu Króli do Rysia na kasie