1. |
Re: gyokfv. (mind) |
41 sor |
(cikkei) |
2. |
Re: negyzetgyok (mind) |
43 sor |
(cikkei) |
3. |
palette_change_CBuilder (mind) |
39 sor |
(cikkei) |
4. |
ASP, ActiveX, PHP (mind) |
8 sor |
(cikkei) |
|
+ - | Re: gyokfv. (mind) |
VÁLASZ |
Feladó: (cikkei)
|
Sziasztok Coderesek! Ha a matekot mar nagyon unjatok, akkor bocs, es
PgDn vagy Del vagy hasonlo, bar remelem nem leszek bonyolult.
Ezt irtam tegnap ejszaka (vagy inkabb ma hajnalban :) a Newton
iteraciorol:
> azt jelenti, hogy egy iteracio 1 bitet hoz. Ha valahol logikai
> hibat vétettem, hol. (Egyebkent a Negyjegyu fuggvenytablazat
> szerint is duplazodik a helyes jegyek szama, de ettol sem ertem
> jobban).
Ez utan nem birtam meg elaludni, es az agyban is tovabb gondolkoztam,
aztan ra is jottem!!! Nem logikai, hanem kozelitesi hibat vétettem!
Ugyanis rosszul altalanositottam a jol ismert 1/(1+x) ~= 1-x
kozelitest: 1/(a+x) = (1/a)*(1/(1+x/a)) miatt ugyanis
1/(a+x) ~= 1/a - x/a^2 (nem pedig 1/a - x)
A kulonbseg nem oriasi, hisz a^2 jo kozelitessel = 2 (a ~= gyok2),
igy x es x/a^2=x/2 nagysagrendileg azonosak, megis az adott esetben
ez a kozelites hasznalhatatlan, hisz igy az jon ki, hogy ha egy
iteracioban 'e' a hiba, akkor a kovetkezo lepesben e/2-e=-e/2
helyett e/2-e/2=0 lenne!!
Szoval az 1/(1+x) sorfejtesenek a kovetkezo elemet is figyelembe kell
vennunk a kozeliteskor: 1/(1+x) = 1 - x + x^2 - x^3 + ... alapjan
1/(a+x) = 1/a - x/a^2 + x^2/a^3 - x^3/a^4 + ...
Ha ezek utan 1/(a+x)-et 1/a-x/a^2+x^2/a^3-bel kozelitjuk, akkor az
aktualis 'e' hiba (x=e, a=sqrt2) a kovetkezo iteracioban kozelitve
e/2-e/2+e^2/(2*sqrt2) ~= e^2/2.828 lesz. Ebben a 2.828-as hanyados
nem sokat szamit, csak annyit jelent, hogy az e^2-es hibahoz kepest
meg kb 1 bittel kevesebb hibas bit van (1/2.828 < 1/2). e^2 a lenyeg,
ami pedig azt jelenti, hogy a hibaban a tizedespont utani nullak
szama iteracionkent duplazodik.
Szoval elnezest mindenkitol a felrevezetesert, most mar ertem, hogy
duplazodik a helyes jegyek szama.
István
-- Istvan Marosi -- http://www.sch.bme.hu/~marosi --
-- Recosoft Ltd. -- mailto: --
|
+ - | Re: negyzetgyok (mind) |
VÁLASZ |
Feladó: (cikkei)
|
On 16 Jun 00 at 7:33, wrote:
> Es honnan tudom, hogy meddig ismeteljem a szamolast?
Attol fugg, hogy milyen modszert hasznalsz. Ha tudod, hogy mekkora az
iteraciok utan a hiba (pl. hogy az ervenyes jegyek szama duplazodik
:), akkor abbol a lepesszam kiszamolhato elore. Ha nem Newton
iteraciot hasznalsz, es nem tudod keplettel a hibat, de tudod, hogy
az iteracioban mindig pontosabb eredmenyt kapsz, akkor nezheted, hogy
a korabbi es mostani eredmenynek hany bitje/szamjegye stb. azonos az
elejen, hisz azok mar kesobb sem fognak valtozni. Van aztan olyan
modszer is, ami minden iteracioban pontosan egy jo jegyet ad
(egyszeruen a jegyek maguk jonnek ki sorban eredmenykent), ott
egyertelmu a dolog.
Lehet utolag is ellenorizni a vegeredmenyt (pl. annal az
algoritmusnal, ami a Pell egyenleten alapul, hisz ott csak a legvegen
jon ki egy kozelites) ugy, hogy negyzetre emeled a kiszamolt
gyok2-ot, es nezed, hogy a 2 utan hany 0-as, vagy az 1 utan hany 9-es
jegy van, nagyjabol annyi lesz a pontossag: Ha gyok2 hibaja 'e',
akkor gyok2^2 hibaja 'E' a kovetkezokeppen jon ugyanis ki:
(gyok2+e)^2 = 2+E
gyok2^2 + e^2 + 2*gyok2*e = 2+E
E = e^2+2.828*e
Mivel e^2 sokkal kisebb szam 2.828*e-nel, igy E ~= 2.828*e. Ebbol
visszafele: ha a kiszamolt kozelites negyzetreemelesebol tudjuk az E
hibat (mert meg tudjuk szamolni a 0-ak vagy 9-esek szamat), akkor
e~=E/2.828, vagyis a kozelitesunk hibaja ennel meg kisebb, tehat a
kozelitesunk jo jegyeinek szama legalabb akkora (sot, kb 1 bittel
jobb), mint a negyzetenek a jo jegyeinek a szama.
Ezt az ellenorzest erdemes azert elvegezni minden esetben, akkor is,
ha meg tudod keplettel becsulni a kozelites hibajat, hatha - mint en
is - rosszul szamolod ki a kepletet :)
No tessek, mar megint matekoztam. A vege az lesz, hogy kirugtok
innen :)
István
-- Istvan Marosi -- http://www.sch.bme.hu/~marosi --
-- Recosoft Ltd. -- mailto: --
|
+ - | palette_change_CBuilder (mind) |
VÁLASZ |
Feladó: (cikkei)
|
Sziasztok Coderek!
Adott egy bitmap (Image1), es ennek a szineit szeretnem megvaltoztatni.
Pixelenkent persze megy, csak irtozatosan lassu! Ezert szeretnem a palettat
megvaltoztatni, de az alabbi kodreszlet nem mukodik. :( Kerem, aki tudja
javitsa ki, vagy irja meg mire valo a palVersion, illetve hogy a
GetSystemPaletteEntries parameterei mit takarnak, mert sajnos a helpben
errol egy szo sincs!
//------------------------------------------------------
typedef struct
{
TLogPalette lpal;
TPaletteEntry dummy[256];
} LogPal;
LogPal palettam;
palettam.lpal.palVersion=0x300;
palettam.lpal.palNumEntries=256;
for(int i=1;i<255;i++)
{
palettam.dummy[i]->peBlue=random(255);
palettam.dummy[i]->peRed=random(255);
palettam.dummy[i]->peGreen=random(255);
}
GetSystemPaletteEntries(Image1->Canvas->Handle,0,256,palettam.lpal.palPalEnt
ry);
Image1->Picture->Bitmap->Palette=
CreatePalette(palettam.lpal);
//------------------------------------------------------
Koszonom.
Otto
/ps: Aki elsokent kuld hibatlanul mukodo kodot, annak fizetek egy sôrt! :)/
|
+ - | ASP, ActiveX, PHP (mind) |
VÁLASZ |
Feladó: (cikkei)
|
sziasztok!
keresek 1-2 olyan programozot, aki a fenti temakorokben jartas!!!
eleg ha csak latott, vagy csinalt par aprosagot!!!
irjatok:
koszi
BYE! Stenya.
|
|