Viac

Je križovatková operácia komutatívna?


Je pri prekrývaní mapy priesečník vrstiev mapy komutatívnou operáciou, tj. Križovatka vrstva_A vrstva_B = vrstva_B križovatka vrstva_A? Ak je vrstva A štvorec a vrstva B je trojuholník. V tomto prípade platí, že (A pretína B) == (B pretína A)?


Dúfam, že tento údaj je dostatočne jasný:

Z: http://www.gaia-gis.it/spatialite/spatialite-tutorial-2.3.1.html


Rovnako ako množinová prienik, aj geometrický priesečník (ktorý je v podstate priesečníkom dvoch množín s priestorovo definovanými hranicami) je komutatívny aj asociatívny, napr. (A ∩ B) ∩ C = A ∩ (B ∩ C) = (C ∩ B) ∩ A = C ∩ (B ∩ A).

V praxi softvér často používa poradie vstupov na určenie, ako sú atribúty asociované s výstupom; geometria priestorového výstupu by však mala byť stále rovnaká bez ohľadu na poradie vstupu.

Uvedomte si tiež, že váš výstup bude závisieť od toho, ktorý súradnicový systém a prípadná projekcia použijete na vykonanie operácie. Aj keď sa tým nezmenia komutatívne a priradené vlastnosti, na výber projekcie použitej pre operácie sa môže použiť poradie a zoskupenie.


Mmmm. Tiež som si myslel, že je zrejmé, že A ∩ B = B ∩ A, ale potom ma Kirkov komentár prinútil zamyslieť sa. Takže tu je teória. Neváhajte ho zostreliť v plameňoch!

V tomto scenári existujú dva polygóny, A (červený) a B (modrý). Červené bodky predstavujú najmenšiu presnosť mriežky:

Podľa mojich výpočtov sa pretínajú tu:

Všimnite si, ako sa priesečník prichytí k najbližšej mriežke, pretože to je najmenšia povolená presnosť. V tomto prípade nezáleží na poradí a A ∩ B = B ∩ A

Teraz zadajte polygón C (žltý):

Priesečník (A ∩ B) ∩ C je nasledujúci:

A to preto, že najbližší bod mriežky k priesečníku A a B je taký, ako už bol ukázaný, a prekrytý C je, že to dá výsledok (moja hrubá skica nie je presne štvorcová, takže na prvý pohľad nemusí vyzerať očividne). (A ∩ C) ∩ B však dáva toto:

Je to preto, že najbližšia mriežka k priesečníku A a C spôsobuje iný tvar priesečníka s B.

Takže: tvrdil by som, že nie je rozdiel iba pri dvoch polygónoch, ale môžu existovať rozdiely pri troch alebo viacerých. S veľkou presnosťou by boli rozdiely malé, ale verím, že by mohli existovať.

Vyzerá to správne, alebo si môže niekto vybrať diery v koncepte?!?!?!


Power Set $ ​​X $ je prsteň so symetrickým rozdielom a priesečníkom

Učím sa na skúšku z abstraktnej algebry a jedna z kontrolných otázok bola táto:

Nech je $ X $ množina a $ mathcal P (X) $ je množina síl $ X $. Uvažujme operácie $ Delta $ = symetrický rozdiel (alias „XOR“) a $ bigcap $ = priesečník.
a) Robia $ Delta $ a $ bigcap $ z $ P (X) $ do ringu?
b) Ak áno, je to prsteň s jednotou?
c) Je prsteň komutatívny?
d) Je to pole?

Pokiaľ ide o časti a) a b), myslím si, že to tvorí kruh jednoty, ale nie som si celkom istý, ako začať to dokazovať.

Pre časť c) je to komutatívny kruh, pretože $ mathcal P (X) $ je uzavretý pod symetrickým rozdielom a priesečníkom, však?

Nie ste si istí ani tým, ako začať d).

Naozaj by som chcel tejto otázke úplne porozumieť, takže akýkoľvek druh vstupu by bol veľmi užitočný. Ďakujem!


2 odpovede 2

Urobili ste nesprávny predpoklad.

Ak tri sú vzťah medzi A a B a medzi B a C, ale žiadny vzťah medzi A a C, spojenie A a C neznamená dať nemáte žiadne riadky V skutočnosti vám to dáva m * n riadky, kde m je počet riadkov v A, a n je počet riadkov v B.

sa stane, ak sa najskôr spojíme s A a C:

POZNÁMKA: Vysoká škola bola pred viac ako 30 rokmi - dúfajme, že porozumiete koncepčne a dokážete prepísať na správnu syntax pre skutočnú relačnú algebru.

Ak máte 20 riadkov v A, 30 v B a 40 v C a každý riadok v B zodpovedá jednému a iba jednému riadku v A a každý riadok v C zodpovedá jednému a iba jednému riadku v B. Keď sa spojíte z A do B, získate 30 riadkov späť, keď spojíte týchto 30 riadkov do C, dostanete späť 40 riadkov.

Ak sa najskôr pripojíte k bodu A až C, bez definovania vzťahu ktoré dvojice riadkov sú platné, vrátiš sa každý možný pár riadkov - 800 riadkov. Keď spojíme B s 800 riadkami, spojenie medzi B a A znamená, že riadok v B sa môže zhodovať iba s riadkami AC, ktoré obsahujú jeden konkrétny riadok A - bude ich 40 (jeden pre každý riadok C). Z týchto 40 jediných skutočných zápasov sú tie, kde platí aj spojenie medzi B a C. A vieme, že riadky C, ktoré sa zhodujú s aktuálnym riadkom B, sa nemôžu zhodovať so žiadnym iným riadkom B. Takže pre jeden rad B môžeme mať 2 zodpovedajúce rady AC, pre ďalšie 4, pre ďalší iba 1.

