{"id":1995,"date":"2025-02-03T13:36:25","date_gmt":"2025-02-03T13:36:25","guid":{"rendered":"https:\/\/donhit.com\/en\/?p=1995"},"modified":"2025-02-07T09:06:31","modified_gmt":"2025-02-07T09:06:31","slug":"gram-schmidt","status":"publish","type":"post","link":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/","title":{"rendered":"Gram-Schmidt Calculator"},"content":{"rendered":"<p><center><div class=\"container123\">\r\n        <div class=\"header\">\r\n            <h2>Gram-Schmidt Calculator<\/h2>\r\n            <p>Calculate orthogonal and orthonormal bases using the Gram-Schmidt process<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"calculator\">\r\n            <div class=\"input-section\">\r\n                <h2>Input Vectors<\/h2>\r\n                <div class=\"vector-inputs\">\r\n                    <div class=\"vector-input\">\r\n                        <label for=\"vector1\">Vector 1<\/label>\r\n                        <input type=\"text\" id=\"vector1\" placeholder=\"e.g., 1,0,0\">\r\n                    <\/div>\r\n                    <div class=\"vector-input\">\r\n                        <label for=\"vector2\">Vector 2<\/label>\r\n                        <input type=\"text\" id=\"vector2\" placeholder=\"e.g., 1,1,0\">\r\n                    <\/div>\r\n                    <div class=\"vector-input\">\r\n                        <label for=\"vector3\">Vector 3<\/label>\r\n                        <input type=\"text\" id=\"vector3\" placeholder=\"e.g., 1,1,1\">\r\n                    <\/div>\r\n                <\/div>\r\n                <div id=\"error\" class=\"error hidden\"><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"button-group\">\r\n                <button class=\"primary-button\" onclick=\"calculate()\">Calculate<\/button>\r\n                <button class=\"secondary-button\" onclick=\"clearInputs()\">Clear<\/button>\r\n            <\/div>\r\n\r\n            <div class=\"result-section hidden\" id=\"results\">\r\n                <h2>Results<\/h2>\r\n                <div class=\"result-box\">\r\n                    <h3>Orthogonal Basis:<\/h3>\r\n                    <div id=\"orthogonal-results\"><\/div>\r\n                <\/div>\r\n                <div class=\"result-box\" style=\"margin-top: 1rem;\">\r\n                    <h3>Orthonormal Basis:<\/h3>\r\n                    <div id=\"orthonormal-results\"><\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ Helper function to parse vector input\r\n        function parseVector(input) {\r\n            try {\r\n                return input.split(',').map(x => parseFloat(x.trim())).filter(x => !isNaN(x));\r\n            } catch (e) {\r\n                return [];\r\n            }\r\n        }\r\n\r\n        \/\/ Calculate dot product of two vectors\r\n        function dotProduct(v1, v2) {\r\n            return v1.reduce((sum, x, i) => sum + x * v2[i], 0);\r\n        }\r\n\r\n        \/\/ Calculate vector magnitude\r\n        function magnitude(v) {\r\n            return Math.sqrt(dotProduct(v, v));\r\n        }\r\n\r\n        \/\/ Scale vector by scalar\r\n        function scaleVector(v, scalar) {\r\n            return v.map(x => x * scalar);\r\n        }\r\n\r\n        \/\/ Subtract two vectors\r\n        function subtractVectors(v1, v2) {\r\n            return v1.map((x, i) => x - v2[i]);\r\n        }\r\n\r\n        \/\/ Normalize vector\r\n        function normalizeVector(v) {\r\n            const mag = magnitude(v);\r\n            return scaleVector(v, 1\/mag);\r\n        }\r\n\r\n        \/\/ Format vector for display\r\n        function formatVector(v) {\r\n            return `[${v.map(x => x.toFixed(4)).join(', ')}]`;\r\n        }\r\n\r\n        \/\/ Gram-Schmidt process\r\n        function gramSchmidt(vectors) {\r\n            \/\/ Remove empty vectors and ensure all vectors have the same dimension\r\n            vectors = vectors.filter(v => v.length > 0);\r\n            const dim = vectors[0].length;\r\n            vectors = vectors.filter(v => v.length === dim);\r\n\r\n            if (vectors.length === 0) return { orthogonal: [], orthonormal: [] };\r\n\r\n            const orthogonal = [];\r\n            const orthonormal = [];\r\n\r\n            \/\/ First vector is unchanged (except for normalization)\r\n            orthogonal.push([...vectors[0]]);\r\n            orthonormal.push(normalizeVector(vectors[0]));\r\n\r\n            \/\/ Process remaining vectors\r\n            for (let i = 1; i < vectors.length; i++) {\r\n                let u = [...vectors[i]];\r\n\r\n                \/\/ Subtract projections of previous vectors\r\n                for (let j = 0; j < i; j++) {\r\n                    const proj = scaleVector(\r\n                        orthogonal[j],\r\n                        dotProduct(vectors[i], orthogonal[j]) \/ dotProduct(orthogonal[j], orthogonal[j])\r\n                    );\r\n                    u = subtractVectors(u, proj);\r\n                }\r\n\r\n                orthogonal.push(u);\r\n                orthonormal.push(normalizeVector(u));\r\n            }\r\n\r\n            return { orthogonal, orthonormal };\r\n        }\r\n\r\n        \/\/ Clear all inputs and results\r\n        function clearInputs() {\r\n            document.querySelectorAll('.vector-input input').forEach(input => input.value = '');\r\n            document.getElementById('results').classList.add('hidden');\r\n            document.getElementById('error').classList.add('hidden');\r\n        }\r\n\r\n        \/\/ Main calculation function\r\n        function calculate() {\r\n            const vectors = [];\r\n            const error = document.getElementById('error');\r\n            const results = document.getElementById('results');\r\n\r\n            \/\/ Get input vectors\r\n            for (let i = 1; i <= 3; i++) {\r\n                const input = document.getElementById(`vector${i}`).value.trim();\r\n                if (input) vectors.push(parseVector(input));\r\n            }\r\n\r\n            \/\/ Validate input\r\n            if (vectors.length < 2) {\r\n                error.textContent = 'Please enter at least two vectors.';\r\n                error.classList.remove('hidden');\r\n                results.classList.add('hidden');\r\n                return;\r\n            }\r\n\r\n            const dim = vectors[0].length;\r\n            if (!vectors.every(v => v.length === dim)) {\r\n                error.textContent = 'All vectors must have the same dimension.';\r\n                error.classList.remove('hidden');\r\n                results.classList.add('hidden');\r\n                return;\r\n            }\r\n\r\n            \/\/ Calculate results\r\n            error.classList.add('hidden');\r\n            const { orthogonal, orthonormal } = gramSchmidt(vectors);\r\n\r\n            \/\/ Display results\r\n            const orthogonalResults = document.getElementById('orthogonal-results');\r\n            const orthonormalResults = document.getElementById('orthonormal-results');\r\n\r\n            orthogonalResults.innerHTML = orthogonal\r\n                .map((v, i) => `<div class=\"result-vector\">u${i + 1} = ${formatVector(v)}<\/div>`)\r\n                .join('');\r\n\r\n            orthonormalResults.innerHTML = orthonormal\r\n                .map((v, i) => `<div class=\"result-vector\">e${i + 1} = ${formatVector(v)}<\/div>`)\r\n                .join('');\r\n\r\n            results.classList.remove('hidden');\r\n        }\r\n    <\/script><\/center>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[184],"tags":[],"class_list":["post-1995","post","type-post","status-publish","format-standard","hentry","category-calculator"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gram-Schmidt Calculator - DonHit<\/title>\n<meta name=\"description\" content=\"The Gram-Schmidt process is an algorithm that transforms a set of linearly independent vectors into an orthonormal basis for a given Euclidean space\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gram-Schmidt Calculator - DonHit\" \/>\n<meta property=\"og:description\" content=\"The Gram-Schmidt process is an algorithm that transforms a set of linearly independent vectors into an orthonormal basis for a given Euclidean space\" \/>\n<meta property=\"og:url\" content=\"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/\" \/>\n<meta property=\"og:site_name\" content=\"DonHit - World of Tools\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-03T13:36:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-07T09:06:31+00:00\" \/>\n<meta name=\"author\" content=\"DonHit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DonHit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gram-Schmidt Calculator - DonHit","description":"The Gram-Schmidt process is an algorithm that transforms a set of linearly independent vectors into an orthonormal basis for a given Euclidean space","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/","og_locale":"en_US","og_type":"article","og_title":"Gram-Schmidt Calculator - DonHit","og_description":"The Gram-Schmidt process is an algorithm that transforms a set of linearly independent vectors into an orthonormal basis for a given Euclidean space","og_url":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/","og_site_name":"DonHit - World of Tools","article_published_time":"2025-02-03T13:36:25+00:00","article_modified_time":"2025-02-07T09:06:31+00:00","author":"DonHit","twitter_card":"summary_large_image","twitter_misc":{"Written by":"DonHit","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/#article","isPartOf":{"@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/"},"author":{"name":"DonHit","@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/0c6ff7dcd8ba4810c56a532f09c33148"},"headline":"Gram-Schmidt Calculator","datePublished":"2025-02-03T13:36:25+00:00","dateModified":"2025-02-07T09:06:31+00:00","mainEntityOfPage":{"@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/"},"wordCount":10,"commentCount":0,"publisher":{"@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/0c6ff7dcd8ba4810c56a532f09c33148"},"articleSection":["Calculator"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/","url":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/","name":"Gram-Schmidt Calculator - DonHit","isPartOf":{"@id":"https:\/\/donhit.com\/en\/#website"},"datePublished":"2025-02-03T13:36:25+00:00","dateModified":"2025-02-07T09:06:31+00:00","description":"The Gram-Schmidt process is an algorithm that transforms a set of linearly independent vectors into an orthonormal basis for a given Euclidean space","breadcrumb":{"@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/donhit.com\/en\/calculator\/gram-schmidt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Trang ch\u1ee7","item":"https:\/\/donhit.com\/en\/"},{"@type":"ListItem","position":2,"name":"Calculator","item":"https:\/\/donhit.com\/en\/category\/calculator\/"},{"@type":"ListItem","position":3,"name":"Gram-Schmidt Calculator"}]},{"@type":"WebSite","@id":"https:\/\/donhit.com\/en\/#website","url":"https:\/\/donhit.com\/en\/","name":"DonHit - World of tools","description":"","publisher":{"@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/0c6ff7dcd8ba4810c56a532f09c33148"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/donhit.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/0c6ff7dcd8ba4810c56a532f09c33148","name":"DonHit","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/image\/","url":"https:\/\/donhit.com\/en\/wp-content\/uploads\/2024\/11\/logo-donhit.webp","contentUrl":"https:\/\/donhit.com\/en\/wp-content\/uploads\/2024\/11\/logo-donhit.webp","width":400,"height":267,"caption":"DonHit"},"logo":{"@id":"https:\/\/donhit.com\/en\/#\/schema\/person\/image\/"},"description":"DonHit is a website designed to provide useful tools for everyone. Its primary goal is to support and empower the community. All the tools available on the site are completely free to use.","sameAs":["https:\/\/donhit.com\/en"],"url":"https:\/\/donhit.com\/en\/author\/admin_don\/"}]}},"_links":{"self":[{"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/posts\/1995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/comments?post=1995"}],"version-history":[{"count":3,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/posts\/1995\/revisions"}],"predecessor-version":[{"id":2154,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/posts\/1995\/revisions\/2154"}],"wp:attachment":[{"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/media?parent=1995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/categories?post=1995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/donhit.com\/en\/wp-json\/wp\/v2\/tags?post=1995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}