Liczby zespolone - pozbyć się "i"
Wyświetlono archiwalną wersję tematu "Liczby zespolone - pozbyć się "i"" z forum pl.comp.programming
Bartek - 5 Kwi 2005, 13:00
Witam!
Piszę program który wykonuje obliczenia w
pętli. W tej pętli występuje między innymi
także liczba zespolona w postaci a + bi. To
mi nieco przeszkadza, bo chcę wyliczyć
wartość rzeczywistą wyrażenia z pętli. Dla
części iteracji pętli wartość zmiennej b = 0,
więc nie ma problemu, ale dla dużej ilości
przypadków niestety tak nie jest.
Czy są jakieś sposoby aby się pozbyć części
urojonej "i"? Mogę wkleić kod z tą pętlą lecz
jest ona trochę rozbudowana i przez to może
być nieczytelna. Dzięki z góry za wszelką pomoc.
PS. wiem, że to trochę nie ta grupa, ale być
może ktoś już tu implementował momenty
Zernike'a i w jakiś sposób sobie z tym
poradził. Implementuję wzór nr 1 ze strony 2
zamieszczony tutaj:
http://www.cosc.canterbury.ac.nz/people/mukundan/ivcnz01.pdf
(tam gdzie całki mam właśnie pętle sumujące,
wyrażenie e^i zamieniłem na cos - i*sin)
Pozdrawiam
Bartek
Grzegorz Niemirowski - 5 Kwi 2005, 16:51
Witam!
Piszę program który wykonuje obliczenia w pętli. W tej pętli występuje
między innymi także liczba zespolona w postaci a + bi.
Tzn w jakiej postaci? Stringa? Struktury o polach a i b?
To mi nieco przeszkadza, bo chcę wyliczyć wartość rzeczywistą wyrażenia z
pętli. Dla części iteracji pętli wartość zmiennej b = 0, więc nie ma
problemu, ale dla dużej ilości przypadków niestety tak nie jest.
Czy są jakieś sposoby aby się pozbyć części urojonej "i"?
Ale wartość rzeczywista to jest przecież samo a. A może chodzi Ci o moduł
liczby zespolonej?
Bartek - 5 Kwi 2005, 18:24
| między innymi także liczba zespolona w postaci a + bi.
Tzn w jakiej postaci? Stringa? Struktury o polach a i b?
Chodzi mi tu o np. 5 + 7i, u mnie we wzorku
jest to
cos( cośtam ) - i * sin( cośtam )
| Czy są jakieś sposoby aby się pozbyć części urojonej "i"?
Ale wartość rzeczywista to jest przecież samo a. A może chodzi Ci o
moduł liczby zespolonej?
Nie mam niestety zbyt dużego doświadczenia z
liczbami zespolonymi, a chodzi mi o to że mam
np. działanie w każdej iteracji:
v += w * ( cos( x ) - i * sin( y ) ) * z;
gdzie:
double v, w, x, y, z; //w,x,y,z przy każdej
iteracji inne
Chcę do v dodawać wartość rzeczywistą całego
wyrażenia. Czy wystarczy tylko pominąć to
i*sin(y) ?
Pozdrawiam
Bartek
Grzegorz Niemirowski - 5 Kwi 2005, 20:09
| Tzn w jakiej postaci? Stringa? Struktury o polach a i b?
Chodzi mi tu o np. 5 + 7i, u mnie we wzorku jest to
cos( cośtam ) - i * sin( cośtam )
Nie mam niestety zbyt dużego doświadczenia z liczbami zespolonymi, a
chodzi mi o to że mam np. działanie w każdej iteracji:
v += w * ( cos( x ) - i * sin( y ) ) * z;
gdzie:
double v, w, x, y, z; //w,x,y,z przy każdej iteracji inne
Chcę do v dodawać wartość rzeczywistą całego wyrażenia. Czy wystarczy
tylko pominąć to i*sin(y) ?
Dziwne. Jesteś pewien, że v jest liczbą rzeczywistą a nie zespoloną?
kalarus - 6 Kwi 2005, 07:22
a wiesz w ogole co to sa liczbyt zespolone? bo po terminologii ktorej urzywasz
jakos dziwnie mam wrazenie ze nie bardzo..
Bartek - 6 Kwi 2005, 09:27
Mam:
double CDekompozytor::ObliczPseudoZernike(
int p, int q )
{
int i, j, N = kompon_info.bmWidth;
const double SqrtTwo =
1.4142135623730950488016887242097;
const double sqrt2n1 = SqrtTwo / (double)( N
- 1.0f ); // sqrt( 2 ) / ( N - 1 )
const double Osqrt2 = -1.0f / SqrtTwo; // -1
/ sqrt( 2 )
HDC hDC = CreateCompatibleDC( 0 );
SelectObject( hDC, obraz_kompon );
double wynik = lambda( p, N );
double wc;
for( j = 0; j < N; j++ )
for( i = 0; i < N; i++ )
{
wc = /*urojone i * */sin( q / tan( (
sqrt2n1 * j + Osqrt2 ) / ( sqrt2n1 * i +
Osqrt2 ) ) );
wynik += PR( p, q, sqrt( pow( sqrt2n1 * i
+ Osqrt2, 2 ) + pow( sqrt2n1 * j + Osqrt2, 2
) ) * ( cos( q / tan( ( sqrt2n1 * j + Osqrt2
) / ( sqrt2n1 * i + Osqrt2 ) ) ) - wc ) *
(double)GetRValue( GetPixel( hDC, i, j ) ) );
}
DeleteDC( hDC );
return wynik;
}
Pozdrawiam
Bartek
Grzegorz Niemirowski - 6 Kwi 2005, 10:00
a wiesz w ogole co to sa liczbyt zespolone? bo po terminologii ktorej
urzywasz jakos dziwnie mam wrazenie ze nie bardzo..
Wiem, dostałem z nich maksa na egzaminie z algebry liniowej. Oczywiście
mogłem coś pomylić więc powiedz co było nie tak.
Paweł Siennicki - 6 Kwi 2005, 10:27
for( j = 0; j < N; j++ )
for( i = 0; i < N; i++ )
{
wc = /*urojone i * */sin( q / tan( ( sqrt2n1 * j + Osqrt2 ) / ( sqrt2n1 * i
+ Osqrt2 ) ) );
wynik += PR( p, q, sqrt( pow( sqrt2n1 * i + Osqrt2, 2 ) + pow( sqrt2n1 * j +
Osqrt2, 2 ) ) * ( cos( q / tan( ( sqrt2n1 * j + Osqrt2 ) / ( sqrt2n1 * i +
Osqrt2 ) ) ) - wc ) * (double)GetRValue( GetPixel( hDC, i, j ) ) );
}
jak dla mnie to zarowno i jak i j sa calkowite, gdzie Ty tu widzisz liczby
zespolone?
o ile gdzies nie probujesz pierwiastkowac liczb ujemnych to nie widze
problemu...
Bartek - 6 Kwi 2005, 10:30
jak dla mnie to zarowno i jak i j sa calkowite, gdzie Ty tu widzisz
liczby zespolone?
o ile gdzies nie probujesz pierwiastkowac liczb ujemnych to nie widze
problemu...
No niestety kod jest nieco zamieszany i
zmienne i oraz j są używane do obsługi pętli
i nie mają nic wspólnego z liczbami
zespolonymi. To "i" w odniesieniu do liczb
zespolonych jest teraz w komentarzu /*urojone
i * */ na początku przypisania do zmiennej
wc. Wyciągnąłem to wyrażenie z kolejnej
linijki (gdzie wc jest użyte) ażeby się nie
pogubić i wiedzieć gdzie ta część urojona
występuje.
Pozdrawiam
Bartek
Paweł Siennicki - 6 Kwi 2005, 17:52
No niestety kod jest nieco zamieszany i zmienne i oraz j są używane do
obsługi pętli i nie mają nic wspólnego z liczbami zespolonymi. To "i" w
odniesieniu do liczb zespolonych jest teraz w komentarzu /*urojone i * */ na
początku przypisania do zmiennej wc. Wyciągnąłem to wyrażenie z kolejnej
linijki (gdzie wc jest użyte) ażeby się nie pogubić i wiedzieć gdzie ta
część urojona występuje.
ok juz to widze
no to jak juz ktos tu powiedzial, uzyj albo |z|, Re(z) albo Im(z)
na moje oko jak juz we wzorku sa liczby zespolone to przydaloby sie wyniki
kolejnych iteracji trzymac w liczbie zespolonej i tylko dla np reprezentacji
graficznej cos z tym robic... chocby |z|
Twoj algorytm sie naprawde niewiele zmieni a przynajmniej dla mnie bedzie to
bardziej logiczne...
- 7 Kwi 2005, 02:26
| a wiesz w ogole co to sa liczbyt zespolone? bo po terminologii ktorej
| urzywasz jakos dziwnie mam wrazenie ze nie bardzo..
Wiem, dostałem z nich maksa na egzaminie z algebry liniowej. Oczywiście
mogłem coś pomylić więc powiedz co było nie tak.
sorki, to byla raczej uwaga do autora tego topicu :)
Grzegorz Niemirowski - 7 Kwi 2005, 06:40
sorki, to byla raczej uwaga do autora tego topicu :)
Teraz juz jasne. Odpowiedziales jednak na moj post a nie jego, dlatego
zareagowalem :)
Logarytmiczne znajdywanie liczby elementow mniejszych od danego
Kompresja przez rozkład na liczby pierwsze?
Delphi 3 - zaokraglanie liczby rzeczywistej
liczby podzielne przez 3
bardzo duze liczby
Liczby Fibonacciego. Na czym to polega?
PASCAL i liczby doskonale
ChB3opcy z placu bronii
podstrona 882
arbitraz bankowy
aparat digimax s500
jurgis kairys juka
klub studencki stodola w warszawie
czy mozna zjesc w lubiatowie
nie stac cie na cale zwloki plodu zawsze mozesz
gnokii smsd pobierz
Zbieranina tematów z for dyskusyjnych || Index