To znamená, že vieme, že každý rad C sa zhoduje s jedným (a iba jedným) radom B, takže celkový počet zápasov bude opäť 40 - čo je rovnakých 40 zápasov, ako keby sme mali prvé zápasy A a B alebo B a C .

Takže - podmienka spojenia vám nehovorí, ktoré riadky urobiť zápas - skutočne vám povie, ktoré riadky nie zápas. Odneste to a máte CROSS JOIN - krížový súčin riadkov v dvoch tabuľkách.


Ukážme, ako to šetrí miesto:

Najprv zvážime priestor na ukladanie údajov. Nech je $ n $ najväčší index, ku ktorému sa dá pristupovať.

Ak použijem pole $ n times n $ na uloženie komutatívnej funkcie, potrebovalo by to $ n^2 $ jednotiek priestoru.

Ak použijem 1 dimenzionálne pole na ukladanie rovnakých údajov s touto schémou indexového mapovania, potrebovalo by to $ frac<2> $ jednotiek priestoru.

Uložený priestor na ukladanie dát je teda: $ n^2 - frac <2> = frac <2> = O (n^2) $.

Nárast veľkosti úložiska kódu je $ O (1) $ a môže byť zatienený úsporou miesta v úložisku dát. Predĺženie času spracovania je tiež $ O (1) $ za prístup.

Ak ste ochotní vymeniť čas za priestor, existuje mnoho spôsobov, ako reprezentovať matice (alebo iné štruktúry) spĺňajúce konkrétne obmedzenia. Pole polí, prepojené zoznamy atď. Voľba reprezentácie závisí aj od toho, aké operácie máte v úmysle vykonávať, s akou frekvenciou a štatistikou, či už štruktúru použijete alebo zmeníte (najzákladnejšie tvrdenie o voľbe štruktúry údajov). Pozri napríklad túto otázku (ktorú si pamätám, pretože som odpovedal, a pretože štruktúra je neobvyklá): Algoritmus: Zvýšenie rozmerov v 1D reprezentácii štvorcovej matice.

Obchodovanie s časom za priestor, t. J. Zvýšenie nákladov na niektoré operácie v čase, aby sa ušetrilo miesto, nie je vždy víťazný návrh. Zložitejší prístup môže znamenať, že pri každom prístupe k štruktúre je vložených viac inštrukcií, čo môže niekedy spôsobiť, že stratíte viac miesta v kóde, než získate v dátovom priestore, a zároveň stratíte čas.

Ak je teda veľkosť vašej matice malá a ak ich vytvoríte málo, môže byť múdrejšou voľbou jednoducho plytvanie dátovým priestorom. V niektorých situáciách sa v skutočnosti stane, že sa kvôli zjednodušeniu kódu rozhodne minúť trochu dátového priestoru. Môžete sa dokonca rozhodnúť minúť trochu miesta, len aby bol program čitateľnejší a ľahšie sa udržiaval.


Existujú axiómy uspokojivé v komutatívnych prstencoch a distribučných mriežkach, ale nie sú splnené v komutatívnych semiringoch?

Zvážte jazyk súprav (nazývaný tiež semirings): má konštanty $ a $ 1 $ a binárne operácie $ a $ times $. Teória komutatívnych súprav je generovaná obvyklými axiómami: $ je asociatívny, komutatívny a má jednotku $ $ times $ je asociatívna, komutatívna a má jednotku $ 1 $ $ times $ distribuuje cez $ a $ absorbuje za $ krát $.

Každý komutatívny prsteň je komutatívna súprava (samozrejme) a každá distribučná mriežka ($ bot $ interpretuje ako $, $ top $ ako $ 1 $, $ vee $ ako $ a $ wedge $ ako $ krát $). V skutočnosti je kategória komutatívnych krúžkov úplnou reflexnou podkategóriou kategórie komutatívnych súprav, rovnako ako kategória distribučných mriežok. Priesečník týchto dvoch je triviálny v tom zmysle, že iba triviálna algebra je prstencom aj mriežkou. (V mriežke $ top vee top = top $, ale v ringu $ 1 + 1 = 1 $ znamená = 1 $.) Zaujímalo by ma, ako blízko sa tieto dve podkategórie dostávajú k zachyteniu & quotall & quot; možného správania komutatívnych súprav. Presnejšie:

Otázka 1. Existuje klauzula Horn v jazyku súprav, ktorá platí v každom komutatívnom kruhu a každej distribučnej mriežke, ale je nepravdivá v nejakej komutatívnej súprave?

Pretože komutatívne prstence nie sú axiomatizovateľné v jazyku súprav používajúcich iba Hornove doložky, tiež by ma zaujímalo, povedzme, karteziánske sekvencie namiesto Hornových doložiek. Kategóriu možno teoreticky formulovať takto:

Otázka 2. Existuje úplná reflexná podkategória $ mathcal$ z kategórie komutatívnych súprav, ktorá je uzavretá pod filtrovanými kolimitmi a obsahuje podkategórie komutatívnych krúžkov a distribučných mriežok, ale nie je to celá kategória? (Okrem toho si môžeme vybrať taký $ mathcal$, takže odraz $ mathbb [x] $ (= bezplatná komutatívna súprava na jednom generátore) predstavuje monadický funktor $ mathcal to textbf$ ?)

Nechcem však byť príliš zhovievavý - keďže komutatívne prstence a distribučné mriežky môžu byť axiomatizované jednou vetou prvého rádu v jazyku súprav, ich disjunkcia poskytne vetu, ktorá platí iba v komutatívnych prstencoch a distribučných mriežkach ale vo všeobecných komutatívnych súpravách nepravdivé.

