Calculadora de Gram-Schmidt
Introduzca vectores independientes y obtenga una base ortonormal del mismo espacio: (1, 1, 0), (1, 0, 1) y (0, 0, 3) se convierten en tres vectores unitarios perpendiculares, el primero es su primer vector llevado a longitud 1. Si son dependientes, se lo indica. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
El proceso de Gram-Schmidt toma un conjunto de vectores linealmente independientes y devuelve una base ortonormal: el mismo número de vectores, todos de longitud unitaria, perpendiculares entre sí y generando exactamente el mismo subespacio que los originales. Si los vectores son linealmente dependientes, la calculadora lo indica en lugar de devolver un resultado incorrecto.
Qué hace realmente el proceso de Gram-Schmidt
Las bases ortonormales facilitan casi todos los cálculos del álgebra lineal: las proyecciones se convierten en productos escalares, las coordenadas resultan triviales y los errores numéricos se mantienen pequeños. El proceso de Gram-Schmidt construye una a partir de cualquier conjunto independiente. Toma el primer vector y lo reescala a longitud unitaria: ese es el primer vector de la base.
Para cada vector posterior, resta la parte que apunta en la dirección de cada vector de la base ya encontrado —la proyección, calculada como producto escalar— y luego reescala lo que queda. Lo que queda es, por construcción, perpendicular a todo lo anterior. Al repetirlo para todos los vectores se obtiene una base ortonormal del mismo espacio generado.
La calculadora de esta página ejecuta exactamente este procedimiento clásico: usted proporciona los vectores como arreglos de números, todos de la misma dimensión, y recibe los vectores ortonormales en el orden correspondiente. El primer vector de salida es simplemente su primer vector de entrada normalizado; cada salida posterior es la componente genuinamente nueva de su entrada, llevada a longitud unitaria. Como todo el cálculo es aritmética simple sobre números de doble precisión, la misma entrada siempre produce la misma salida, lo que lo hace seguro para integrar en flujos automatizados.
Por qué la dependencia lineal es un error y no un resultado
Gram-Schmidt no tiene una respuesta con sentido cuando los vectores de entrada son linealmente dependientes. Si un vector es combinación de los anteriores, al restar las proyecciones desaparece por completo: no queda nada que normalizar y dividir entre un residuo de longitud cero sería un absurdo. Una calculadora que descartara ese vector en silencio, o devolviera una fila de ceros, le entregaría una base que no coincide con la cantidad de entradas y oculta un error de modelado.
La misma comprobación detecta los casos límite obvios: un vector cero, un vector repetido o más vectores que la dimensión del espacio, que ya es dependiente por simple conteo. La tolerancia es numérica y no exacta, de modo que también se señalan los conjuntos casi dependientes producto de ruido de medición. Si esperaba que el conjunto fuera independiente, el mensaje de error le indica qué vector revisar, lo que suele bastar para encontrar la fila duplicada o el descuido de copiar y pegar en sus datos.
Detalles prácticos: formato de entrada, precisión y límites
La entrada es un único campo, vectors, dado como un arreglo de arreglos de números finitos: un arreglo interno por vector, todos de la misma dimensión, hasta 50 vectores de dimensión máxima 50. La salida informa la dimensión, cuántos vectores ortonormales se produjeron y la base misma como un arreglo de vectores unitarios.
Las componentes se redondean a seis decimales, de modo que los resultados son estables entre máquinas y seguros de comparar o almacenar; cada vector devuelto tiene norma euclidiana 1 y es ortogonal a sus compañeros salvo ese redondeo. El cálculo es O(n al cuadrado por la dimensión), lo que con estos límites supone microsegundos de trabajo, así que la latencia que observa es esencialmente transporte, no aritmética.
Una comprobación útil antes de enviar datos: ningún vector puede ser el vector cero, no puede haber dos vectores iguales y el número de vectores no puede superar la dimensión. Para conjuntos muy mal condicionados en trabajo numérico serio, el Gram-Schmidt modificado o una factorización QR de Householder ofrecen mayor estabilidad, pero para los tamaños que acepta esta calculadora el proceso clásico es preciso mucho más allá de los seis decimales que informa.
Qué puede hacer con ella
Ortogonalizar direcciones en un proyecto de gráficos o simulación
Convierta vectores de marco casi ortogonales en una base ortonormal verdadera antes de componer rotaciones, para que la deriva por redondeo no se acumule.
Preparar una base para un paso de mínimos cuadrados o proyección
Proyecte datos sobre un subespacio mediante productos escalares con los vectores de la base ortonormal, en lugar de resolver un sistema lineal cada vez.
Revisar tareas y ejemplos de enseñanza
Verifique paso a paso un ejercicio de Gram-Schmidt hecho a mano y vea exactamente qué vector rompe la independencia cuando el conjunto es dependiente.
Preguntas frecuentes
¿Cuánto cuesta?
En esta página funciona gratis en su navegador con el mismo código.
¿Qué precisión tiene el resultado?
Las componentes se calculan en doble precisión y se redondean a seis decimales. Cada vector de salida tiene norma unitaria y es ortogonal a los demás salvo ese redondeo.
¿Importa el orden de los vectores de entrada?
Sí. El primer vector de salida es el primero de entrada normalizado; las salidas posteriores son los residuos ortogonalizados en el mismo orden, de modo que permutar la entrada produce una base ortonormal distinta (e igualmente válida).
¿Qué pasa si mis vectores son linealmente dependientes?
La calculadora se detiene y le indica qué vector no aporta una dirección nueva, en lugar de descartarlo o devolver una fila de ceros. Un vector nulo, uno repetido o más vectores que la dimensión cuentan como dependientes.
¿Para qué sirve una base ortonormal?
Simplifica casi todo el álgebra lineal: las proyecciones se reducen a productos escalares, las coordenadas se obtienen de forma directa y los errores numéricos se mantienen pequeños.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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]]}'const res = await fetch("https://api.kit.forhosting.com/math/gram-schmidt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"vectors": [
[
1,
1,
0
],
[
1,
0,
1
],
[
0,
0,
3
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/gram-schmidt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"vectors": [
[
1,
1,
0
],
[
1,
0,
1
],
[
0,
0,
3
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/gram-schmidt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"vectors":[[1,1,0],[1,0,1],[0,0,3]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"vectors":[[1,1,0],[1,0,1],[0,0,3]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/gram-schmidt", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"vectors": [
[
1,
1,
0
],
[
1,
0,
1
],
[
0,
0,
3
]
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.gram_schmidt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_vectors | 50 |
max_dimension | 50 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Pegue sus vectores aquí y obtenga la base ortonormal calculada paso a paso en su navegador, o llame a la API para ortogonalizar conjuntos de vectores dentro de un script, una hoja de cálculo o un flujo de trabajo numérico.
Por qué la dependencia lineal es un error y no un resultado
Este servicio trata la dependencia como una violación del contrato: comprueba, en orden, si cada vector aporta una dirección nueva, y si el vector k está en el espacio generado por los anteriores responde con un error invalid_input que nombra al vector problemático, y una llamada con error no se factura.
Preguntas técnicas
¿Qué entrada espera?
Un campo vectors: un arreglo de arreglos de números finitos, un arreglo interno por vector, todos de la misma dimensión; hasta 50 vectores de dimensión máxima 50.
¿Qué pasa si mis vectores son linealmente dependientes?
La solicitud falla con un error invalid_input que nombra al primer vector situado en el espacio generado por los anteriores. Las llamadas con error no se facturan.
¿Puedo usarlo con vectores complejos?
No. Solo se aceptan vectores reales; las entradas deben ser números JSON finitos.