Mais

A operação de interseção é comutativa?

A operação de interseção é comutativa?


Na sobreposição de mapa, a interseção das camadas do mapa é uma operação comutativa, ou seja, camada_A camada de interseção_B = camada_B camada de interseção_A? Se a camada A é um quadrado e a camada B é um triângulo. Nesse caso, (A intersectn B) == (B intersectn A)?


Espero que esta figura seja suficientemente explícita:

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


Assim como a interseção de conjuntos, a interseção geométrica (que é essencialmente uma interseção em dois conjuntos com limites espacialmente definidos) é comutativa e associativa, por exemplo, (A ∩ B) ∩ C = A ∩ (B ∩ C) = (C ∩ B) ∩ A = C ∩ (B ∩ A).

Na prática, o software geralmente usa a ordem das entradas para determinar como os atributos são associados à saída; mas a geometria de saída espacial ainda deve ser a mesma, independentemente da ordem de entrada.

Esteja ciente também de que sua saída dependerá de qual sistema de coordenadas e projeção, se houver, você usará para realizar a operação. Embora isso não mude as propriedades comutativas e associadas, a ordem e o agrupamento podem ser usados ​​para selecionar a projeção usada para a (s) operação (ões).


Mmmm. Eu também achei óbvio que A ∩ B = B ∩ A, mas então o comentário de Kirk me fez pensar. Então aqui está uma teoria. Sinta-se à vontade para derrubá-lo em chamas!

Neste cenário, existem dois polígonos, A (vermelho) e B (azul). Os pontos vermelhos representam a menor precisão da grade:

De acordo com meus cálculos, eles se cruzam aqui:

Observe como o ponto de interseção se ajusta à grade mais próxima, porque essa é a menor precisão permitida. Neste caso, a ordem não importa, e A ∩ B = B ∩ A

Agora introduza o polígono C (amarelo):

A interseção de (A ∩ B) ∩ C é a seguinte:

E isso porque o ponto de grade mais próximo da interseção de A e B é como já mostrado, e sobreposto com C pode dar esse resultado (meu esboço não é exatamente quadrado, então pode não parecer óbvio à primeira vista). No entanto, (A ∩ C) ∩ B dá isso:

Isso ocorre porque a grade mais próxima da interseção de A e C causa uma forma diferente para a interseção com B.

Portanto: eu diria que não há diferença com apenas dois polígonos, mas pode haver diferenças com três ou mais. Com uma grande precisão as diferenças seriam mínimas, mas acredito que poderiam existir.

Isso parece correto ou alguém pode apontar falhas no conceito?!?!?!


Conjunto de energia de $ X $ é um anel com diferença simétrica e interseção

Estou estudando para um exame de álgebra abstrata e uma das questões da revisão era esta:

Seja $ X $ um conjunto e $ mathcal P (X) $ o conjunto de potência de $ X $. Considere as operações $ Delta $ = diferença simétrica (a.k.a. "XOR") e $ bigcap $ = intersecção.
a) $ Delta $ e $ bigcap $ transformam $ P (X) $ em um anel?
b) Em caso afirmativo, é um anel com unidade?
c) O anel é comutativo?
d) É um campo?

Para as partes a) eb), acho que forma um anel com unidade, mas não tenho certeza de como começar a prová-lo.

Para a parte c), é um anel comutativo, pois $ mathcal P (X) $ é fechado sob diferença simétrica e interseção, certo?

Nem tenho certeza de como começar em d).

Eu realmente gostaria de entender esta questão completamente, então qualquer tipo de contribuição seria extremamente útil. Obrigada!


2 respostas 2

Você fez uma suposição incorreta.

Se três é uma relação entre A e B e entre B e C, mas nenhuma relação entre A e C, juntar A e C não dar você sem linhas. Na verdade, dá a você m * n filas, onde m é o número de linhas em A, e n é o número de linhas em B.

torna-se, se juntarmos A e C primeiro:

NOTA: A faculdade foi há mais de 30 anos - espero que você entenda conceitualmente e possa reescrever na sintaxe correta para álgebra relacional real.

Se você tiver 20 linhas em A, 30 em B e 40 em C, e cada linha em B corresponder a uma e somente uma linha em A, e cada linha em C corresponder a uma e somente uma linha em B. Quando você une A a B, você terá 30 linhas de volta. Quando você une essas 30 linhas a C, você terá 40 linhas de volta.