Tu je príklad axiómy prvého rádu, ktorá platí v komutatívnych prstencoch a distribučných mriežkach, ktorá je v niektorých komutatívnych zostavách nepravdivá:

Pre všetky $ a $ a $ b $ existujú $ c $ a $ d $ také, že $ (c + d) a + d b = b $.

Táto axióma znamená, že každý ideál je subtraktívny (čo je axióma druhého rádu prima facie druhého poriadku), že každý ideál v komutatívnom kruhu alebo distribučnej mriežke je subtraktívny. Uvažujem nad tým, že v komutatívnom kruhu ideály automaticky odčítajú, pretože existuje $ -1 $, a v distribučnej mriežke ideály automaticky odčítajú, pretože sú zatvorené nadol. Ako sa ukazuje, dá sa to vyjadriť ako veta prvého rádu, aj keď nie ako karteziánska sekvencia.


8 odpovedí 8

Pretože ten prvý je správnou odpoveďou v prípade afinitných odrôd, a ten druhý nie. Skutočne, $ R/I $, $ R/J $ sú bez potenciálu, to znamená, že $ R/I cap J $ je bez potenciálu, ale nie pre $ R/IJ $.

Rovnako ako všetky definície, neexistuje žiadny „dôkaz“, že prijatá definícia je správna, ale iba pocit, že lepšie zodpovedá našej intuícii.

V tomto prípade by prijatie $ R/IJ $ ako štruktúrneho zväzku spôsobilo, že odborové schémy nebudú bez dobrého dôvodu redukované. Vezmite napríklad $ R = k [x, y, z], I = (y, z), J = (x, z) $. Geometricky popisujete spojenie $ U $ z osi $ x $ a os osy y y $ v afinných troch priestoroch $ mathbb A^3_k $. Malo by mať zmenšenú štruktúru, správne opísanú pomocou $ I cap J $, zatiaľ čo $ IJ = (xy, zx, zy, z^2) $ by funkciu $ z $ urobilo nulovou, ale nie nulovou na $ U $, čo sa cíti zle, pretože $ U $ by mala byť uzavretou podskupinou lietadla $ z = 0 $.

Brutálnejšou námietkou voči myšlienke definície spojenia dvoch podsystémov súčinom ich ideálov je, že podskupina $ U $ by sa prakticky nikdy nerovnala svojmu spojeniu so sebou samým, pretože vo všeobecnosti $ I neq I^2 $: mali by sme (takmer vždy) $ U neq U cup U $
To vyzerá zle!

(i) Spojenie dvoch uzavretých podsystémov by malo byť najmenšou uzavretou podskupinou obsahujúcou dva dané, ak chcete, počiatočný objekt v kategórii všetkých uzavretých podsystémov obsahujúcich dané dva. V prípade, že tieto dve uzavreté podchemiky sú $ V (I) $ a $ V (J) $, je to $ V (I cap J) $. (Operácia $ V $ zamieňa uzavreté množiny a ideály a mení poradie.)

(ii) Funkčne teoreticky by funkcia $ f $ (tj. prvok prsteňa $ A $) mala zmiznúť na $ V (I) šálke V (J) $ (tj ležať v ideálnom výreze $ V (I) cup V (J) $) ak a len zmizne na $ V (I) $ aj $ V (J) $ (tj leží v $ I $ a $ J $), čo sa stane vtedy a len vtedy, ak $ f $ leží v $ I cap J $. Preto sme nútení definovať $ V (I) cup V (J) = V (I cap J) $, ak má mať zväz niečo ako jeho obvyklý význam.

Emerton dobre vysvetlil, že $ V (I cap J) $ je prirodzená štruktúra schémy, len by som chcel dodať, že ak sú $ V (I) $ a $ V (J) $ deliteľmi, je tiež rozumné použiť štruktúra schémy $ V (IJ) $ na ich únii, tj ich súčet ako delitelia. Obe verzie teda majú svoje opodstatnenie.

Stále sa učím AG, takže som otvorený spätnej väzbe na túto odpoveď:

Ak sa nad tým zamyslíme v teoretických pojmoch kategórie:

Spojenie uzavretých podchemikov by malo byť koproduktom v kategórii uzavretých podsystémov $ operatorname R $ (s uzavretými ponormi). V afinitnom prípade teda potrebujete produkt v kategórii ideálov $ R $ (s inklúziami). Produkt v tejto kategórii je jasne priesečníkom ideálov, nie produktom ideálov.

Pravdepodobne súhlasíte s tým, že na križovatke je všetko jednoduché: najrozumnejšia definícia $ V (I) $ a $ V (J) $ je vláknitý produkt $ Spec , R/I times_ Spec , R/J = Spec , R/I otimes_R R/J = Spec , R/(I+J). $

Teraz je jeden prirodzený spôsob zobrazenia únie $ V (I) cup V (J) $ výsledkom lepenia $ V (I) $ a $ V (J) $ pozdĺž ich priesečníka, tj. diagram $ V (I) leftarrow V (I+J) rightarrow V (J) $. A je to známe (pozri napr. Ferrand, Vodič, zostup a koleno), že takýto pushout je v kategórii schém reprezentovateľný afinitnou schémou, ktorej funkčným prstencom je vláknitý produkt. Potom môžete vykonať nasledujúce cvičenie: skontrolujte, či je „diagonálna“ mapa $ R do (R/I) times_(R/J) $ je surjektívny s jadrom $ I cap J $. Inými slovami, hľadaným vláknitým výrobkom je $ R/(I cap J) $. Skončíme so záverom, že toto hľadisko pushoutu prirodzene vedie k definícii schématicko-teoretickej štruktúry o únii, ktorá je $ Spec , R/(I cap J) $.

