c++ - Gram Schmidt 实现部分工作,输出错误数字

标签 c++

我正在尝试在学校项目的代码中实现 Gram Schmidt,但我遇到了一个问题。它输出了一个奇怪的数字,我不知道为什么。其余的都很好,但这个不好。抱歉,如果这篇文章很糟糕,但这是我在这里的第一篇文章,我真的需要帮助。谢谢

#include <iostream>
#define dim 100

using namespace std;



void inputMatrix(int *n, int *m, double x[dim][dim]){
    int i,j;
    for(i = 0; i < *n; i++){
        cout << "V" << i << ":";
        for(j = 0; j < *m; j++)
            cin >> x[i][j];
    }

}

void outputMatrix(int *n, int *m, double x[dim][dim]){
    int i,j;
    for(i=0;i<*n;i++){
        for(j=0;j<*m;j++)
            cout<<x[i][j]<<"  ";
        cout<<endl;
    }
}
void initialize(int *m,double v[dim]){
    int i;
    for(i=0;i<*m;i++){
         v[i]=0;
    }    
}
int main(){
    double v[dim][dim], f[dim][dim], e[dim][dim],p1,p2,a[dim];
    int n,m,i,j,z;
    cout << "Introduceti numarul de vectori: ";cin >> n;
    cout << "Introduceti numarul de elemente: ";cin >> m;
    inputMatrix(&n,&m,v);
    double div = 0;
    for(i = 0; i < m; i++){
        f[0][i] = v[0][i];
    }
    outputMatrix(&n,&m,v);
    cout << endl;
    outputMatrix(&n,&m,f);
    for(i = 1;i < n; i++){
        z = 0;
        initialize(&m,a);
        mk1:
        p1 = 0;
        p2 = 0;
        for(j = 0; j < m; j++){
            p1 = f[z][j] * v[i][j] + p1;
            p2 = f[z][j] * f[z][j] + p2;
        }
        div = p1 / p2;
        for(j = 0; j < m; j++){
            a[j] = f[z][j] * div + a[j];
        }
        z++;
        if( z < i){
            goto mk1;
        }
        else{
            for(j = 0; j < m;j++){
                f[i][j] = v[i][j] - a[j];
            }
        }
    cout << endl;
    outputMatrix(&n,&m,f);
    return 0;
}

输出:

Introduceti numarul de vectori: 3
Introduceti numarul de elemente: 4
V0:1
2
3
0
V1:1
2
0
0
V2:1
0
0
1
1  2  3  0  
1  2  0  0  
1  0  0  1  

1  2  3  0  
0  0  0  0  
0  0  0  0  

1  2  3  0  
0.642857  1.28571  -1.07143  0  
0.8  -0.4  5.55112e-17  1  

我不明白为什么输出这个“5.55112e-17” 感谢您的帮助!

最佳答案

I don't understand why it outputs this "5.55112e-17" Thanks for help!

这是舍入误差的结果,这个符号表示 5.55112 乘以 10 的 -17 次方,可以被认为是用计算机表示的(实)数计算的产物。有关更多详细信息,请考虑 this回答。

关于c++ - Gram Schmidt 实现部分工作,输出错误数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383769/

相关文章:

c++ - C++ 的非线程异步 IO 简介?

c++ - 定义变量与即时计算

c++ - 对两个构造函数使用 'this' 指针

c++ - C 和 C++ 中 WINAPI 的区别

c++ - 如何将证书字符串转换成X509结构。?

c++ - 如何从 C++ 运行 C++ 代码?

c++ - DecideBufferSize 值似乎被忽略

c++ - 内存泄漏与否?

c++ - "upcast"方法指针并将其与基类指针一起使用是否安全?

c++ - Qt:如何制作可点击路径以在点击时运行视频文件