jacobi迭代法线性方程组求解.doc
文本预览下载声明
《MATLAB课程设计实践》课程考核
编程实现以下科学计算算法,并举一例应用之。 (参考书籍《精通MATLAB科学计算》,王正林等著,电子工业出版社,2009年)
“jacobi迭代法线性方程组求解”
算法说明:
如果系数矩阵的主对角元全不为0,在上节A的分解中取
Q=D
C=D-A
其中D是由A的主对角元素组成的对角阵,则有,迭代公式为:
这种迭代方法称为Jacobi迭代法。
在MATLAB中编程实现的Jacobi迭代法函数为:jacobi。
功能:用Jacobi迭代法求线性方程组Ax=b的解
调用格式:〔x,n〕=jacobi(A,b,x0,eps,varargin)
其中,A为线性方程组的系数矩阵;
b为线性方程组中常数向量;
x0为迭代初始向量;
eps为解的精度控制(此参数可选);
varargin为迭代步数控制(此参数可选);
x为线性方程组的解;
n为求出所需精度的解实际的迭代步数。
流程图:
Jacobi迭代法的MATLAB程序代码:
function[x,n]=jacobi(A,b,x0,eps,varargin)
%采用Jacobi迭代法求线性方程组Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组的常数向量:b
%迭代初始向量:x0
%解的精度控制:eps
%迭代步数控制:varargin
%线性方程组的解:x
%求出所需精度的解实际的迭代步数:n
if nargin==3
eps=1.0e-6;
M=200;
elseif nargin3
return
elseif nargin==5
M=varargin{1};
end
D=diag(diag(A)): %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1; %迭代次数
%迭代过程
while norm(x-x0)=eps
x0=x;
x=B*x0+f;
n=n+1;
if(n=M)
disp(‘warning:迭代次数太多,可能不收敛!’);
return;
end
end
例题:
Jacobi迭代法求解线性方程组实例。用Jacobi迭代法求解以下线性方程组,
解:用jacobi迭代法求解,在MATLAB命令窗口中输入求解程序:
A=[0.9889 -0.0005 -0.0002;
-0.0046 0.9946 0.0077;
-0.0002 0.0092 0.9941];
b=[1 0 1]’;
x0=ones(3,1);
[x,n]=jacobi(A,b,x0)
输出的计算结果为:
x=
1.0114
-0,0031
1.0062
输出的迭代次数为:
n=
4
可见,经过4步迭代,Jacobi法求出了方程组的解为:
[]=[1.0114,-0.0031,1.0062]
2、编程解决以下科学计算问题。
如图所示电路,已知。
流程图:
源代码:
w=[eps,1,2]; %按输入信号的频率将信号分类
us=[10,10,0];
Is=[5,0,5];
z1=1./(0.5*w*j); %电容在不同频率的输入信号下产生的对应抗阻
z2=[2,2,2]; %电阻2在不同频率的输入信号下产生的对应抗阻
z3=[2,2,2]; %电阻3在不同频率的输入信号下产生的对应抗阻
z4=1*w*j; %电感在不同频率的输入信号下产生的对应抗阻
uoc=(z2./(z1+z2)-z4./(z3+z4)).*us; %电压源在bd点产生的等效电压
Zeq=z3.*z4./(z3+z4)+z1.*z2./(z1+z2); %求等效电阻
u=Is.*Zeq+uoc; %bd两点间的电压值
disp(w um phi) %显示各分量的值
disp([w,abs(u),angle(u)*180/pi])
结果如图所示
则
已知,
显示全部