(1)算法叙述:
gauss消去法,实际上就是我们俗称的加减消元法,给出矩阵以及,进而得到增广矩阵[a,b],通过加减消元法能够得到方程的解和相应的消元后主对角线以下元素全部是0的[a,b]。
2)算法的具体描述(流程图形式):
3)具体算例:输入输出如下。
> a=[12 -3 3 4;-18 3 -1 5;3 4 8 13;1 1 1 1];
> b=[15;-15;6;8];
> [ab,x]=gauss[a,b]
abx =
4)总结:使用gauss消去法是,要求主对角元素不能为零,且由于舍入误差较大,使方程的解不“好看”。
附程序:function [ab,x]=gauss(a,b)
n_num = length(a);
x=zeros(n_num,1);
for i=1:n_num-1
r_max=a(i,i);
r_num = 0;
for j=i+1:n_num %求出第i列中最大值的行数。
if(abs(a(j,i))>r_max)
r_max = abs(a(j,i));
r_num = j;
endend;
if(r_num >i)%如果a(i,i)非最大,则交换。
for k=i:n_num
a_t = a(i,k);
a(i,k) =a(r_num,k);
a(r_num,k) =a_t;
endb_t = b(i);
b(i) =b(r_num);
b(r_num) =b_t;
end;for m=i+1:1:n_num %进行消元处理。
temp = a(m,i)/a(i,i);
for n = i:1:n_num
a(m,n) =a(m,n) -a(i,n)*temp;
endb(m) =b(m) -b(i)*temp;
endend;
ab = a,b];
x(n_num) =b(n_num)/a(n_num,n_num);%求得xn的值。
for k = n_num-1:-1:1%求得其他x 的值。
for n=k+1:n_num
b(k) =b(k) -a(k,n)*x(n);
endx(k)=b(k)/a(k,k);
end;第二题一般三对角线性方程组的追赶法。
1)对算法的叙述。
线性方程组为ax=f
此时对矩阵a可lu分解。
解ly=d得到公式
解ux=y得到公式。
2)对算法的具体描述。
图2-1 追赶法的算法流程图。
3)具体算例,数值结果。
> a=[2 2 1];
> b=[3 3 3 3];
> c=[1 1 1];
> d=[1 0 1 0];
> x=zhuigan(a,b,c,d)
x = 0.5526 -0.6579 0.8684 -0.2895
4)总结。三对角矩阵是一种特殊的矩阵,其求解类可以使用求解普通的矩阵的lu分解的方法。
附程序。function x=zhuigan(a_down,a_mid,a_up,f)
n = length(a_mid);
lu分解。u(1) =a_mid(1);
for i=2:n
l(i)=a_down(i-1)/u(i-1);
u(i)=a_mid(i)-l(i)*a_up(i-1);
if(u(i) =0)
s='u(i)=0无法分解';
break;
end;end
解ly=fy(1) =f(1);
for i = 2:n
y(i) =f(i) -l(i)*y(i-1);
end解ux=y
x(n)=y(n)/u(n);
for i=n-1:-1:1
x(i)=(y(i)-a_up(i)*x(i+1))/u(i);
end第三题 jacobi、gauss-seidel和sor迭代算法。
1)对算法的叙述。
a)jacobi 迭代算法:
如果a = d - l- u,其中可得jacobi迭代公式为:
可得: k=0,1,2...
其中称为jacobi迭代矩阵。
b)gs迭代算法:
在计算时,通过对jacobi迭代格式进行修改,可以得到gs迭代公式为:
可得: k=0,1,2...
其中称为高斯-塞德尔(gauss-seidel)迭代矩阵。这样能够得到更好的收敛效果。
c)sor迭代算法。
在gs迭代算法基础上,为了得到更好的收敛效果,在修正项前乘以一个参数w,得到sor迭代格式,其中w为松弛因子。
称为sor迭代矩阵。
2)对算法的具体描述。
图3-1 jacobi、gs、sor算法流程图。
3)具体算例,数值结果。
a)jacobi迭代算法:
> a=[4 -1 1;-1 3 -1;0 -1 3];
b=[1;5;-3];
eps = 1e-5;
x0 = 0;0;0];
x,n]=jacobi(a,b,x0,eps)
输出xn =
b)gs迭代算法:
> a=[4 -1 1;-1 3 -1;0 -1 3];
b=[1;5;-3];
eps = 1e-5;
x0 = 0;0;0];
x,n]=gs(a,b,x0,eps)
输出:xn =
c)sor迭代算法:
> a=[4 -1 1;-1 3 -1;0 -1 3];
b=[1;5;-3];
eps = 1e-5;
x0 = 0;0;0];
w=1.1;
x,n]=sor(a,b,x0,eps,w)
输出:xn =
4)总结。由上例知, jacobi算法、算法和sor算法最后迭代得到的结果是相同的,但所需要的迭代次数不同,这说明这三种算法的说明收敛速度不同。在要求相同的误差()条件下,所需迭代次数依次减小,由此得出sor算法的收敛速度最快、gauss-seidel算法居中、jacobi最慢。
其次,在使用sor方法时,首先要确定权重w
附程序。程序一:jacobi算法程序:
function [x,n]=jacobi(a,b,x0,eps)
m=200;%自定义迭代次数最大迭代次数。
d=diag(diag(a));求a的对角矩阵。
inv_d = inv(d); 求得d的逆。
l = tril(a,-1); 求a的下三角阵。
u = triu(a,1求a的上三角阵。
bj=inv_d*(l+u); gs迭代矩阵。
f=inv_d*b;
x=bj*x0+f; %gs迭代。
n=1迭代次数。
xx0 = x0;
while norm(x-xx0)>=eps
xx0=x;
x=bj*xx0+f;
n = n+1;
if(n>=m)
disp('warning: 迭代次数太多,可能不收敛!')
return;
endend
程序二:gs迭代算法。
function [x,n]=gs(a,b,x0,eps)
m=200;%自定义迭代次数最大迭代次数。
d=diag(diag(a));求a的对角矩阵。
l = tril(a,-1); 求a的下三角阵。
u = triu(a,1求a的上三角阵。
inv_d_l = inv(d-l); 求得d-l的逆。
bgs=inv_d_l*ugs迭代矩阵。
f=inv_d_l*b;
x=bgs*x0+f; %jacobi迭代。
n=1迭代次数。
xx0 = x0;
while norm(x-xx0)>=eps
xx0=x;
x=bgs*xx0+f;
n = n+1;
if(n>=m)
disp('迭代次数太多,可能不收敛!')
return;
endend
程序三:sor迭代算法程序。
function [x,n]=sor(a,b,x0,eps,w)
m=200;%自定义迭代次数最大迭代次数。
d=diag(diag(a));求a的对角矩阵。
l = tril(a,-1); 求a的下三角阵。
u = triu(a,1求a的上三角阵。
inv_d_wl = inv(d-w*l); 求得d-wl的逆。
bsor=inv_d_wl*((1-w)*d+w*usor迭代矩阵。
作业流程图格式
四b01 作业流程图 follow chart 说明 合计时间 pmax 配置人数。总标准时间 合计时间 1 宽放率 总良品标准时间 总标准时间 1 标准不良率 四b03 订单不明确联络单no 日期。营业部主管营业员制造部填单 四b03 订单不明确联络单no 日期。营业部主管营业员制造部填单 四b0...
仓库作业流程图
电子科技 物料课运作管理规范。1 物料课部门职责 1.1 按照财务核算要求做好物料的出 入库帐务处理。1.2 按照生产计划要求做好物料的收 储 发 库存信息提供工作。1.3 做好各种防患工作,确保公司资产保管和作业的安全。电子科技 物料课运作管理规范。1 物料课部门职责 1.1 按照财务核算要求做好...
仓库作业流程图
深圳市班班通信息 材料仓库作业流程图。packing list 商交货。仓管员收货。确认 商包装。将物料拉至待检区。开来料送检单。invoice 退货 换货。采购确认。品管检验确认。采购安排 商返工或换货或扣款处理仓库将不良品拉至不良品区。ngpass 仓库打包退货或 商自取。生产部分依生产单领料。...