Se você primeiro unir A a C, sem relação para definir qual pares de linhas são válido, você vai voltar cada par possível de linhas - 800 linhas. Quando juntamos B às 800 linhas, a conexão entre B e A significa que uma linha em B só pode corresponder às linhas AC que incluem uma linha A específica - haverá 40 delas (uma para cada linha C). Dessas 40, as únicas correspondências reais são aquelas em que a conexão entre B e C também é válida. E sabemos que as linhas C que correspondem à linha B atual não podem corresponder a nenhuma outra linha B. Portanto, para uma linha B, podemos ter 2 linhas AC que correspondem, para outras 4, para outra apenas 1.

Dito isso, sabemos que cada linha C corresponde a uma (e apenas uma) linha B, então o número total de correspondências sairá para 40 novamente - as mesmas 40 correspondências como se tivéssemos as primeiras correspondências A e B, ou B e C .

Então - a condição em uma junção não informa quais linhas Faz corresponder - realmente diz quais linhas não partida. Remova-o e você terá um CROSS JOIN - o produto cruzado das linhas nas duas tabelas.


Vamos mostrar como isso economiza espaço:

Primeiro, consideramos o espaço de armazenamento de dados. Seja $ n $ o maior índice a ser acessado.

Se eu usar $ n times n $ array para armazenar a função comutativa, seriam necessárias $ n ^ 2 $ unidades de espaço.

Se eu usar uma matriz dimensional para armazenar os mesmos dados com este esquema de mapeamento de índice, ele precisaria de $ frac<2> $ unidades de espaço.

Portanto, o espaço de armazenamento de dados economizado é: $ n ^ 2 - frac <2> = frac <2> = O (n ^ 2) $.

O aumento no tamanho do armazenamento do código é $ O (1) $ e pode ser ofuscado pela economia de espaço de armazenamento de dados. O aumento no tempo de processamento também é $ O (1) $ por acesso.

Se você deseja trocar tempo por espaço, há muitas maneiras de representar matrizes (ou outras estruturas) que satisfaçam restrições específicas. Matriz de matrizes, listas vinculadas, etc. A escolha da representação também depende de quais operações você pretende realizar, com que frequência e estatísticas, usando a estrutura ou modificando-a (a declaração mais básica sobre a escolha da estrutura de dados). Veja, por exemplo, esta pergunta (da qual me lembro porque respondi e porque a estrutura é incomum): Algoritmo: Aumento da dimensão na representação 1D da Matriz Quadrada.

Trocar tempo por espaço, ou seja, tornar algumas operações mais caras em tempo para economizar espaço, nem sempre é uma proposta vencedora. Um acesso mais complexo pode significar mais instruções embutidas cada vez que a estrutura é acessada, o que às vezes pode fazer você perder mais espaço de código do que ganhar em espaço de dados, além de perder tempo também.

Conseqüentemente, se a dimensão de sua matriz permanecer pequena, e se você criar algumas delas, pode ser uma escolha mais sensata simplesmente desperdiçar o espaço de dados. Na verdade, ocasionalmente acontece em algumas situações que alguém escolherá desperdiçar um pouco de espaço de dados para simplificar o código. Pode-se até escolher desperdiçar um pouco de espaço apenas para tornar o programa mais legível e fácil de manter.


Existem axiomas satisfeitos em anéis comutativos e redes distributivas, mas não satisfeitos em semirings comutativos?

Considere a linguagem dos rigs (também chamada de semirings): ela tem constantes $ e $ 1 $ e operações binárias $ e $ vezes $. A teoria das plataformas comutativas é gerada pelos axiomas usuais: $ é associativo, comutativo e tem unidade $ $ times $ é associativo, comutativo e tem unidade $ 1 $ $ times $ distribui por $ e $ é absorvente por $ vezes $.

Todo anel comutativo é um equipamento comutativo (é claro), e toda rede distributiva também (interpretando $ bot $ como $, $ top $ como $ 1 $, $ vee $ como $ e $ wedge $ como $ vezes $). Na verdade, a categoria dos anéis comutativos é uma subcategoria reflexiva completa da categoria das plataformas comutativas, assim como a categoria das redes distributivas. A interseção dos dois é trivial, no sentido de que apenas a álgebra trivial é um anel e uma rede. (Em uma treliça, $ top vee top = top $, mas em um anel $ 1 + 1 = 1 $ implica = 1 $.) O que estou querendo saber é o quão perto essas duas subcategorias chegam de capturar & quotall & quot o comportamento possível de equipamentos comutativos. Mais precisamente:

