gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:51:35 25 4
gpt4 key购买 nike

我正在尝试在学校项目的代码中实现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com