继续求解两道MATLAB编程题~~~求高手解答~~~~
第3题:迭代法求方程的根用迭代法求方程在区间[-2,3]上的根,并讨论迭代法的收敛性。(二分法或者牛顿都可以)第4题:线性方程组求解分别使用雅克比迭代和GS迭代计算线性方...
第3题:迭代法求方程的根
用迭代法求方程 在区间[-2,3]上的根,并讨论迭代法的收敛性。
(二分法或者牛顿 都可以)
第4题:线性方程组求解
分别使用雅克比迭代和GS迭代计算线性方程组
2x1-x2=1; -x1+3x2-x3=8; -x2+2x3=-5
取初值为x(0)=(0,0,0)T,迭代过程保留5位有效数字(精确解为x*=(2,3,-1)T )
步骤简洁点最好,每一步都能给出注释最好~~~如果2道都做出来的话 我再追加50分!!谢谢各位大神了!! 展开
用迭代法求方程 在区间[-2,3]上的根,并讨论迭代法的收敛性。
(二分法或者牛顿 都可以)
第4题:线性方程组求解
分别使用雅克比迭代和GS迭代计算线性方程组
2x1-x2=1; -x1+3x2-x3=8; -x2+2x3=-5
取初值为x(0)=(0,0,0)T,迭代过程保留5位有效数字(精确解为x*=(2,3,-1)T )
步骤简洁点最好,每一步都能给出注释最好~~~如果2道都做出来的话 我再追加50分!!谢谢各位大神了!! 展开
1个回答
展开全部
二分法
function [approx_root,n]=bisect (a,b)
%a,b为根的区间
fa =bifun(a);
fb =bifun(b);
n=0;
while(abs(b-a)> 0.0001)
c=(a+b)/2;
approx_root=c;
fc=bifun(c);
[a,c,b;fa,fc,fb];
n=n+1;
if ( sign(fb) * sign(fc)<=0)
a=c;
fa=fc;
else
b=c;
fb=fc;
end
end
%---------待求解的方程-------------------------
function f=bifun(x)
f=x-tan(x);
------------
[r,n]=bisect (-2,3)
r =
1.5708
n =
16
--------
雅克比迭代
function [y,n]=Jacobim(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
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; %迭代次数
while norm(y-x0)>=eps
x0=y;
y=B*x0+f;
n=n+1;
end
----------------计算过程----
>> A=[2 -1 0;-1 3 -1;0 -1 2];
>> b=[1 8 -5]';
>> tol=1e-5;
>> [y1,n1]=Jacobim(A,b,[0 0 0]',tol)
y1 =
2.0000
3.0000
-1.0000
n1 =
25
GS迭代
function [y,n]=gauseidel(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
G=(D-L)\U
f=(D-L)\b;
y=G*x0+f;
n=1; %迭代次数
while norm(y-x0)>=eps
x0=y;
y=G*x0+f;
n=n+1;
end
----------------计算过程----
>> A=[2 -1 0;-1 3 -1;0 -1 2];
>> b=[1 8 -5]';
>> tol=1e-5;
[y,n]=gauseidel(A,b,[0 0 0]',tol)
G =
0 0.5000 0
0 0.1667 0.3333
0 0.0833 0.1667
y =
2.0000
3.0000
-1.0000
n =
12
function [approx_root,n]=bisect (a,b)
%a,b为根的区间
fa =bifun(a);
fb =bifun(b);
n=0;
while(abs(b-a)> 0.0001)
c=(a+b)/2;
approx_root=c;
fc=bifun(c);
[a,c,b;fa,fc,fb];
n=n+1;
if ( sign(fb) * sign(fc)<=0)
a=c;
fa=fc;
else
b=c;
fb=fc;
end
end
%---------待求解的方程-------------------------
function f=bifun(x)
f=x-tan(x);
------------
[r,n]=bisect (-2,3)
r =
1.5708
n =
16
--------
雅克比迭代
function [y,n]=Jacobim(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
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; %迭代次数
while norm(y-x0)>=eps
x0=y;
y=B*x0+f;
n=n+1;
end
----------------计算过程----
>> A=[2 -1 0;-1 3 -1;0 -1 2];
>> b=[1 8 -5]';
>> tol=1e-5;
>> [y1,n1]=Jacobim(A,b,[0 0 0]',tol)
y1 =
2.0000
3.0000
-1.0000
n1 =
25
GS迭代
function [y,n]=gauseidel(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
G=(D-L)\U
f=(D-L)\b;
y=G*x0+f;
n=1; %迭代次数
while norm(y-x0)>=eps
x0=y;
y=G*x0+f;
n=n+1;
end
----------------计算过程----
>> A=[2 -1 0;-1 3 -1;0 -1 2];
>> b=[1 8 -5]';
>> tol=1e-5;
[y,n]=gauseidel(A,b,[0 0 0]',tol)
G =
0 0.5000 0
0 0.1667 0.3333
0 0.0833 0.1667
y =
2.0000
3.0000
-1.0000
n =
12
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询