Questão 1. Existe uma cláusula de Horn na linguagem das plataformas que seja verdadeira em todos os anéis comutativos e todas as redes distributivas, mas falsa em algumas plataformas comutativas?

Uma vez que anéis comutativos não são axiomatizáveis ​​na linguagem de plataformas que usam apenas cláusulas de Horn, eu também estaria interessado em ouvir, digamos, sequentes cartesianos em vez de cláusulas de Horn. Esta categoria pode ser formulada teoricamente:

Questão 2. Existe uma subcategoria reflexiva completa $ mathcal$ da categoria de plataformas comutativas que é fechada sob colimites filtrados e contém as subcategorias de anéis comutativos e redes distributivas, mas não é a categoria inteira? (Além disso, podemos escolher tal $ mathcal$ para que o reflexo de $ mathbb [x] $ (= o equipamento comutativo livre em um gerador) representa um functor monádico $ mathcal para textbf$ ?)

Não quero ser muito permissivo, no entanto - uma vez que os anéis comutativos e as redes distributivas podem ser axiomatizados por uma única frase de primeira ordem na linguagem das plataformas, tomar sua disjunção produz uma frase que é verdadeira apenas em anéis comutativos e redes distributivas mas falso em equipamentos comutativos em geral.

Aqui está um exemplo de um axioma de primeira ordem que é verdadeiro em anéis comutativos e redes distributivas que é falso em alguma plataforma comutativa:

Para todos $ a $ e $ b $, existem $ c $ e $ d $ tais que $ (c + d) a + d b = b $.

Este axioma equivale a dizer que todo ideal é subtrativo (que é um axioma de segunda ordem prima facie); é o caso que todo ideal em um anel comutativo ou rede distributiva é subtrativo. A maneira como prefiro pensar sobre isso é que, em um anel comutativo, os ideais são automaticamente subtrativos porque $ -1 $ existe, e em uma rede distributiva, os ideais são automaticamente subtrativos porque são fechados para baixo. Acontece que isso pode ser expresso como uma frase de primeira ordem, embora não como um sequente cartesiano.


8 Respostas 8

Porque a primeira é a resposta certa no caso de variedades afins, e a segunda não. De fato, $ R / I $, $ R / J $ são livres de nilpotentes implica que $ R / I cap J $ é livre de nilpotentes, mas não para $ R / IJ $.

Como acontece com todas as definições, não há "prova" de que a definição adotada seja a correta, mas apenas um sentimento de que corresponde melhor à nossa intuição.

No caso em questão, tomar $ R / IJ $ como feixe de estrutura faria com que os esquemas sindicais não fossem reduzidos sem uma boa razão. Por exemplo, tome $ R = k [x, y, z], I = (y, z), J = (x, z) $. Geometricamente, você está descrevendo a união $ U $ dos eixos $ x $ e $ y $ nos três espaços afins $ mathbb A ^ 3_k $. Deve ter uma estrutura reduzida, corretamente descrita por $ I cap J $, enquanto $ IJ = (xy, zx, zy, z ^ 2) $ tornaria a função $ z $ nilpotente, mas não zero em $ U $, que parece errado, pois $ U $ deveria ser um subesquema fechado do plano $ z = 0 $.

Uma objeção mais brutal à ideia de definir a união de dois subesquemas pelo produto de seus ideais é que um subesquema $ U $ praticamente nunca seria igual à sua união consigo mesmo, uma vez que em geral $ I neq I ^ 2 $: teríamos (quase sempre) $ U neq U cup U $
Isso parece ruim!

(i) A união de dois subesquemas fechados deve ser o menor subesquema fechado contendo os dois dados dados, se você preferir, um objeto inicial na categoria de todos os subesquemas fechados contendo os dois dados. No caso em que os dois subesquemas fechados fornecidos são $ V (I) $ e $ V (J) $, isso é $ V (I cap J) $. (A operação $ V $ troca conjuntos fechados e ideais, e está invertendo a ordem.)