Ak Ja a J sú „coprime“ (t. j. ak Ja+J. = R) potom je pravda, že I & capJ = IJ, takže obe definície sú rovnaké. To platí napríklad vtedy, ak Ja a J sú odlišné prvočísla. Na ilustráciu toho, čo sa stane, keď existujú spoločné faktory, zvážte tento hlúpy príklad: R. = ℝ [x, y], Ja = J = (X). Spojenie dvoch odrôd týchto ideálov je teda opäť r-axi a otázka, ktorú si musíte položiť, je to, čo chcete ako kruh funkcií na zväze-chcete *R/ *I & capJ = ℝ [x, y]/(x) alebo chcete R/IJ = ℝ [x, y]/(x 2). problém je, že vo svete algebraickej geometrie na tejto voľbe záleží, pretože algebraická odroda nie je definovaná iba svojimi bodmi, ale aj kruhom funkcií. zdá sa rozumné, že by ste chceli X & cup X = X pre akúkoľvek odrodu X, preto radšej zvoľte prvú voľbu.

na okraj, druhá voľba je príkladom „neredukovanej“ odrody, ktorú by ste hádam bežne (?) v prvom kurze algebraickej geometrie nevideli. má na sebe viac funkcií: jednu „plnú“ dimenziu plus jednu „nekonečne malú“ dimenziu (tj. iba lineárne funkcie v tomto smere).

$ begingroup $ Stále to nie je pravda: ak $ mathfrak

podmnožina mathfrak$, križovatka a produkt sú odlišné. Ale aj keď to vylúčite, nie je to dobré: $ R = k [x, y, z]/(xz-y^2) $, $ mathfrak

= (x, y) $, $ mathfrak= (y, z) $. Potom je súčin $ (xy, xz, yz) $ a priesečník je $ (y) $. $ endgroup $ & ndash Graham Leuschke 21. marca 10:18 o 18:39

Relevantné pri porovnávaní $ IJ $ a $ I cap J $ je Atiyah-MacDonald, cvič. 1.13, (iii), v hornej časti s. 9. Tvrdí, že ak sú $ I, J $ prvočíslo, potom $ IJ podmnožina rad (IJ) = I cap J. $ (Poznámka: prvotné ideály sú radikálne ideály, rovnako ako priesečníky radikálnych ideálov.)

Dva poučné príklady (1): $ V (y) cup V (y) $, ako bolo uvedené vyššie, kde $ I = J $. Kto chce, aby súradnicový prstenec osi x bol $ K [x, y]/(y^2) $? (2): odroda $ V $, ktorá je spojením osi $ z $ ($ V_1 $) a roviny $ xy $ ($ V_2 $). $ I = (x, y) $ a $ J = z $ sú zodpovedajúce primárne ideály. $ I cap J = IJ = (zx, zy) $ je ideál polynómových funkcií, ktorý zaniká na $ V $ zodpovedajúcich rozkladu $ V $ na $ V_1 $ a $ V_2 $ a rozkladu $ IJ $ na pripraví.


6 odpovedí 6

Stručne povedané, neexistujú žiadne obzvlášť užitočné operácie podobné odčítaniu na reťazcoch, pomocou ktorých by ľudia chceli písať algoritmy.

Operátor + spravidla označuje činnosť aditívneho monoidu, to znamená asociatívnu operáciu s prvkom identity:

Dáva zmysel používať tento operátor na veci ako celočíselné sčítanie, reťazenie reťazcov a množinové zjednotenie, pretože všetky majú rovnakú algebraickú štruktúru:

A môžeme ho použiť na písanie užitočných algoritmov, ako je napríklad concatová funkcia, ktorá funguje na sekvencii akýchkoľvek „spájateľných“ vecí, napríklad:

Keď sa zapojí odčítanie - zvyčajne hovoríte o štruktúre skupiny, ktorá pridáva znak inverzne & mínusA pre každý prvok A, aby:

A aj keď to má zmysel pre veci, ako je odčítanie celých čísel a plávajúcich rádových čiarok, alebo dokonca pre rozdiel rozdielov, nemá veľký zmysel pre reťazce a zoznamy. Aká je inverzná funkcia k „foo“?

Existuje štruktúra nazývaná anulačný monoid, ktorá nemá inverzné hodnoty, ale existuje zrušenie majetok, takže:

Je to štruktúra, ktorú popisujete, kde „ab“ - „b“ == „a“, ale „ab“ - „c“ nie je definované. Je to tak, že nemáme veľa užitočných algoritmov, ktoré používajú túto štruktúru. Myslím, že ak myslíte na zreťazenie ako na serializáciu, odčítanie by sa dalo použiť na nejaký druh analýzy.

v Perl6, možno ďalších. & ndash Jon Purdy 29. októbra 15:00 o 13:03

Pretože zreťazenie akýchkoľvek dvoch platných reťazcov je vždy platnou operáciou, ale opak nie je pravdou.

Čo by tu malo byť a - b? Na túto otázku skutočne neexistuje dobrý spôsob, ako odpovedať, pretože samotná otázka nie je platná.

Pretože operátor - na manipuláciu s reťazcami nemá dostatočnú „sémantickú súdržnosť“. Operátory by mali byť preťažené, iba ak je úplne zrejmé, čo preťaženie so svojimi operandmi robí, a odčítanie reťazcov nespĺňa tento pruh.

Preto sa dáva prednosť volaniu metód:

V jazyku C# používame + na zreťazenie reťazcov, pretože formulár

je pohodlné a pravdepodobne čitateľnejšie, aj keď volanie funkcie je zo sémantického hľadiska pravdepodobne „správnejšie“.

