谁能帮我编一个线性方程Ax=b的共轭梯度法的程序?谢谢了
发布网友
发布时间:2022-05-12 16:33
我来回答
共2个回答
热心网友
时间:2023-10-13 17:15
function [x,n]= conjgrad (A,b,x0) %共轭梯度法求线性方程组Ax=b的解
r1 = b-A*x0;
p = r1;
n = 0;
for i=1:rank(A) %以下过程可参考算法流程
if(dot(p,A*p) < 1.0e-50) %循环结束条件
break;
end
alpha = dot(r1,r1)/dot(p,A*p);
x = x0+ alpha*p;
r2 = r1- alpha*A*p;
if(r2 < 1.0e-50) %循环结束条件
break;
end
belta = dot(r2,r2)/dot(r1,r1);
p = r2+belta*p;
n = n + 1;
end
function [x,n]= preconjgrad (A,b,x0,M,eps) %预处理共轭梯度法求线性方程组Ax=b的解
if nargin == 4
eps = 1.0e-6;
end
r1 = b-A*x0;
iM = inv(M);
z1 = iM*r1;
p = z1;
n = 0;
tol= 1;
while tol>=eps
alpha = dot(r1,z1)/dot(p,A*p);
x = x0 + alpha*p;
r2 = r1 - alpha*A*p;
z2 = iM*r2;
belta = dot(r2,z2)/dot(r1,z1);
p = z2+belta*p;
n = n + 1;
tol = norm(x-x0);
x0 = x; %更新迭代值
r1 = r2;
z1 = z2;
end
热心网友
时间:2023-10-13 17:15
真不好意思.我还没学这个东西呢
要是我懂的话我一定帮你,所以我只能说对不起了