(ii) Em termos da teoria da função, uma função $ f $ (ou seja, um elemento do anel $ A $) deve desaparecer em $ V (I) cup V (J) $ (ou seja, encontrar-se no corte ideal $ V (I) cup V (J) $) se e somente ele desaparecer em $ V (I) $ e $ V (J) $ (ou seja, encontra-se em $ I $ e $ J $), o que acontece se e somente se $ f $ está em $ I cap J $. Assim, somos forçados a definir $ V (I) cup V (J) = V (I cap J) $, se união deve ter algo parecido com seu significado usual.

Emerton explicou bem que $ V (I cap J) $ é a estrutura do esquema natural. Gostaria apenas de acrescentar que se $ V (I) $ e $ V (J) $ são divisores, também é razoável usar o estrutura do esquema $ V (IJ) $ em sua união, ou seja, sua soma como divisores. Portanto, ambas as versões têm seus méritos.

Ainda estou aprendendo AG, por isso estou aberto a comentários sobre esta resposta:

Se pensarmos sobre isso em termos da teoria da categoria:

A união de subesquemas fechados deve ser um coproduto na categoria de subesquemas fechados de $ operatorname R $ (com imersões fechadas). Assim, no caso afim, você precisa do produto na categoria de ideais de R $ R $ (com inclusões). O produto nesta categoria é claramente uma intersecção de ideais, não produto de ideais.

Você provavelmente concorda que, para a interseção, as coisas são fáceis: a definição mais razoável de $ V (I) $ e $ V (J) $ é como o produto fibroso $ Spec , R / I times_ Spec , R / J = Spec , R / I otimes_R R / J = Spec , R / (I + J). $

Agora, uma maneira natural de ver a união $ V (I) cup V (J) $ é como o resultado da colagem de $ V (I) $ e $ V (J) $ ao longo de sua interseção, ou seja, como o pushout de o diagrama $ V (I) leftarrow V (I + J) rightarrow V (J) $. E é conhecido (ver, por exemplo, Ferrand, Conducteur, descente et pincement) que tal pushout é representável na categoria de esquemas pelo esquema afim cujo anel de função é o produto fibroso. Então você pode fazer o seguinte exercício: verificar se a 'diagonal' mapeia $ R to (R / I) times_(R / J) $ é sobrejetiva com kernel $ I cap J $. Em outras palavras, o produto fibroso procurado é $ R / (I cap J) $. Concluímos com a conclusão de que este ponto de vista pushout leva naturalmente à definição da estrutura teórica do esquema na união sendo $ Spec , R / (I cap J) $.

Se eu e J são "coprime" (ou seja, se I + J = R) então é verdade que o I & capJ = IJ, então as duas definições são iguais. Isso é verdade, por exemplo, se eu e J são primos distintos. Para ilustrar o tipo de coisa que acontece quando há fatores comuns, considere este exemplo bobo: R = & # 8477 [x, y], eu = J = (x) Portanto, a união das duas variedades desses ideais é novamente o y-eixo, e a pergunta que você precisa fazer é o que você quer como o anel de funções no sindicato - você quer * R / * I & capJ = & # 8477 [x, y] / (x) ou você quer R / IJ = & # 8477 [x, y] / (x 2). a questão é que, no mundo da geometria algébrica, essa escolha importa, uma vez que uma variedade algébrica não é apenas definida por seus pontos, mas também por seu anel de funções. parece razoável que você deseje X & xícara X = X para qualquer variedade X, então é melhor você escolher a primeira escolha.

como nota lateral, a segunda escolha é um exemplo de uma variedade "não reduzida", que eu acho que você normalmente não (?) veria em um primeiro curso de geometria algébrica. ele tem mais funções: uma dimensão "completa" mais uma dimensão "infinitesimal" (ou seja, com apenas funções lineares nessa direção).

$ begingroup $ Ainda não é verdade: if $ mathfrak

subset mathfrak$, a interseção e o produto são diferentes. Mas mesmo se você descartar isso, não é bom: $ R = k [x, y, z] / (xz-y ^ 2) $, $ mathfrak

= (x, y) $, $ mathfrak= (y, z) $. Então o produto é $ (xy, xz, yz) $ e a interseção é $ (y) $. $ endgroup $ & ndash Graham Leuschke 21 de março de 2010 às 18:39

