1

我正在阅读Piegl 和 Tiller的 NURBS Book。对于全局插值算法,它们要求您提供两个实用程序来求解线性方程组:

LUDecomposition(A, q, sbw)q x q具有半带宽的系数矩阵分解sbw为下三角分量和上三角分量;为简单起见,我们假设A它是一个q x q方形数组,但应该使用一个只存储非零频带的实用程序。

ForwardBackward(A, q, sbw, rhs, sol)执行向前/向后替换(参见 [Press88]);rhs[] 是系统的右手边(Q_k 的坐标),sol[] 是解向量(P_i 的坐标)。

检查参考 Press88,我发现它是C 中的数字食谱。我应该能够修改那本书中的算法以获得ForwardBackward函数,但就目前LUDecomposition而言,我在哪里可以找到适用于对角带矩阵的特殊情况的算法?

4

1 回答 1

0

用于三对角矩阵的 LU 分解的 Matlab 代码

 function [u1,d1,l1] = decomt(u,d,l)
    %length of diagonal
    n=length(d);
    u1=u;
    d1 = d;
    l1=l;

    %perform LU decomp

    d1(1) = d(1);
    for i =2:n
        l1(i-1) = l(i-1)/d1(i-1); %update lower triangle
        d1(i)= d(i) - (l(i-1)/d1(i-1))*u(i-1); % update diagonal
    end
    end

为了解决,前子和后子。

function [x] = solvet(u,d,l,b) 

n=length(d);
x = (1:n);
y =(1:n);

% Solve tridiag LUx=b

% Step 1 Solve Ly=b for y

y(1) = b(1)

for i=2:n
    y(i) = b(i) - l(i-1)*y(i-1);
end

%Step 2 : Solve Ux=y for x
x(n) = y(n)/d(n);
for i=(n-1):-1:1
    x(i) = (y(i)-u(i)*x(i+1))/d(i);
end
end
于 2018-06-01T23:17:50.663 回答