我在没有旋转的情况下编写了天真的高斯消除法:
function [x] = NaiveGaussianElimination(A, b)
N = length(b);
x = zeros(N,1);
mulDivOp = 0;
subAddOp = 0;
for column=1:(N-1)
for row = (column+1):N
mul = A(row,column)/A(column,column);
A(row,:) = A(row,:)-mul*A(column,:);
当我尝试使用Matlab的inv()操作计算矩阵求逆时:
A = rand(10,10);
b = rand(10,1);
C = inv(A);
D = C*b;
我在最后一行得到以下警告: INV速度慢且不准确。使用A\b表示INV(A)*b,使用b/A表示b*INV(A)。
我可以将上面的代码改为:
A = rand(10,10);
b = rand(10,1);
C = inv(A);
D = A\b;
现在我没有得到警告,但我不认为这个解决方案更好。
注意:我需要存储矩阵A的逆以及inv(A)*c。另外,在我的实际文件中,矩阵A的大小可以是5000 x 5000,甚至更大。
在效
算法中的第一步应该如下所示吗?
// find the element with largest absolute value in col p and below row p-1
因此,不是所有的col,而是其中的一部分。
算法:
for p = 1 to n do
// find the element with largest absolute value in col p <-first step
// if max is zero, stop!
// if max element not in row p, swap rows
// set
function x = Gauss_Elimination(A,b)
n = length(b);
x = zeros(n,1);
% Forward Elimination
for i = 1:n-1
for j = i+1:n
mul = A(j,i)/A(i,i); % Multiplier
for k = i+1:n
A(j,k) = A(j,k) - mul*A(i,k);
end
b(j) = b(j) - mul*b(i);
end
end
x(n)
我有问题要在我的矩阵模板中实现矩阵的行列式。我试图通过计算约化关联矩阵中主对角线的乘积来获得行列式。问题是它只适用于某些情况,而且不可靠。这是行列式的代码。
template <typename T>
T Matrix<T>::Det() const {
if (Rows != Cols) {
cout << "Matrix must be square" << endl;
}
Matrix<T> r = Reduced();
T Det = 1;
for (i