#7 更新 'test3.m'

Closed
liuy wants to merge 1 commits from liuy-patch-7 into master
  1. +40
    -40
      test3.m

+ 40
- 40
test3.m View File

@@ -1,40 +1,40 @@
%将方程组第一行与第二行交换位置,使得系数矩阵为对称的。
A=[3,1;1,-1];
b=[12;8];
%如果不进行矩阵的行变换使矩阵变为对称矩阵,则无法得到正确结果
% A=[1,-1;3,1];初始情况的系数矩阵
% b=[8;12];
x=[0;0];%起始点
e=0;
X=cg_solver(A,b,x,e);
fprintf('方程组的根为:\n')
fprintf('x1=%.2f\n',X(1))
fprintf('x2=%.2f\n',X(2))
function[x]=cg_solver(A,b,x0,epsilon,max)
x=x0; %初始点
i=0;
r=b-A*x; % 计算残差
d=r; %方向
delta_new=r'*r; %残差的内积
delta0=delta_new;
if nargin < 5
max = 10;%设置默认最大迭代次数
end
while(i<max)&&(delta_new/delta0>epsilon^2)
q=A*d;
alpha=delta_new/(d'*q); %计算系数 alpha
x=x+alpha*d; %迭代一步(向下走一步)
r=b-A*x; % 更新计算残差
delta_old=delta_new;
delta_new=r'*r; %更新残差的内积
beta=delta_new/delta_old; %更新下一步方向的系数beta
d=r+beta*d; %更新下一步的方向
i=i+1;
end
end
%将方程组第一行与第二行交换位置,使得系数矩阵为对称的。
A=[3,1;1,-1];%经变换后的系数矩阵,为正定的
b=[12;8];
%如果不进行矩阵的行变换使矩阵变为对称矩阵,则无法得到正确结果
% A=[1,-1;3,1];初始情况的系数矩阵
% b=[8;12];
x=[0;0];%起始点
e=0;
X=cg_solver(A,b,x,e);
fprintf('方程组的根为:\n')
fprintf('x1=%.2f\n',X(1))
fprintf('x2=%.2f\n',X(2))
function[x]=cg_solver(A,b,x0,epsilon,max)
x=x0; %初始点
i=0;
r=b-A*x; % 计算残差
d=r; %方向
delta_new=r'*r; %残差的内积
delta0=delta_new;
if nargin < 5
max = 10;%设置默认最大迭代次数
end
while(i<max)&&(delta_new/delta0>epsilon^2)
q=A*d;
alpha=delta_new/(d'*q); %计算系数 alpha
x=x+alpha*d; %迭代一步(向下走一步)
r=b-A*x; % 更新计算残差
delta_old=delta_new;
delta_new=r'*r; %更新残差的内积
beta=delta_new/delta_old; %更新下一步方向的系数beta
d=r+beta*d; %更新下一步的方向
i=i+1;
end
end

Loading…
Cancel
Save