matlab6——数值微分和方程求解(二)线性方程组求解

直接法

1.利用左除运算符的直接解法

== Ax=b→x=A\b==
ps:如果矩阵A是奇异的或者接近奇异的,则matlab会给出警告。

利用矩阵分解求解线性方程组

主要介绍LU分解(方阵为非奇异的)
将一个n阶矩阵表示为一个下三角阵和一个上三角阵的乘积

  • [L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A=LU。(A必须为方阵)
  • [L,U,P]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L一个以及置换矩阵P,使之满足PA=LU。(A必须为方阵)

使用LU分解后
在这里插入图片描述
例子:
在这里插入图片描述

做除法
A=[2 1 -5 1;1 -5 0 7;0 2 1 -1;1 6 -1 -4];
b=[13;-9;6;0];%列向量
x=A\b
结果:
x =
 -66.555555555555543
  25.666666666666664
 -18.777777777777775
  26.555555555555550
LU分解
A=[2 1 -5 1;1 -5 0 7;0 2 1 -1;1 6 -1 -4];
b=[13;-9;6;0];
[L,U]=lu(A);
x=U\(L\b)
结果和上面相同

迭代法

这里只介绍实际用法,在使用时要考虑算法的收敛性。

雅可比迭代法

function [y,n] = jacobi(A,b,x0,ep)
%雅可比迭代函数
%()内参数分别为:系数阵、右端列向量、迭代的初值和精度
%[]内分别为方程的解和迭代次数
D=diag(diag(A));%A对角阵
L=-tril(A,-1);%A下三角阵
U=-triu(A,1);%A上三角阵
B=D\(L+U);
f=D\b;
y=B*x0+f;%第一次迭代结果
n=1;%迭代次数置1
while norm(y-x0)>=ep
    x0=y;
    y=B*x0+f;
    n=n+1;
end
end

高斯迭代法

function [y,n]=gauseidel(A,b,x0,ep)
%高斯迭代法
%()内参数分别为:系数阵、右端列向量、迭代的初值和精度
%[]内分别为方程的解和迭代次数
D=diag(diag(A));
L=-tril(A,-1); 
U=-triu(A,1);
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep
    x0=y;
    y=B*x0+f;
    n=n+1;
end

在这里插入图片描述

A=[4 -2 -1;-2 4 3;-1 -3 3];
b=[1;5;0];
[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)
[x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)
结果:
x =
   0.970588483091126
   0.852941039929380
   1.176470992801838
n =35
x =
   0.970588105856975
   0.852941168882785
   1.176470537501776
n = 16
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值