[Arquivo!] Pura matemática, física, química, etc.: problemas de treinamento do cérebro não relacionados ao comércio de qualquer forma - página 557

 

Parece funcionar para o quadro plano. Parece-me que funcionará também para o caso N-dimensional. Alguma objeção?

Parece-me que é hora de escrever um roteiro e verificá-lo... :)

 

Bem, o vetor normal para a unidade dada pode ser construído mais facilmente - basta substituir qualquer uma de suas coordenadas xi por -sqrt(1-xi^2). Isto é na verdade equivalente a uma rotação de 90 graus no plano vetorial afastado do i-ésimo eixo (ou seja, substituímos coseno por -seno, obtemos coseno de ângulo+pi/2). Depois disso, tudo o que resta é normalizar o resultado.

Mas não é um fato que se possa obter um vetor normal para todos os outros no conjunto desta maneira. Assim como qualquer outra forma que selecione um vetor normal de todas as variantes.

 
alsu:

Bem, o vetor normal para a unidade dada pode ser construído mais facilmente - basta substituir qualquer uma de suas coordenadas xi por -sqrt(1-xi^2). Isto é na verdade equivalente a girar 90 graus nos pólos do vetor longe do i-ésimo eixo (ou seja, substituímos coseno por -seno, obtemos coseno de ângulo+pi/2). Depois disso, tudo o que resta é normalizar o resultado.

Mas não éum fato que se possa obter um vetor normal para todos os outros no conjunto desta maneira. Assim como qualquer outra forma que selecione um vetor normal de todas as variantes.

Exatamente. Não no caso geral.

--

Pareço ter encontrado uma solução rápida. Quando me sentei para escrever e relaxei sobre o algoritmo, ele simplesmente apareceu.

Assim, do vetor x1r gerado, basta subtrair sua projeção em x0 (ou seja, x0*sp(x0,x1r), onde sp() é produto escalar).

Em resumo, a fórmula está em uma linha: x1 = x1r - x0*sp(x0,x1r);

:))

 
Em resumo, a fórmula em uma linha: x1 = x1r - x0*sp(x0,x1r);

:))

Sim, mas é preciso aproximá-lo depois.

Bem de qualquer forma em uma linha: x1 = norm(x1r - x0*sp(x0,x1r))

 
MetaDriver:

Parece funcionar para o quadro plano. Parece-me que funcionará também para o caso N-dimensional. Alguma objeção?

Parece que está na hora de escrever um roteiro e conferir... :)

Não é preciso escrevê-lo. Comprovação:

sX = (a1+b1,a2+b2); dX = (a1-b1,a2-b2);

Como os vetores a e b eram vetores unitários, o paralelogramo correspondente é um losango e suas diagonais são perpendiculares, portanto a soma e a diferença são ortogonais umas às outras. Portanto, a troca de módulos equivale a virar um deles 90 graus para a direita e o outro para a esquerda. Em coordenadas cartesianas podemos expressar isto simplesmente rearranjando a primeira e a segunda coordenadas:

sXtr = (a2-b2,a1-b1); dXtr = (a2+b2,a1+b1)

=>

sXtr+dXtr = (2*a2,2*a1) é um vetor com modulo 2 e obviamente ortogonal ao vetor (a1,a2), isto é, vetor a. H.t.c.

 
Tudo o que resta é correr em um loop. for(i=0; i<InpVectorCount; i++) {....}
 
MetaDriver:
Tudo o que resta é correr em um loop. for(i=0; i<InpVectorCount; i++) {....}
Não, ainda se trata de escolher inicialmente o vetor "arbitrário" certo, que eventualmente dará ortogonalidade a todo o conjunto. Isto é, arbitrário acaba por não ser nada arbitrário. Mais uma vez voltamos a como calcular o vetor inicial necessário.
 
alsu:
Não, ainda se trata de escolher inicialmente o vetor "arbitrário" certo, que dará ortogonalidade a todo o conjunto. Isto é, arbitrário não é nem um pouco arbitrário. Mais uma vez voltamos a como calcular o vetor inicial necessário.
Besteira. Basta verificar a cada passo. Se em qualquer etapa de transformação um vetor se tornar contíguo ao próximo no conjunto, geramos novamente um vetor inicial aleatório e repetimos o procedimento. Como este caso é improvável (com dimensão finita), é mais fácil (mais barato) do que suspeitar imediatamente que ele seja linearmente dependente (procurando por classificação matricial).
 
MetaDriver:
Besteira. Basta verificar a cada passo. Se em qualquer etapa da transformação um vetor se tornar contraditório ao próximo vetor do conjunto, geramos novamente o vetor aleatório inicial e repetimos o procedimento. Como este caso é improvável (com dimensão finita), é mais fácil (mais barato) do que suspeitar imediatamente que ele seja linearmente dependente (procurando por classificação matricial).
Pode se tornar não co-dirigido, mas simplesmente em um ângulo indireto para todos ou alguns vetores
 
MetaDriver:
Besteira. Basta verificar a cada passo. Se em qualquer etapa da transformação um vetor se tornar contraditório ao próximo vetor do conjunto, geramos novamente o vetor aleatório inicial e repetimos o procedimento. Como este caso é improvável (com dimensão finita), é mais fácil (mais barato) do que suspeitar imediatamente que ele seja linearmente dependente (procurando por classificação matricial).
E é mais barato porque o produto escalar ainda tem que ser calculado (pelo algoritmo). Se se tornar igual a um, reiniciamos para o início e repetimos o processo. Isto é, a cada passo, basta verificar se(cp(a,b)! = 1.0) {}
Razão: