matlab求解代数方程组解析

发布时间 : 星期一 文章matlab求解代数方程组解析更新完毕开始阅读

for i=n-1:-1:1 s=0; for j=i+1:n s=a+a(i,j)*x(j); end

x(i)=(a(i,n+1)-s)/a(i,i); end

%返回列主元gauss消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x;

练习和分析与思考:

用列主元消去法重新求解gauss消元法求解的上述问题。 二、迭代法

1.迭代法的总体思想 (1)迭代公式的构造:

对线性方程组Ax?b,可以构造迭代公式X(k?1)?BX(k)?f,给出X(0),由迭代公式的X(k),如果X(k)收敛于X*,则X*就是原方程组的解。 (2)矩阵的分解:

设线性方程组Ax?b,其中A非奇异,则可以把A矩阵分解:A?D?L?U,

D?diag[a11,a22,?,ann],

?0??a21L???a31????a?n10a32?an20?an3??0a12??0???U??????????0???a13a23??a1n???a2n????

?0an?1,n?0??于是Ax?b化为x?D?1(L?U)x?D?1b,与之对应的迭代公式为:

x(k?1)?D?1(L?U)x(k)?D?1b.

2.雅可比(Jacobian)迭代法公式:

5

B?D?1(L?U),f?D?1b

用A矩阵的元素表示为:

bi?xi(k?1)?Jacobian迭代法的Matlab程序

j?1,j?i?naijx(jk),(i?1,2,?,n)

aiifunction [y,n]=jacobi(A,b,x0,eps) %误差

if nargin==3 eps=1.0e-6; elseif nargin<3 error return end

%求A的对角矩阵,下三角阵,上三角阵

D=diag(A);diag(diag(A))? L=-tril(A,-1); U=-triu(A,1); B=D\\(L+U); f=D\\b; y=B*x0+f; %迭代的次数

n=1;

%当误差没有满足要求时继续迭代

while norm(y-x0)>=eps x0=y; y=B*x0+f; n=n+1; end

6

练习和分析与思考:

利用Jacobian迭代法求解方程组:

?x1?3x3?1?2x?x?2x?6?234 ?3x?x?15x?53?12??2x2?4x4?83.高斯-塞德尔(Gauss-Seidel)迭代法公式:

将Jacobi迭代公式Dx(k?1)?(L?U)x(k)?b改进为Dx(k?1)?Lx(k?1)?Ux(k)?b,于是得到x(k?1)?(D?L)?1Ux(k)?(D?L)?1b.

B?(D?L)?1U,f?(D?L)?1b

用A矩阵的元素表示为:

xi(k?1)?bi??aijxj?1i?1(k)j?j?i?1?an(k)ijaii,(i?1,2,?,n)

Gauss-Seidel迭代法的Matlab程序

function [y,n]=gauseidel(A,b,x0,eps) %误差

if nargin==3 eps=1.0e-6; elseif nargin<3 error return end

%求A的对角矩阵,下三角阵,上三角阵

D=diag(A);diag(diag(A))? L=-tril(A,-1); U=-triu(A,1); G=(D-L)\\U; f=(D-L)\\b; y=G*x0+f;

7

%迭代的次数

n=1;

%当误差没有满足要求时继续迭代

while norm(y-x0)>=eps x0=y; y=G*x0+f; n=n+1; end

4.超松弛(Successive Over Relaxation method)迭代法(SOR) 三、求解非线性方程的方法 1.根的隔离——二分法

利用函数的性质确定根的大致范围(a,b),取(a,b)的中点x0?a?b,若2f(x0)?0,则x0即是根,否则如果f(a)?f(x0)?0,令a1?a,b1?x0,如果f(b)?f(0x?)令且(a,b)?(a1,b1),再取0,a1?x0,b1?b,则在(a1,b1)内至少有一根,

a1?b1,如此进行下去,包含根的区间(an,bn)(n?1,2,?)的长2(a1,b1)的中点x1?度每次缩小一半,n足够大时即可获得满意精度。 2.切线法

对于方程f(x)?0将f(x)在xk作Taylor展式保留线性项,即

f(x)?f(xk)?f'(xk)(x?xk),

设f'(xk)?0,然后用xk?1代替右端的x就得到迭代公式:xk?1?xk?方法称为牛顿(Newton)切线法。 3.割线法

在牛顿切线法中用差商

f(xk)?f(xk?1)代替f'(xk),则

xk?xk?1f(xk)(xk?xk?1)(割线法)

f(xk)?f(xk?1)f(xk),这种'f(xk)xk?1?xk? 8

联系合同范文客服:xxxxx#qq.com(#替换为@)