ForHosting KIT · Matemática

Calculadora de Gram-Schmidt

Insira vetores independentes e receba uma base ortonormal do mesmo espaço: (1, 1, 0), (1, 0, 1) e (0, 0, 3) viram três vetores unitários perpendiculares, e o primeiro é o seu primeiro vetor levado a comprimento 1. Se forem dependentes, você é avisado. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve

O processo de Gram-Schmidt recebe um conjunto de vetores linearmente independentes e devolve uma base ortonormal: o mesmo número de vetores, cada um com comprimento unitário, cada um perpendicular a todos os outros, gerando exatamente o mesmo subespaço dos originais. Se os vetores forem linearmente dependentes, a calculadora avisa em vez de devolver uma resposta errada.

O que o processo de Gram-Schmidt realmente faz

Bases ortonormais facilitam quase todo cálculo de álgebra linear: projeções viram produtos escalares, coordenadas ficam triviais e os erros numéricos permanecem pequenos. O processo de Gram-Schmidt constrói uma a partir de qualquer conjunto independente. Ele pega o primeiro vetor e o redimensiona para comprimento unitário; esse é o primeiro vetor da base.

Para cada vetor seguinte, subtrai a parte que aponta na direção de cada vetor da base já encontrado — a projeção, calculada como produto escalar — e então redimensiona o que sobra. O que sobra é, por construção, perpendicular a tudo que veio antes. Repita para todos os vetores e você tem uma base ortonormal do mesmo espaço gerado.

A calculadora desta página executa exatamente esse procedimento clássico: você fornece vetores como arrays de números, todos com a mesma dimensão, e recebe os vetores ortonormais na ordem correspondente. O primeiro vetor de saída é apenas o seu primeiro vetor de entrada normalizado; cada saída posterior é a componente da entrada que é genuinamente nova, ajustada para comprimento unitário. Como todo o cálculo é aritmética simples em ponto flutuante, a mesma entrada sempre produz a mesma saída, o que torna seguro embutir em pipelines automatizados.

Por que dependência linear é um erro, não um resultado

Gram-Schmidt não tem resposta significativa quando os vetores de entrada são linearmente dependentes. Se um vetor é combinação dos anteriores, subtrair as projeções o elimina por completo: não sobra nada para normalizar, e dividir por um resto de comprimento zero não faz sentido. Uma calculadora que descartasse esse vetor em silêncio, ou devolvesse uma linha de zeros, entregaria uma base que não corresponde à quantidade de entradas e esconderia um erro de modelagem.

A mesma verificação captura os casos extremos óbvios: um vetor nulo, um vetor repetido ou mais vetores do que a dimensão do espaço, o que já é dependente só pela contagem. A tolerância é numérica, não exata, então conjuntos quase dependentes gerados por ruído de medição também são sinalizados. Se você esperava que o conjunto fosse independente, a mensagem de erro indica qual vetor inspecionar, o que geralmente basta para encontrar a linha duplicada ou o deslize de copiar e colar nos seus dados.

Detalhes práticos: formato de entrada, precisão e limites

A entrada é um único campo, vectors, fornecido como um array de arrays de números finitos — um array interno por vetor, todos com a mesma dimensão, até 50 vetores de dimensão até 50. A saída informa a dimensão, quantos vetores ortonormais foram produzidos e a própria base como um array de vetores unitários. As componentes são arredondadas para seis casas decimais, então os resultados são estáveis entre máquinas e seguros para comparar ou armazenar; cada vetor devolvido tem norma euclidiana 1 e é ortogonal aos demais até esse arredondamento.

O cálculo é O(n ao quadrado vezes a dimensão), o que, para esses limites, representa microssegundos de trabalho, de modo que a latência observada é essencialmente de transporte, não de aritmética. Uma verificação útil antes de enviar os dados: nenhum vetor pode ser o vetor nulo, não pode haver dois vetores iguais e o número de vetores não pode exceder a dimensão.

Para conjuntos muito mal condicionados em trabalho numérico sério, um Gram-Schmidt modificado ou uma decomposição QR de Householder oferece estabilidade extra, mas, para os tamanhos que esta calculadora aceita, o processo clássico é preciso muito além das seis casas decimais que informa.

Ortogonalize direções em um projeto de gráficos ou simulação

Transforme vetores de referência quase ortogonais em uma base ortonormal verdadeira antes de compor rotações, para que o desvio de arredondamento não se acumule.

Prepare uma base para uma etapa de mínimos quadrados ou projeção

Projete dados em um subespaço fazendo produto escalar com vetores de base ortonormal em vez de resolver um sistema linear a cada vez.

Confira exercícios e exemplos didáticos

Verifique um exercício de Gram-Schmidt feito à mão passo a passo e veja exatamente qual vetor quebra a independência quando o conjunto é dependente.

Quanto custa?

Nesta página, funciona de graça no seu navegador com o mesmo código.

Qual é a precisão do resultado?

As componentes são calculadas em precisão dupla e arredondadas para seis casas decimais. Cada vetor de saída tem norma unitária e é ortogonal aos demais até esse arredondamento.

A ordem dos vetores de entrada importa?

Sim. O primeiro vetor de saída é a primeira entrada normalizada; as saídas seguintes são os restos ortogonalizados na mesma ordem, então permutar a entrada gera uma base ortonormal diferente (e igualmente válida).

O que acontece se meus vetores forem linearmente dependentes?

A calculadora para e informa qual vetor não traz uma direção nova, em vez de descartá-lo ou devolver uma linha de zeros. Um vetor nulo, um vetor repetido ou mais vetores que a dimensão contam como dependentes.

Para que serve uma base ortonormal?

Ela simplifica quase toda a álgebra linear: as projeções viram produtos escalares, as coordenadas saem de forma direta e os erros numéricos continuam pequenos.

Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.

POSThttps://api.kit.forhosting.com/math/gram-schmidt

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/math/gram-schmidt \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vectors":[[1,1,0],[1,0,1],[0,0,3]]}'
{
  "vectors": [
    [
      1,
      1,
      0
    ],
    [
      1,
      0,
      1
    ],
    [
      0,
      0,
      3
    ]
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "math.gram_schmidt",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

max_vectors50
max_dimension50
HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Cole seus vetores aqui e obtenha a base ortonormal calculada passo a passo no navegador, ou chame a API para ortogonalizar conjuntos de vetores dentro de um script, um pipeline de planilhas ou um fluxo numérico.

Por que dependência linear é um erro, não um resultado

Este endpoint trata a dependência como violação de contrato: verifica, em ordem, se cada vetor contribui com uma nova direção e, se o vetor k estiver no espaço gerado pelos anteriores, responde com um erro invalid_input indicando o vetor problemático — e uma chamada com erro não é cobrada.

Qual entrada ela espera?

Um campo vectors: um array de arrays de números finitos, um array interno por vetor, todos com a mesma dimensão — até 50 vetores de dimensão até 50.

O que acontece se meus vetores forem linearmente dependentes?

A requisição falha com um erro invalid_input que indica o primeiro vetor contido no espaço gerado pelos anteriores. Chamadas com erro não são cobradas.

Posso usar com vetores complexos?

Não. Apenas vetores reais são aceitos; as entradas devem ser números JSON finitos.

Ver a documentação completa do KIT →