[关闭]
@740340735 2016-01-11T12:24:00.000000Z 字数 2931 阅读 539

科学计算作业 三

科学计算

陆一洲 5140309557


3.30
考察要选取的元素的符号,以避免它被消。
若为正,则 为负,反之则为正。

3.33
(a) 矩阵可以同时存在 中,需要 的空间存储置换。
(b) 需要 矩阵分别记录当前 的向量存储 。矩阵 隐式地存储,消元后的

3.44
法一:高斯消元。在选取列主元时,若所有元素的绝对值都很小,则记该列元素为 ,矩阵中非零行的个数即为矩阵的秩。
法二:计算奇异值矩阵,绝对值大于某个极小值的元素个数即为矩阵的秩。

3.45
(a)

(b)

(c) 速度排序:norm equation > QR 分解 > 奇异值分解。

3.1
(a)

(b) 无解
(c)

3.3
验证:
大致相同。

3.14
所以 是正交且对称的。

3.31
下证:当 时,有
证明:
其中,
所以,
命题得证。

3.32
(a)
(b)
(c)
(d)

编程题
核心代码如下:
  1. Matrix A(m,n);
  2. vector<double> b(m), idx(n);
  3. for (int i=0; i<m; i++){
  4. double tmp=Git<double>();
  5. b[i]=Git<double>();
  6. A[i][0]=1;
  7. for (int j=1; j<n; j++)
  8. A[i][j]=A[i][j-1]*tmp;
  9. }
  10. for (int i=0; i<n; i++) idx[i]=i;
  11. Matrix A0(A);
  12. vector<double> b0(b), x(M);
  13. Householder_Transformation(FLAG);
  14. for (int i=n-1; i>=0; i--){
  15. double tmp=b[i];
  16. for (int j=i+1; j<n; j++)
  17. tmp-=A[i][j]*x[j];
  18. x[i]=t/A[i][i];
  19. }
  20. vector<double> x0(x);
  21. for (int i=0; i<n; i++) x[idx[i]]=x0[i];
  22. for (int i=0; i<m; i++){
  23. b[i]=0;
  24. for (int j=0; j<n; j++)
  25. b[i]+=A0[i][j]*x[j];
  26. b[i]=b0[i]-b[i];
  27. }
  28. cout<<Norm(b)<<endl;

有主元后误差更大,其原因为对于 ,在 的系数比 大若干倍。所以计算时 产生的误差更大;
有主元操作时,可以先计算 再计算 。此时, 的误差会由于之前计算的累积误差被进一步放大,导致拟合结果变得更差。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注