Relevante na comparação de $ IJ $ e $ I cap J $ é Atiyah-MacDonald, exer. 1.13, (iii), no topo da p. 9. Ele afirma que se $ I, J $ são primos, então $ IJ subset rad (IJ) = I cap J. $ (Nota: ideais primos são ideais radicais, assim como são as interseções de ideais radicais.)

Dois exemplos instrutivos (1): $ V (y) cup V (y) $ como mencionado anteriormente, onde $ I = J $. Quem quer que o anel de coordenadas do eixo x seja $ K [x, y] / (y ^ 2) $? (2): a variedade $ V $ que é a união do eixo $ z $ ($ V_1 $) e do plano $ xy $ ($ V_2 $). $ I = (x, y) $ e $ J = z $ são os ideais primos correspondentes. $ I cap J = IJ = (zx, zy) $ é o ideal de funções polinomiais que desaparece em $ V $ correspondendo à decomposição de $ V $ em $ V_1 $ e $ V_2 $ e na decomposição de $ IJ $ em primos.


6 Respostas 6

Em suma, não há nenhuma operação semelhante à subtração particularmente útil em strings com as quais as pessoas gostariam de escrever algoritmos.

O operador + geralmente denota a operação de um monóide aditivo, ou seja, uma operação associativa com um elemento de identidade:

Faz sentido usar esse operador para coisas como adição de inteiros, concatenação de strings e união de conjuntos, porque todos têm a mesma estrutura algébrica:

E podemos usá-lo para escrever algoritmos úteis como uma função concat que funciona em uma sequência de quaisquer coisas "concatenáveis", por exemplo:

Quando a subtração - se envolve, você geralmente fala sobre a estrutura de um grupo, o que adiciona um inverso & menosA para cada elemento A, de modo que:

E embora isso faça sentido para coisas como subtração de número inteiro e ponto flutuante, ou mesmo diferença de conjunto, não faz muito sentido para strings e listas. Qual é o inverso de "foo"?

Existe uma estrutura chamada monóide cancelativa, que não tem inversos, mas tem cancelamento propriedade, de modo que:

Esta é a estrutura que você descreve, onde "ab" - "b" == "a", mas "ab" - "c" não está definido. Acontece que não temos muitos algoritmos úteis que usam essa estrutura. Eu acho que se você pensar em concatenação como serialização, então a subtração poderia ser usada para algum tipo de análise.

em Perl6, possivelmente em outros. & ndash Jon Purdy 29 de outubro de 15 às 13:03

Porque a concatenação de quaisquer duas strings válidas é sempre uma operação válida, mas o oposto não é verdadeiro.

O que a - b deve estar aqui? Realmente não há uma boa maneira de responder a essa pergunta, porque a pergunta em si não é válida.

Porque o operador - para manipulação de string não tem "coesão semântica" suficiente. Os operadores só devem ser sobrecarregados quando for absolutamente claro o que a sobrecarga faz com seus operandos, e a subtração de string não atende a essa barreira.

Consequentemente, as chamadas de método são preferidas:

Na linguagem C #, usamos + para concatenação de strings porque a forma

é conveniente e indiscutivelmente mais fácil de ler, embora uma chamada de função seja provavelmente mais "correta" do ponto de vista semântico.

O operador + só pode significar realmente uma coisa neste contexto. Isso não é tão verdadeiro para -, uma vez que a noção de subtração de strings é ambígua (a chamada de função Replace (source, oldValue, newValue) com "", pois o parâmetro newValue remove todas as dúvidas e a função pode ser usada para alterar substrings, não apenas removê-los).

O problema, é claro, é que a sobrecarga do operador depende dos tipos que estão sendo passados ​​para o operador e, se você passar uma string onde deveria estar um número, poderá obter um resultado inesperado. Além disso, para muitas concatenações (ou seja, em um loop), um objeto StringBuilder é preferível, uma vez que cada uso de + cria uma nova string e o desempenho pode ser prejudicado. Portanto, o operador + nem mesmo é apropriado em todos os contextos.

Existem sobrecargas de operadores que têm melhor coesão semântica do que o operador + para concatenação de strings. Aqui está um que adiciona dois números complexos:

O sinal de mais provavelmente faz sentido contextualmente em mais casos, mas um contra-exemplo (talvez uma exceção que comprove a regra) em Python é o objeto definido, que fornece - mas não +:

Não faz sentido usar o sinal + porque a intenção pode ser ambígua - significa interseção ou união do conjunto? Em vez disso, ele usa | para união e & amp para interseção:

& amp com conjuntos caberia perfeitamente com & amp e | mesmo que os conjuntos não tenham um

operador. & ndash supercat 29 de outubro de 15 às 22:00

"-" é usado em algumas palavras compostas (por exemplo, "no local") para unir as diferentes partes na mesma palavra. Por que não usamos "-" para juntar strings diferentes em linguagens de programação? Acho que faria todo o sentido! Para o inferno com este + absurdo!

No entanto, vamos tentar olhar para isso de um ângulo um pouco mais abstrato.

Como você definiria álgebra de cordas? Que operações você faria e que leis se aplicariam a elas? Quais seriam suas relações?

Lembre-se de que pode não haver absolutamente nenhuma ambigüidade! Todo caso possível deve ser bem definido, mesmo que signifique dizer que não é possível fazer isso! Quanto menor for sua álgebra, mais fácil será fazer isso.

Por exemplo, o que realmente significa adicionar ou subtrair duas strings?

Se você adicionar duas strings (por exemplo, seja a = "aa" e b = "bb"), você obteria aabb como resultado de a + b?

Que tal b + a? Isso seria bbaa? Por que não aabb? O que acontece se você subtrair aa do resultado de sua adição? Sua string teria um conceito de quantidade negativa de aa nela?

Agora volte para o início desta resposta e substitua a balsa espacial em vez da corda. Para generalizar, por que alguma operação é definida ou não definida para algum tipo?

O que estou tentando mostrar é que não há nada que impeça você de criar uma álgebra para nada. Pode ser difícil encontrar operações significativas ou mesmo operações úteis para ele.

Para strings, concatenar é praticamente o único sensato que já encontrei. Não importa o símbolo usado para representar a operação.


Conteúdo

A teoria da computação pode ser considerada a criação de modelos de todos os tipos no campo da ciência da computação. Portanto, matemática e lógica são usadas. No século passado, tornou-se uma disciplina acadêmica independente e foi separada da matemática.

Teoria dos autômatos Editar

Gramática línguas Autômato Regras de produção (restrições)
Type-0 Recursivamente enumerável Máquina de Turing α → β < displaystyle alpha rightarrow beta> (sem restrições)
Tipo 1 Sensível ao contexto Máquina de Turing não determinística limitada linear α A β → α γ β
Tipo 2 Livre de contexto Autômato pushdown não determinístico A → γ
Type-3 Regular Autômato de estado finito A → a < displaystyle A rightarrow a>
e
A → a B

A teoria dos autômatos é o estudo de máquinas abstratas (ou, mais apropriadamente, máquinas ou sistemas "matemáticos" abstratos) e os problemas computacionais que podem ser resolvidos usando essas máquinas. Essas máquinas abstratas são chamadas de autômatos. Autômato vem da palavra grega (Αυτόματα) que significa que algo está fazendo algo por si mesmo. A teoria dos autômatos também está intimamente relacionada à teoria da linguagem formal, [5] já que os autômatos são frequentemente classificados pela classe de linguagens formais que são capazes de reconhecer. Um autômato pode ser uma representação finita de uma linguagem formal que pode ser um conjunto infinito. Os autômatos são usados ​​como modelos teóricos para máquinas de computação e são usados ​​para provas sobre computabilidade.

Teoria da linguagem formal Editar

A teoria da linguagem é um ramo da matemática preocupado em descrever as línguas como um conjunto de operações sobre um alfabeto. Está intimamente ligado à teoria dos autômatos, pois os autômatos são usados ​​para gerar e reconhecer linguagens formais. Existem várias classes de linguagens formais, cada uma permitindo uma especificação de linguagem mais complexa do que a anterior, ou seja, a hierarquia de Chomsky [6] e cada uma correspondendo a uma classe de autômatos que a reconhece. Como os autômatos são usados ​​como modelos para computação, as linguagens formais são o modo preferido de especificação para qualquer problema que deva ser computado.

Teoria da computabilidade Editar

A teoria da computabilidade lida principalmente com a questão de até que ponto um problema pode ser resolvido em um computador. A afirmação de que o problema da parada não pode ser resolvido por uma máquina de Turing [7] é um dos resultados mais importantes na teoria da computabilidade, pois é um exemplo de um problema concreto que é fácil de formular e impossível de resolver usando uma máquina de Turing . Grande parte da teoria da computabilidade baseia-se no resultado do problema da parada.