Operátor + môže v tomto kontexte znamenať skutočne iba jednu vec. To neplatí pre -, pretože pojem odčítania reťazcov je nejednoznačný (volanie funkcie Nahradiť (zdroj, stará hodnota, nová hodnota) pomocou parametra „“ ako nová hodnota odstráni všetky pochybnosti a funkciu je možné použiť na zmenu podreťazcov, nielen ich odstrániť).

Problém samozrejme je, že preťaženie operátora závisí od typov, ktoré sa operátorovi odovzdávajú, a ak zadáte reťazec, kde malo byť číslo, môže dôjsť k výsledku, ktorý ste nečakali. Navyše, pre mnoho zreťazení (t.j. v slučke) je výhodnejší objekt StringBuilder, pretože každé použitie + vytvára úplne nový reťazec a výkon môže utrpieť. Operátor + teda nie je ani vhodný vo všetkých kontextoch.

Existujú preťaženia operátorov, ktoré majú lepšiu sémantickú súdržnosť ako operátor + pri zreťazení reťazcov. Tu je jedno, ktoré pridáva dve komplexné čísla:

Znamienko plus má pravdepodobne kontextový zmysel vo viacerých prípadoch, ale protiprikladom (možno výnimkou, ktorá potvrdzuje pravidlo) v Pythone je nastavený objekt, ktorý poskytuje - ale nie +:

Nemá zmysel používať znamienko +, pretože zámer môže byť nejednoznačný - znamená to nastavenú križovatku alebo zjednotenie? Namiesto toho používa | pre zjednotenie a & amp pre križovatku:

& amp so sadami by sa krásne hodili k & amp a | aj keď množinám chýba a

operátor. & ndash supercat 29. októbra 15:15 o 22:00

„ -“ sa v niektorých zložených slovách (napríklad „na mieste“) používa na spájanie rôznych častí do rovnakého slova. Prečo v programovacích jazykoch nepoužívame „ -“ na spájanie rôznych reťazcov? Myslím, že by to dávalo perfektný zmysel! Do čerta s týmto + nezmyslom!

Skúsme sa však na to pozrieť trochu abstraktnejšie.

Ako by ste definovali reťazcovú algebru? Aké operácie by ste vykonávali a aké zákony by pre nich platili? Aké by boli ich vzťahy?

Pamätajte si, že nemusí existovať žiadna nejednoznačnosť! Každý možný prípad musí byť dobre definovaný, aj keď to znamená, že nemôžete povedať, že to nie je možné! Čím je vaša algebra menšia, tým je jednoduchšie to urobiť.

Čo napríklad vlastne znamená sčítanie alebo odčítanie dvoch reťazcov?

Ak sčítate dva reťazce (napríklad nech a = "aa" a b = "bb"), dostali by ste aabb ako výsledok + b?

Čo hovoríte na b + a? Bolo by to bbaa? Prečo nie aabb? Čo sa stane, ak od výsledku vášho sčítania odčítate aa? Mal by váš reťazec obsahovať záporné množstvo aa?

Teraz sa vráťte na začiatok tejto odpovede a namiesto reťazca nahraďte medzierou. Aby sme to zovšeobecnili, prečo je akákoľvek operácia definovaná alebo nie je definovaná pre akýkoľvek typ?

Snažím sa poukázať na to, že vám nič nebráni vytvoriť algebru pre čokoľvek. Môže byť ťažké nájsť zmysluplné operácie alebo dokonca užitočné operácie.

Pokiaľ ide o struny, zreťazenie je do značnej miery jediným rozumným, s akým som sa kedy stretol. Nezáleží na tom, aký symbol predstavuje operáciu.


Obsah

Teóriu výpočtu je možné považovať za vytváranie modelov všetkých druhov v oblasti informatiky. Preto sa používa matematika a logika. V minulom storočí sa stala nezávislou akademickou disciplínou a bola oddelená od matematiky.

Teória automatov Upraviť

Gramatika Jazyky Automat Výrobné pravidlá (obmedzenia)
Typ-0 Rekurzívne vyčísliteľné Turingov stroj α → β < Displaystyle alpha rightarrow beta> (bez obmedzení)
Typ-1 Citlivý na kontext Lineárne ohraničený nedeterministický Turingov stroj α A β → α γ β
Typ-2 Bez kontextu Nedeterministický pushdown automat A → γ
Typ-3 Pravidelné Konečný stavový automat A → a < Displaystyle A rightarrow a>
a
A → a B

Teória automatov je štúdium abstraktných strojov (alebo vhodnejšie abstraktných „matematických“ strojov alebo systémov) a výpočtových problémov, ktoré je možné pomocou týchto strojov vyriešiť. Tieto abstraktné stroje sa nazývajú automaty. Automata pochádza z gréckeho slova (Αυτόματα), čo znamená, že niečo robí niečo samo. Teória automatov je tiež úzko spojená s teóriou formálnych jazykov, [5] pretože automaty sú často klasifikované podľa triedy formálnych jazykov, ktoré sú schopné rozpoznať. Automat môže byť konečnou reprezentáciou formálneho jazyka, ktorý môže byť nekonečnou množinou. Automaty sa používajú ako teoretické modely pre počítačové stroje a slúžia na dôkazy o vypočítateľnosti.

Formálna teória jazyka Upraviť

Teória jazyka je odvetvie matematiky, ktoré sa zaoberá popisom jazykov ako súboru operácií nad abecedou. Je úzko spätý s teóriou automatov, pretože automaty sa používajú na generovanie a rozpoznávanie formálnych jazykov. Existuje niekoľko tried formálnych jazykov, z ktorých každý umožňuje komplexnejšiu jazykovú špecifikáciu než predchádzajúca, tj. Chomského hierarchia [6], a každá zodpovedá triede automatov, ktorá ho rozpoznáva. Pretože sa ako modely na výpočty používajú automaty, formálne jazyky sú preferovaným spôsobom špecifikácie akéhokoľvek problému, ktorý je potrebné vypočítať.

