MATLAB实现高斯列主元消去法的问题
把问号改了之后,在MATLAB中实现高斯列主元消去法解线性方程组functionx=gauss(A,b)[n,n]=size(A);x=zeros(n,1);Aug=[A...
把问号改了之后,在MATLAB中实现高斯列主元消去法解线性方程组
function x = gauss(A,b)
[n,n] = size(A);
x = zeros(n,1);
Aug = [A,b]; % 增广矩阵
for k = 1:n-1
[piv,r] = max(abs(Aug(k:n,k))); % 找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行
if r>k
? % 实施行交换
end
if Aug(k,k)==0, error('?'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
?
?
end
end
% 解上三角方程组
A = Aug(:,1:n); b = Aug(:,n+1);
x(n) = ?;
for k = n-1:-1:1
x(k) = ?;
end
解
A = [10 -7 0
-3 2 6
5 -1 5];
b = [7 4 6]'; 展开
function x = gauss(A,b)
[n,n] = size(A);
x = zeros(n,1);
Aug = [A,b]; % 增广矩阵
for k = 1:n-1
[piv,r] = max(abs(Aug(k:n,k))); % 找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行
if r>k
? % 实施行交换
end
if Aug(k,k)==0, error('?'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
?
?
end
end
% 解上三角方程组
A = Aug(:,1:n); b = Aug(:,n+1);
x(n) = ?;
for k = n-1:-1:1
x(k) = ?;
end
解
A = [10 -7 0
-3 2 6
5 -1 5];
b = [7 4 6]'; 展开
3个回答
展开全部
%%按你的思路修改的,我试了一两个例子,还行。
function x = gauss(A,b)
[n,n] = size(A);
x = zeros(n,1);
Aug = [A,b]; %增广矩阵
for k = 1:n-1
[piv,r] = max(abs(Aug(k:n,k))); %找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行
if r>k
temp=Aug(k,:);
Aug(k,:)=Aug(r,:);
Aug(r,:)=temp;
end
if Aug(k,k)==0, error('对角元出现0'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
Aug(p,:)=Aug(p,:)-Aug(k,:)*Aug(p,k)/Aug(k,k);
end
end
% 解上三角方程组
A = Aug(:,1:n); b = Aug(:,n+1);
x(n) = b(n)/A(n,n);
for k = n-1:-1:1
x(k)=b(k);
for p=n:-1:k+1
x(k) = x(k)-A(k,p)*x(p);
end
x(k)=x(k)/A(k,k);
end
function x = gauss(A,b)
[n,n] = size(A);
x = zeros(n,1);
Aug = [A,b]; %增广矩阵
for k = 1:n-1
[piv,r] = max(abs(Aug(k:n,k))); %找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行
if r>k
temp=Aug(k,:);
Aug(k,:)=Aug(r,:);
Aug(r,:)=temp;
end
if Aug(k,k)==0, error('对角元出现0'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
Aug(p,:)=Aug(p,:)-Aug(k,:)*Aug(p,k)/Aug(k,k);
end
end
% 解上三角方程组
A = Aug(:,1:n); b = Aug(:,n+1);
x(n) = b(n)/A(n,n);
for k = n-1:-1:1
x(k)=b(k);
for p=n:-1:k+1
x(k) = x(k)-A(k,p)*x(p);
end
x(k)=x(k)/A(k,k);
end
展开全部
function
x=gauss_lie(a,b)
%采用高斯列主元法求解方程组ax=b
n=length(b);
p=1:n;lu=a;
y=[];
for
k=1:n
[c,i]=max(abs(lu(k:n,k)));
ik=i+k-1;
if
ik~=k
m=p(k);p(k)=p(ik);p(ik)=m;
ck=lu(k,:);lu(k,:)=lu(ik,:);lu(ik,:)=ck;
end
if
k==n
break;
end
lu(k+1:n,k)=lu(k+1:n,k)/lu(k,k);
lu(k+1:n,k+1:n)=lu(k+1:n,k+1:n)-lu(k+1:n,k)*lu(k,k+1:n);
end
l=diag(ones(n,1))+tril(lu,-1);
u=triu(lu);
y(1)=b(p(1));
for
i=2:n
y(i)=b(p(i))-l(i,1:i-1)*y(1:i-1)';
end
x(n)=y(n)/u(n,n);
for
i=n-1:-1:1
x(i)=(y(i)-u(i,i+1:n)*x(i+1:n)')/u(i,i);
end
x=x';
x=gauss_lie(a,b)
%采用高斯列主元法求解方程组ax=b
n=length(b);
p=1:n;lu=a;
y=[];
for
k=1:n
[c,i]=max(abs(lu(k:n,k)));
ik=i+k-1;
if
ik~=k
m=p(k);p(k)=p(ik);p(ik)=m;
ck=lu(k,:);lu(k,:)=lu(ik,:);lu(ik,:)=ck;
end
if
k==n
break;
end
lu(k+1:n,k)=lu(k+1:n,k)/lu(k,k);
lu(k+1:n,k+1:n)=lu(k+1:n,k+1:n)-lu(k+1:n,k)*lu(k,k+1:n);
end
l=diag(ones(n,1))+tril(lu,-1);
u=triu(lu);
y(1)=b(p(1));
for
i=2:n
y(i)=b(p(i))-l(i,1:i-1)*y(1:i-1)';
end
x(n)=y(n)/u(n,n);
for
i=n-1:-1:1
x(i)=(y(i)-u(i,i+1:n)*x(i+1:n)')/u(i,i);
end
x=x';
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询