- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在学校项目的代码中实现 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/
给定一个具有独立列的矩阵 A(不一定是正方形),我能够应用 Gram-Schmidt 迭代并使用 Matlab 的函数 qr 为其列空间(以正交矩阵 Q 的形式)生成正交基 A=[1,1;1,0;1,
我正在构建一个基于 OpenGL3 的免费开源 3D 游戏引擎(这不是学校作业,而是为了个人技能发展和回馈开源社区)。我已经到了需要学习大量相关数学的阶段,所以我正在阅读一本很棒的教科书,名为“3D
我有一个在循环中使用 Gram-Schmidt 的代码。我想尽可能地减少对该算法的调用次数,但问题是,尽管在调用前后得到相同的结果,但当我使用这些值打印某些操作的结果时,它们是不同的。例如,在下面的代
我正在尝试在学校项目的代码中实现 Gram Schmidt,但我遇到了一个问题。它输出了一个奇怪的数字,我不知道为什么。其余的都很好,但这个不好。抱歉,如果这篇文章很糟糕,但这是我在这里的第一篇文章,
我写了一些代码来实现修改后的 Gram Schmidt 过程。什么时候我在真实矩阵上测试过,是正确的。但是,当我测试它时在复杂的矩阵上,它出错了。 通过逐步检查,我相信我的代码是正确的。所以,我想知道
这是执行第 1 页中的 Gram Schmidt 的 MATLAB 代码 http://web.mit.edu/18.06/www/Essays/gramschmidtmat.pdf 因为我没有 MA
R 中有没有包含使用 Gram-Schmidt 正交化进行特征选择的算法的包? 最佳答案 见附录 A here ,用于使用 Gram-Schmidt 正交化的前向选择的 Matlab 代码实现。如果没
我在 MATLAB 中有一个函数执行 Gram-Schmidt Orthogonalisation对内积应用了非常重要的权重(我认为 MATLAB 的内置函数不支持这一点)。据我所知,这个函数运行良好
我想在 MATLAB 中生成具有以下约束的 M*N 矩阵(M 不等于 N): 第 1 步。将矩阵的每个条目设置为独立同分布。 N(0,1) 值。 第 2 步。使用 Gram-Schmidt 算法对矩阵
我正在使用 Go 开发 RESTful API,但由于应用配置、身份验证等原因,我有很多全局变量。 由于流行的推荐,我正在使用 Julien Schmidt 的 httprouter,并且正在寻找避免
我试图在 R 中为我的线性代数类复制 Gram-Schmidt 正交化算法。首先我生成一些数据,并将其存储在矩阵 A a1 1:4-1 [1] 0 1 2 3 同时 > 1:(4-1) [1] 1 2
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我想做 Gram-Schmidt 正交化来修复大矩阵,这些矩阵开始稍微偏离纯 Tensorflow 中的正交性(在更大的计算中在图上进行,而不破坏它)。我见过的解决方案like the one the
我是一名优秀的程序员,十分优秀!