Outro passo importante na teoria da computabilidade foi o teorema de Rice, que afirma que para todas as propriedades não triviais de funções parciais, é indecidível se uma máquina de Turing computa uma função parcial com essa propriedade. [8]

A teoria da computabilidade está intimamente relacionada ao ramo da lógica matemática chamado teoria da recursão, que remove a restrição de estudar apenas modelos de computação que são redutíveis ao modelo de Turing. [9] Muitos matemáticos e teóricos computacionais que estudam a teoria da recursão irão se referir a ela como teoria da computabilidade.

Teoria da complexidade computacional Editar

A teoria da complexidade considera não apenas se um problema pode ser resolvido em um computador, mas também a eficiência com que o problema pode ser resolvido. Dois aspectos principais são considerados: complexidade de tempo e complexidade de espaço, que são, respectivamente, quantas etapas são necessárias para realizar um cálculo e quanta memória é necessária para realizar esse cálculo.

Para analisar quanto tempo e espaço um dado algoritmo requer, os cientistas da computação expressam o tempo ou espaço necessário para resolver o problema como uma função do tamanho do problema de entrada. Por exemplo, encontrar um determinado número em uma longa lista de números torna-se mais difícil à medida que a lista de números aumenta. Se dissermos que existem n números na lista, então, se a lista não for classificada ou indexada de qualquer forma, podemos ter que olhar para cada número para encontrar o número que estamos procurando. Dizemos, portanto, que para resolver esse problema, o computador precisa realizar uma série de etapas que crescem linearmente no tamanho do problema.

Para simplificar esse problema, os cientistas da computação adotaram a notação Big O, que permite que funções sejam comparadas de uma forma que garanta que aspectos particulares da construção de uma máquina não precisem ser considerados, mas apenas o comportamento assintótico conforme os problemas se tornam grandes. Portanto, em nosso exemplo anterior, podemos dizer que o problema requer O (n) < displaystyle O (n)> etapas para ser resolvido.

Talvez o problema aberto mais importante em toda a ciência da computação seja a questão de saber se uma certa classe ampla de problemas denotada NP pode ser resolvida com eficiência. Isso é discutido mais detalhadamente nas classes de complexidade P e NP, e o problema P versus NP é um dos sete Problemas do Prêmio do Milênio declarados pelo Clay Mathematics Institute em 2000. A Descrição Oficial do Problema foi dada pelo vencedor do Turing Award Stephen Cook.

Além de uma máquina de Turing, outros modelos de computação equivalentes (ver: tese de Church-Turing) estão em uso.

Cálculo lambda Um cálculo consiste em uma expressão lambda inicial (ou duas se você quiser separar a função e sua entrada) mais uma sequência finita de termos lambda, cada um deduzido do termo anterior por uma aplicação de redução Beta. A lógica combinatória é um conceito que tem muitas semelhanças com λ < displaystyle lambda> -calculus, mas também existem diferenças importantes (por exemplo, combinador de ponto fixo Y tem forma normal em lógica combinatória, mas não em λ < displaystyle lambda> -calculus). A lógica combinatória foi desenvolvida com grandes ambições: compreender a natureza dos paradoxos, tornar os fundamentos da matemática mais econômicos (conceitualmente), eliminar a noção de variáveis ​​(esclarecendo assim seu papel na matemática). funções μ-recursivas um cálculo consiste em uma função mu-recursiva, ou seja, sua sequência de definição, quaisquer valores de entrada e uma sequência de funções recursivas que aparecem na sequência de definição com entradas e saídas. Assim, se na sequência de definição de uma função recursiva f (x) < displaystyle f (x)> as funções g (x) < displaystyle g (x)> eh (x, y) < displaystyle h (x , y)> aparecer, então os termos da forma 'g (5) = 7' ou 'h (3,2) = 10' podem aparecer. Cada entrada nesta sequência precisa ser uma aplicação de uma função básica ou seguir as entradas acima usando composição, recursão primitiva ou recursão µ. Por exemplo, se f (x) = h (x, g (x)) < displaystyle f (x) = h (x, g (x))>, então, para 'f (5) = 3' aparecer, termos como 'g (5) = 6' e 'h (5,6) = 3' deve ocorrer acima. O cálculo termina apenas se o termo final fornecer o valor da função recursiva aplicada às entradas. Algoritmo de Markov, um sistema de reescrita de strings que usa regras gramaticais para operar em strings de símbolos. A máquina de registro é uma idealização teoricamente interessante de um computador. Existem várias variantes. Na maioria deles, cada registro pode conter um número natural (de tamanho ilimitado) e as instruções são simples (e em número reduzido), por ex. somente decrementação (combinada com salto condicional) e incrementação existem (e parada). A falta de armazenamento externo infinito (ou crescendo dinamicamente) (visto nas máquinas de Turing) pode ser compreendida substituindo seu papel por técnicas de numeração de Gödel: o fato de que cada registro contém um número natural permite a possibilidade de representar uma coisa complicada (por exemplo, um sequência, ou uma matriz, etc.) por um grande número natural apropriado - não ambigüidade de representação e interpretação pode ser estabelecida por fundamentos teóricos de número dessas técnicas.

