用C语言编程实现某个输入的三阶矩阵的施密特正交化。
#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;
}
原文地址: https://www.cveoy.top/t/topic/fPdS 著作权归作者所有。请勿转载和采集!