Teória vypočítateľnosti Upraviť

Teória vypočítateľnosti sa zaoberá predovšetkým otázkou, do akej miery je problém riešiteľný na počítači. Tvrdenie, že problém zastavenia nie je možné vyriešiť Turingovým strojom [7], je jedným z najdôležitejších výsledkov teórie vypočítateľnosti, pretože je príkladom konkrétneho problému, ktorý je ľahké formulovať a zároveň ho nemožno vyriešiť pomocou Turingovho stroja. . Väčšina teórie vypočítateľnosti vychádza z výsledku zastavenia problému.

Ďalším dôležitým krokom v teórii vypočítateľnosti bola Riceova veta, ktorá uvádza, že pre všetky netriviálne vlastnosti parciálnych funkcií nie je možné rozhodnúť, či Turingov stroj s touto vlastnosťou vypočíta čiastočnú funkciu. [8]

Teória vypočítateľnosti je v tesnom spojení s odvetvím matematickej logiky nazývaným teória rekurzie, ktoré odstraňuje obmedzenie štúdia iba modelov výpočtu, ktoré sú redukovateľné na Turingov model. [9] Mnoho matematikov a teoretikov výpočtov, ktorí sa zaoberajú teóriou rekurzií, ju bude označovať ako teóriu vypočítateľnosti.

Teória výpočtovej komplexnosti Upraviť

Teória zložitosti zvažuje nielen to, či je možné problém vôbec vyriešiť na počítači, ale aj to, ako efektívne ho možno vyriešiť. Uvažujú sa dva hlavné aspekty: časová zložitosť a priestorová zložitosť, ktoré predstavujú počet krokov, ktoré je potrebné na vykonanie výpočtu, a koľko pamäte je potrebné na vykonanie tohto výpočtu.

Aby bolo možné analyzovať, koľko času a priestoru daný algoritmus vyžaduje, počítačoví vedci vyjadrujú čas alebo priestor potrebný na vyriešenie problému ako funkciu veľkosti vstupného problému. Napríklad hľadanie konkrétneho čísla v dlhom zozname čísel je ťažšie, pretože zoznam čísel sa zväčšuje. Ak hovoríme, že existujú n čísla v zozname, a ak zoznam nie je nijakým spôsobom zoradený alebo indexovaný, možno sa budeme musieť pozrieť na každé číslo, aby sme našli číslo, ktoré hľadáme. Hovoríme teda, že na vyriešenie tohto problému musí počítač vykonať niekoľko krokov, ktoré lineárne rastú vo veľkosti problému.

Na zjednodušenie tohto problému prijali počítačoví vedci notáciu Big O, ktorá umožňuje porovnávanie funkcií spôsobom, ktorý zaisťuje, že nie je potrebné brať do úvahy konkrétne aspekty konštrukcie stroja, ale iba asymptotické správanie, pretože problémy sa stávajú veľkými. V našom predchádzajúcom príklade by sme teda mohli povedať, že problém si vyžaduje riešenie.

Asi najdôležitejším otvoreným problémom v celej informatike je otázka, či je možné účinne vyriešiť určitú širokú triedu problémov označovaných NP. Toto je ďalej prediskutované v triedach zložitosti P a NP a problém P versus NP je jedným zo siedmich problémov ceny Millenium, ktoré uviedol Clay Mathematics Institute v roku 2000. Oficiálny popis problému poskytol víťaz Turingovej ceny Stephen Cook.

Okrem Turingovho stroja sa používajú aj iné ekvivalentné výpočtové modely (pozri: Church -Turingova práca).

Lambda kalkul Výpočet pozostáva z počiatočného výrazu lambda (alebo dvoch, ak chcete oddeliť funkciu a jej vstup) plus konečnej sekvencie lambda výrazov, z ktorých každý je odvodený z predchádzajúceho výrazu jednou aplikáciou redukcie beta. Kombinačná logika je koncept, ktorý má mnoho podobností s výpočtom, ale existujú aj dôležité rozdiely (napr. Kombinátor s pevným bodom) Y má normálnu formu v kombinačnej logike, ale nie v-kalkulu). Kombinačná logika bola vyvinutá s veľkými ambíciami: porozumieť povahe paradoxov, urobiť základy matematiky ekonomickejšími (koncepčne), eliminovať pojem premenných (a tým objasniť ich úlohu v matematike). μ-rekurzívne funkcie, výpočet pozostáva z mu-rekurzívnej funkcie, t.j. jeho definujúcu postupnosť, akékoľvek vstupné hodnoty a postupnosť rekurzívnych funkcií vyskytujúcich sa v definujúcej sekvencii so vstupmi a výstupmi. Ak teda v definujúcej sekvencii rekurzívnej funkcie funkcie f (x) < Displaystyle f (x)> funkcie , y)>, potom sa môžu objaviť výrazy vo forme „g (5) = 7“ alebo „h (3,2) = 10“. Každý záznam v tejto sekvencii musí byť aplikáciou základnej funkcie alebo z neho vyplývať z vyššie uvedených záznamov pomocou kompozície, primitívnej rekurzie alebo μ rekurzie. Napríklad, ak sa zobrazí výrazy f (x) = h (x, g (x)) < Displaystyle f (x) = h (x, g (x))> ako 'g (5) = 6' a 'h (5,6) = 3' sa musí vyskytnúť vyššie. Výpočet sa skončí iba vtedy, ak konečný výraz udáva hodnotu rekurzívnej funkcie aplikovanej na vstupy. Markovov algoritmus je systém na prepisovanie reťazcov, ktorý na ovládanie reťazcov symbolov používa pravidlá podobné gramatike. Register machine je teoreticky zaujímavá idealizácia počítača. Existuje niekoľko variantov. Vo väčšine z nich môže každý register obsahovať prirodzené číslo (neobmedzenej veľkosti) a pokyny sú jednoduché (a málo), napr. existuje (a zastavuje sa) iba dekrementácia (kombinovaná s podmieneným skokom) a inkrementácia. Nedostatok nekonečného (alebo dynamicky rastúceho) externého skladu (viditeľný na strojoch Turing) je možné pochopiť nahradením jeho úlohy technikami číslovania podľa Gödla: skutočnosť, že každý register obsahuje prirodzené číslo, umožňuje predstavovať zložitú vec (napr. sekvencie alebo matice atď.) príslušným obrovským prirodzeným číslom - jednoznačnosť reprezentácie a interpretácie je možné stanoviť numerickými teoretickými základmi týchto techník.

