#include <stdio.h> #include <math.h>

void schmidt(double A[3][3], double Q[3][3], double R[3][3]);

int main() { double A[3][3], Q[3][3], R[3][3]; int i, j;

printf("Enter the elements of a 3x3 matrix:\n");
for (i = 0; i < 3; i++)
{
    for (j = 0; j < 3; j++)
    {
        scanf("%lf", &A[i][j]);
    }
}

schmidt(A, Q, R);

printf("The orthogonal matrix Q is:\n");
for (i = 0; i < 3; i++)
{
    for (j = 0; j < 3; j++)
    {
        printf("%lf ", Q[i][j]);
    }
    printf("\n");
}

printf("The upper triangular matrix R is:\n");
for (i = 0; i < 3; i++)
{
    for (j = 0; j < 3; j++)
    {
        printf("%lf ", R[i][j]);
    }
    printf("\n");
}

return 0;

}

void schmidt(double A[3][3], double Q[3][3], double R[3][3]) { int i, j, k; double norm, dot_prod;

for (i = 0; i < 3; i++)
{
    for (j = 0; j < 3; j++)
    {
        Q[i][j] = A[i][j];
    }
}

for (k = 0; k < 3; k++)
{
    norm = 0.0;
    for (i = 0; i < 3; i++)
    {
        norm += Q[i][k] * Q[i][k];
    }
    norm = sqrt(norm);

    for (i = 0; i < 3; i++)
    {
        Q[i][k] /= norm;
    }

    for (j = k + 1; j < 3; j++)
    {
        dot_prod = 0.0;
        for (i = 0; i < 3; i++)
        {
            dot_prod += Q[i][k] * A[i][j];
        }

        for (i = 0; i < 3; i++)
        {
            A[i][j] -= dot_prod * Q[i][k];
        }
        R[k][j] = dot_prod;
    }
    R[k][k] = norm;
}
用C语言编程实现某个输入的三阶矩阵的施密特正交化。

原文地址: https://www.cveoy.top/t/topic/fPdS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录