MATLAB列主元消去法
functionx=gauss(A,b)intAB=[A,b];n=length(b);RA=rank(A);RB=rank(B);d=RB-RA;ifd>0disp('...
function x = gauss(A,b)
int A
B=[A,b];
n=length(b);
RA=rank(A);
RB=rank(B);
d=RB-RA;
if d>0
disp('此方程组无解')
end
if RA==RB&RA~=n
disp('此方程组有无穷解')
end
if RA==RB&RA==n
disp('此方程组有唯一解')
[n,n]=size(A);
x=zeros(n,1);
for k = 1:n-1
[piv,r] = max(abs(B(k:n,k))); %找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行 ,
if r>k
temp=B(k,:);
B(k,:)=B(r,:);
B(r,:)=temp;
end
end
if B(k,k)==0, error('对角元出现0'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
B(p,:)=B(p,:)-B(k,:)*B(p,k)/B(k,k);
end
end
% 解上三角方程组
A =B(:,1:n); b = B(:,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
运行
A=[0.729,0.8100,0.9000;1.000,1.000,1.000;1.331,1.210,1.100];
b=[0.6867;0.8338;1.000];
guass(A,b)
它的答案应该是
x=
0.2246
0.2812
0.3280
不知道是哪儿写错了,求大神帮忙看看 展开
int A
B=[A,b];
n=length(b);
RA=rank(A);
RB=rank(B);
d=RB-RA;
if d>0
disp('此方程组无解')
end
if RA==RB&RA~=n
disp('此方程组有无穷解')
end
if RA==RB&RA==n
disp('此方程组有唯一解')
[n,n]=size(A);
x=zeros(n,1);
for k = 1:n-1
[piv,r] = max(abs(B(k:n,k))); %找列主元所在子矩阵的行r
r = r + k - 1; % 列主元所在大矩阵的行 ,
if r>k
temp=B(k,:);
B(k,:)=B(r,:);
B(r,:)=temp;
end
end
if B(k,k)==0, error('对角元出现0'), end
% 把增广矩阵消元成为上三角
for p = k+1:n
B(p,:)=B(p,:)-B(k,:)*B(p,k)/B(k,k);
end
end
% 解上三角方程组
A =B(:,1:n); b = B(:,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
运行
A=[0.729,0.8100,0.9000;1.000,1.000,1.000;1.331,1.210,1.100];
b=[0.6867;0.8338;1.000];
guass(A,b)
它的答案应该是
x=
0.2246
0.2812
0.3280
不知道是哪儿写错了,求大神帮忙看看 展开
3个回答
展开全部
问题出在点除上(3处),如
B(p,:)=B(p,:)-B(k,:)*B(p,k)/B(k,k); 应为 B(p,:)=B(p,:)-B(k,:)*B(p,k)./B(k,k)
x(n) = b(n)/A(n,n); 应为 x(n) = b(n)./A(n,n);
x(k)=x(k)/A(k,k); 应为 x(k)=x(k)./A(k,k);
>> A=[0.729,0.8100,0.9000;1.000,1.000,1.000;1.331,1.210,1.100];
>>b=[0.6867;0.8338;1.000];
>>gauss(A,b)
ans =
A^2/2
此方程组有唯一解
x =
0.2245
0.2814
0.3279
B(p,:)=B(p,:)-B(k,:)*B(p,k)/B(k,k); 应为 B(p,:)=B(p,:)-B(k,:)*B(p,k)./B(k,k)
x(n) = b(n)/A(n,n); 应为 x(n) = b(n)./A(n,n);
x(k)=x(k)/A(k,k); 应为 x(k)=x(k)./A(k,k);
>> A=[0.729,0.8100,0.9000;1.000,1.000,1.000;1.331,1.210,1.100];
>>b=[0.6867;0.8338;1.000];
>>gauss(A,b)
ans =
A^2/2
此方程组有唯一解
x =
0.2245
0.2814
0.3279
展开全部
function [RA,RB,n,X]=gaus(A,b)
%
%
B=[A b];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('请注意:因为RB~=RA,所以此方程无解.')
return
end
if RA==RB
if RA==n
disp('请注意:因为RA=RB=n,所以此方程组有唯一解.')
X=zeros(n,1);C=zeros(1,n+1);
for p=1:n-1
for k=p+1:n
m=B(k,p)/B(p,p);
B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);
end
end
b=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')
end
end
这个程序没问题用这个吧
%
%
B=[A b];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('请注意:因为RB~=RA,所以此方程无解.')
return
end
if RA==RB
if RA==n
disp('请注意:因为RA=RB=n,所以此方程组有唯一解.')
X=zeros(n,1);C=zeros(1,n+1);
for p=1:n-1
for k=p+1:n
m=B(k,p)/B(p,p);
B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);
end
end
b=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')
end
end
这个程序没问题用这个吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
经本人亲自测试,即使经过改正,你这个程序仍然是错的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询