Okrem všeobecných výpočtových modelov sú pre špeciálne obmedzené aplikácie užitočné aj niektoré jednoduchšie výpočtové modely. Regulárne výrazy napríklad určujú vzory reťazcov v mnohých kontextoch, od softvéru pre kancelársku produktivitu až po programovacie jazyky. Konečný automat, ďalší formalizmus matematicky ekvivalentný regulárnym výrazom, sa používa pri návrhu obvodov a pri niektorých druhoch riešení problémov. Bezkontextové gramatiky určujú syntax programovacieho jazyka. Nedeterministické pushdownové automaty sú ďalším formalizmom ekvivalentným bezkontextovým gramatikám. Primitívne rekurzívne funkcie sú definovanou podtriedou rekurzívnych funkcií.

Rôzne modely výpočtu majú schopnosť vykonávať rôzne úlohy. Jeden zo spôsobov, ako zmerať silu výpočtového modelu, je študovať triedu formálnych jazykov, ktoré model môže generovať, aby sa získala Chomského hierarchia jazykov.

  1. ^Michael Sipser (2013). Úvod do teórie výpočtu 3. Cengage Learning. ISBN978-1-133-18779-0. centrálne oblasti teórie výpočtu: automaty, vypočítateľnosť a zložitosť. (Strana 1)
  2. ^
  3. Hodges, Andrew (2012). Alan Turing: Hádanka (The Centenary ed.). Princeton University Press. ISBN978-0-691-15564-7.
  4. ^
  5. Rabin, Michael O. (jún 2012). Turing, Church, Gödel, Vypočítateľnosť, zložitosť a náhodnosť: osobný pohľad.
  6. ^
  7. Donald Monk (1976). Matematická logika . Springer-Verlag. ISBN9780387901701.
  8. ^
  9. Hopcroft, John E. a Jeffrey D. Ullman (2006). Úvod do teórie automatov, jazykov a výpočtov. 3. vyd. Reading, MA: Addison-Wesley. ISBN978-0-321-45536-9.
  10. ^
  11. Chomského hierarchia (1956). „Tri modely na opis jazyka“. Teória informácií, transakcie IRE dňa. IEEE. 2 (3): 113–124. doi: 10,1109/TIT.1956.1056813.
  12. ^
  13. Alan Turing (1937). „Na vypočítateľných číslach, s aplikáciou na problém Entscheidungsproblem“. Zborník Londýnskej matematickej spoločnosti. IEEE. 2 (42): 230–265. doi: 10,1112/plms/s2-42.1.230. Citované 6. januára 2015.
  14. ^
  15. Henry Gordon Rice (1953). „Triedy rekurzívne vymenovateľných množín a ich problémy s rozhodovaním“. Transakcie Americkej matematickej spoločnosti. Americká matematická spoločnosť. 74 (2): 358–366. doi: 10,2307/1990888. JSTOR1990888.
  16. ^
  17. Martin Davis (2004). Nerozhodnuteľný: Základné články o nerozhodnuteľných výrokoch, neriešiteľných problémoch a vypočítateľných funkciách (Dover Ed). Dover Publications. ISBN978-0486432281.

(V tejto oblasti existuje mnoho učebníc, pretože tento zoznam je nevyhnutne neúplný.)


Zariadenia

Oddelenie matematiky sídli v Krieger Hall v Keyser Quad v areáli Homewood. Adjacent to Krieger Hall, The University’s Milton S. Eisenhower Library has an unusually extensive collection of mathematics literature, including all the major research journals, almost all of which are also accessible electronically. The stacks are open to students. The department also has a useful reference library, the Philip Hartman Library. Graduate students share departmental offices, and study space can also be reserved in the university library. Graduate students may access the department’s Linux and Windows servers, as well as computers in graduate student offices. The department also hosts numerous research seminars, special lectures, and conferences throughout the academic year.


Computing Position from Orbital Elements

We'll perform this computation in three steps: first, we'll solve Kepler's equation. Second, we'll compute the 2d position of the body in the orbital plane. Lastly, we'll rotate our 2d position into 3d coordinates. I'll give some "pseudocode" in Javascript for most of these tasks.

I'll assume that you're using a set of elements like these from JPL's web site. These use $L$ and $varpi$ instead of $M$ and $omega$ . The table gives two values for each of the elements the second is the time derivative. If you use the values in this table you should use the derivatives as well.

Calculate the time $t$ in centuries from J2000:

Now we calculate the current values of each of the orbital parameters. For example, the semimajor axis of Earth, using the values from Table 1 (valid from 1800–2500):