Além dos modelos computacionais gerais, alguns modelos computacionais mais simples são úteis para aplicativos especiais restritos. Expressões regulares, por exemplo, especificam padrões de string em muitos contextos, de software de produtividade de escritório a linguagens de programação. Outro formalismo matematicamente equivalente às expressões regulares, os autômatos finitos são usados ​​no projeto de circuitos e em alguns tipos de solução de problemas. Gramáticas livres de contexto especificam a sintaxe da linguagem de programação. Autômatos pushdown não determinísticos são outro formalismo equivalente a gramáticas livres de contexto. Funções recursivas primitivas são uma subclasse definida das funções recursivas.

Diferentes modelos de computação têm a capacidade de realizar diferentes tarefas. Uma forma de medir o poder de um modelo computacional é estudar a classe de linguagens formais que o modelo pode gerar para que a hierarquia de linguagens de Chomsky seja obtida.

  1. ^Michael Sipser (2013). Introdução à Teoria da Computação 3ª. Cengage Learning. ISBN978-1-133-18779-0. áreas centrais da teoria da computação: autômatos, computabilidade e complexidade. (Página 1)
  2. ^
  3. Hodges, Andrew (2012). Alan Turing: o enigma (The Centenary ed.). Princeton University Press. ISBN978-0-691-15564-7.
  4. ^
  5. Rabin, Michael O. (junho de 2012). Turing, Church, Gödel, Computability, Complexity and Randomization: A Personal View.
  6. ^
  7. Donald Monk (1976). Lógica Matemática . Springer-Verlag. ISBN9780387901701.
  8. ^
  9. Hopcroft, John E. e Jeffrey D. Ullman (2006). Introdução à Teoria, Linguagens e Computação dos Autômatos. 3ª ed. Leitura, MA: Addison-Wesley. ISBN978-0-321-45536-9.
  10. ^
  11. Hierarquia de Chomsky (1956). “Três modelos para a descrição da linguagem”. Teoria da Informação, Transações IRE em. IEEE. 2 (3): 113–124. doi: 10.1109 / TIT.1956.1056813.
  12. ^
  13. Alan Turing (1937). "Em números computáveis, com uma aplicação ao Entscheidungsproblem". Proceedings of the London Mathematical Society. IEEE. 2 (42): 230–265. doi: 10.1112 / plms / s2-42.1.230. Retirado em 6 de janeiro de 2015.
  14. ^
  15. Henry Gordon Rice (1953). "Classes de conjuntos recursivamente numeráveis ​​e seus problemas de decisão". Transações da American Mathematical Society. American Mathematical Society. 74 (2): 358–366. doi: 10.2307 / 1990888. JSTOR1990888.
  16. ^
  17. Martin Davis (2004). O indecidível: artigos básicos sobre proposições indecidíveis, problemas insolúveis e funções computáveis ​​(Dover Ed). Publicações de Dover. ISBN978-0486432281.

(Existem muitos livros nesta área, esta lista está necessariamente incompleta.)


Instalações

O Departamento de Matemática reside em Krieger Hall, no Keyser Quad do campus de 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 deve 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).


Assista o vídeo: Zespół skrzyżowania dolnego. Ból kręgosłupa lędźwiowego, bioder i kolan. Przyczyny, objawy, terapia