matlab中消元法方程组,列主消元法解非奇异线性方程组的MATLAB程序

function [x] = LMain_elimination(A,b,prec,n)

%%

% 列主消元法求解线性代数方程组 Ax = b的MATLAB实现

% A为待求解方程组的系数矩阵(要求A为非奇异系数矩阵)

% b为方程组右端常数项(列向量)

% prec为计算过程中的控制常数,当某个选主元或完成消元后的系数小于prec时就停止计算

% n为计算过程中的有效数字长度(用vpa函数保留)

%%

% x为求解的结果

%%

fprintf('列主消元法求解线性方程组 Ax = b');

[col,rol] = size(A); % 求方程组系数矩阵的行数和列数,这里col == rol

M = zeros(col,rol); % 用0初始化M矩阵

x = zeros(col,1); % 用0初始化x向量

%%

% 消元计算:对k = 1,2,…,n-1依次计算

for k = 1:col-1

[maxv,r] = max(abs(A(k:n,k))); % 求第k列的最大值,用maxv保存,r记录的是从第k行起的第r行(最大值所在的行号),也就是第r + k - 1行

if (maxv < prec)

disp('主元过小,停止计算');

return;

end

r = r + k - 1; % 最大值所在的行号

A([r k],:) = A([k r],:); % 交换系数矩阵的第k行和第r行

b([r k]) = b([k r]); % 交换常数项的第k个数和第r个数(列向量)

if (vpa(A(k,k),n) == 0) % 如果出现除数为0的情况就不必再计算,跳出此函数

return;

else

M(k+1:col,k) = vpa(vpa(A(k+1:col,k),n)/vpa(A(k,k),n),n);

A(k+1:col,k+1:col) = vpa(vpa(A(k+1:col,k+1:col),n) - vpa(M(k+1:col,k),n)*vpa(A(k,k+1:col),n),n);

b(k+1:col) = vpa(vpa(b(k+1:col),n)-vpa(M(k+1:col,k),n)*vpa(b(k),n),n);

end

end

%%

% 回代求解

if (vpa(A(col,rol),n)~=0) % 如果除数不为0,就计算最后一个未知数的根

x(col) = vpa(vpa(b(col),n)/vpa(A(col,rol),n),n);

end

for k = col-1:-1:1

if (vpa(A(k,k),n) == 0) % 除数为0就跳出函数

return;

else

% 依次回代求解其余的根

x(k) = vpa(vpa(vpa(b(k),n) - vpa(A(k,k+1:col),n)*vpa(x(k+1:col),n),n)/vpa(A(k,k),n),n);

end

end

end

%%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值