(Note that the values are actually given for "EM Barycenter," the center-of-mass of the Earth-Moon system. The Earth is around 4600 kilometers from the barycenter in the opposite direction from the Moon. If you want to correct this inaccuracy you'll need to simulate the motion of the Moon as well, but that's probably overkill.)

Table 2a gives elements that are accurate from 3000 BC to 3000 AD however, if you use the elements from table 2a, you musieť supplement them with corrections to $L$ from Table 2b! For example, here is computing the longitude of Saturn:

We don't need to explicitly compute the mean motion and add it to $L$ , since both tables include it in $dot L$ .

Now we're ready to compute $M$ and $omega$ ( w ):

On to step 2: we need to solve the Kepler equation:

We can solve this numerically using Newton's method. Solving the Kepler equation is equivalent to finding the roots of $f(E) = E - e sin E - M$ . Given $E_i$ , an estimate of $E$ , we can use Newton's method to find a better estimate:

$ E_ = E_i - f(E_i) / f'(E_i) f'(E) = 1 - e cos E $

Since the nonlinear part $e sin E$ is very small, we can start with the estimate $E=M$ . Our code looks something like this:

Now there are two ways to compute the position from the eccentric anomaly. We can first compute the true anomaly and radius (the position of the object in polar coordinates), and then convert to rectangular coordinates however, if we apply a bit of geometry we can instead compute the coordinates directly from $E$ :

( P and Q form a 2d coordinate system in the plane of the orbit, with +P pointing towards periapsis.)

Finally, we can rotate these coordinates into the full 3d coordinate system:

( x , y , and z will be in units of AU.)

If you want to calculate the velocity as well, you can do it at the same time as you calculate $P$ and $Q$ , then rotate it in the same way. $ dot M = n = dot L dot M = dot E - e (cos E) dot E dot E = dot M / (1 - e cos E) dot P = -a (sin E) dot E qquad dot Q = a (cos E) dot E sqrt <1 - e^2>$ Note I don't include any of the derivatives (except $dot L$ ) in this calculation, since they don't affect the outcome much. You could code this as:

Note that the velocities will be in AU per century.

If you are updating the positions very frequently, you could use the previous value of $E$ to seed Newton's method, and do a fixed number of iterations (probably just one would suffice). Note however that you need to keep that value of $E$ local to each object!

You can also just use a fixed number of iterations for the initial solution. Even for $e=0.2$ , after three iterations the error in $E$ is only about $10^<-13>$ , and after four iterations the error is smaller than the rounding error of an IEEE double up to $e=0.42$ .

If you want more information you can search online, but if you're really interested you should read an introductory text on orbital mechanics. I personally recommend Fundamentals of Astrodynamics by Bate, Mueller, and White (pdf). My dad used this book back when he was in college, and I found it to be more readable than my college textbook. You'd be interested in Chapter 4, Position and Velocity as a Function of Time.

Since its just a game, would you be happy with circular orbits and the planets' orbits only affected by the central body? In that case, the propagation is quite simple. In the plane of the orbit with the central body at (0,0), the position as a function of time is:

where $a$ is the semi-major axis, or really just the orbit radius in this case, $T$ is the orbit period, and $t_0$ determines the phasing of the orbit, where at $t=t_0$, the planet is on the x-axis on the positive side.

To make the orbits of the different planets consistent with each other, you just need to define the $GM$ of the central body, which we will call $mu$. Then for any orbit radius $a$, the orbit period is related to $a$ by:

While there has already been a high quality accepted answer for years, here is some additional background, some particularly helpful resources, and additional tips for first-time orbit propagation.

If you're not doing N-body physics, so the planets do not interact then you can use analytic solutions to the Kepler problem. Eventually you'll realize that you need to solve hyperbolic orbits at some point as well. That will lead you to universal variables formulations of solving the Kepler problem.

The best solutions to that are probably going to be Goodyear's method:

W. Goodyear, “Completely General Closed Form Solution for Coordinates and Partial Derivatives of the Two-Body Problem”, The Astronomical Journal, Vol. 70, No. 3, 1965, pp. 189–192 (or the NASA NTRS TD document on the same material)

Shepperd, S.W. Celestial Mechanics (1985) 35: 129. https://doi.org/10.1007/BF01227666

There is some MATLAB code here which might be useful (and vastly more accessible), although random code snippets on matlabcentral are far from guaranteed to be bug free and it looks like this code may lack useful normalization of its inputs (generally you're going to want to normalize to the scale of your problem so that you do math in units where r0-bar = 1.0 and mu-bar = 1.0 and where v-bar = 1 is the velocity in a circular orbit at r0 or something like that).

If you are going to do N-body integration of planetary motion then I think you're going to have to use numerical integration. Runge-Kutta will violate conservation of Energy so you will likely want to use Symplectic Integration. The 4th order symplectic integrator in that article is not that difficult to code -- although that leaves you with the difficulty of guessing the correct timestep (again, normalization helps because a circular planetary orbit and circular LEO are the same problem just with different distance scales) and with interpolation of the interior points (and you need to watch out for Runge's phenomenon, but I haven't wrestled with that, so don't know which approach to take there).

If you're going to use Runge-Kutta then Dormand-Prince with dynamic step side and its 3rd order interpolant will be very convenient, and is what Matlab uses in its ode45 solver.

I would probably advise starting with the simplest runge-kutta implementation based on ease of coding, but if you're doing runge-kutta on every physics tick to advance it forward one step then that is pretty brutal and the errors will eventually add up, but you could prototype it that way. At some point you'll want to go to a system where you solve the problem for many time steps into the future, and then you use an interpolating function to pick off the solution at intermediate timesteps (which is the point of my mentioning Dormand-Prince and its interpolating function).


Pozri si video: Desetinné zlomky. matematika 5. třída (Október 2021).