⑴ 用高斯消元法解线性方程组 的MATLAB程序
1、下图是需要求解的线性方程组。
⑵ matlab中用高斯消元法接方程组程序
你的方程不对,
下面是程序:用Gauss 消去法求解线性方程组A*x=b
将下面程序复制,保存成Gauss_pivot.m文件
function x=Gauss_pivot(A,b)
% A:系数矩阵
% b:方程组的右端向量
n=length(b);
x=zeros(n,1);c=zeros(1,n);d1=0;
for i=1:n-1
max=abs(A(i,i));
m=i;
for j=i+1:n
if max<abs(A(j,i));
m=j;
end
end
if m~=1
for k=i:n
c(k)=A(i,k);
A(i,k)=A(m,k);
A(m,k)=c(k);
end
d1=b(i);
b(i)=b(m);
b(m)=d1;
end
for k=i+1:n
for j=i+1:n
A(k,j)=A(k,j)-A(i,j)*A(k,j)/A(i,i);
end
b(k)=b(k)-b(i)*A(k,j)/A(i,i);
A(k,i)=0;
end
end
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+ A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
直接调用Gauss_pivot(A,b)即可!!
祝愿朋友好运!
⑶ MATLAB 如何使用高斯消去法解出方程式
function x = MyGauss(A,B)
% 高斯消去法解方程 Ax = B
NA = size(A,2);
[NB1,NB] = size(B);
if NB1 ~= NA,
error('A 和 b 维数不匹配');
end
N = NA + NB;
AB = [A(1:NA,1:NA) B(1:NA,1:NB)]; % 增广矩阵
epss = eps*ones(NA,1);
for k = 1:NA
[akk,kx] = max(abs(AB(k:NA,k))./ ...
max(abs([AB(k:NA,k+1:NA) epss(1:NA-k+1)]'))');
if akk < eps,
error('没有唯一解');
end
mx = k + kx -1;
if kx > 1
tmp_row = AB(k,k:N);
AB(k,k:N) = AB(mx,k:N);
AB(mx,k:N) = tmp_row;
end
% 高斯消元
AB(k,k+1:N) = AB(k,k+1:N)/AB(k,k);
AB(k,k) = 1;
for m = k+1:NA
AB(m,k+1:N) = AB(m,k+1:N) - AB(m,k)*AB(k,k+1:N);
AB(m,k) = 0;
end
end
x(NA,:) = AB(NA,NA+1:N);
for m = NA-1:-1:1
x(m,:) = AB(m,NA+1:N)-AB(m,m+1:NA)*x(m+1:NA,:);
end
end
命令行
>>A = [10 2 -1; -3 -6 2; 1 1 5 ];
>>b = [27 -61.5 -21.5]';
>>x = MyGauss(A,b)
x =
0.500000000000000
7.999999999999999
-6.000000000000000
验证:
>>A*x
ans =
27.000000000000000
-61.499999999999993
-21.500000000000000
⑷ 找列主元高斯消去法来求解线性代数方程组解的matlab程序
高斯列主元消去法
function X=Gauss_pivot(A,B)
% 用Gauss列主主元消去法解线性方程组AX=B
%X是未知向量
n=length(B);
X=zeros(n,1);
c=zeros(1,n);
d1=0
for i=1:n-1
max=abs(A(i,i));
m=i;
for j=i+1:n
if max<abs(A(j,i))
max=abs(A(j,i));
m=j;
end
end
if(m~=i)
for k=i:n
c(k)=A(i,k);
A(i,k)=A(m,k);
A(m,k)=c(k);
end
d1=B(i);
B(i)=B(m);
B(m)=d1;
end
for k=i+1:n
for j=i+1:n
A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
end
B(k)=B(k)-B(i)*A(k,i)/A(i,i);
A(k,i)=0;
end
end
%回代求解
X(n)=B(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*X(j);
end
X(i)=(B(i)-sum)/A(i,i);
End
⑸ matlab 编写高斯消去法程序代码
用高斯消元法解线性方程组 的MATLAB程序
输入的量:系数矩阵 和常系数向量 ;
输出的量:系数矩阵 和增广矩阵 的秩RA,RB, 方程组中未知量的个数n和有关方程组解 及其解的信息.
function [RA,RB,n,X]=gaus(A,b)
B=[A b]; n=length(b); RA=rank(A);
RB=rank(B);ca=RB-RA;
if ca>0,
disp('请注意:因为RA~=RB,所以此方程组无解.')
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
⑹ 如何在MATLAB用高斯消去法求解线性方程组程序
程序如下function
x=gauss(A,b)
%高斯求解方程组%x=gauss(A,b)n=length(A);a=[A,b];for
k=1:n-1
maxa=max(abs(a(k:n,k)));
if
maxa==0
return;
end
for
i=k:n
if
abs(a(i,k))==maxa
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;
end
end
for
i=k+1:n
l(i,k)=a(i,k)/a(k,k);
a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1);
endend%回代if
a(n,n)==0
returnendx(n)=a(n,n+1)/a(n,n);for
i=n-1:-1:1
x(i)=(a(i,n+1)-sum(a(i,i+1:n).*x(i+1:n)))/a(i,i);end
调用示例如下:>>
A=[2,-1,3;4,2,5;1,2,0];
>>
b=[1;4;7];
>>
x=gauss(A,b)x
=
9
-1
-6
⑺ matlab中用的高斯消元法怎么使用!
用matlab实现高斯列主元消去法解线性方程及LU分解
function x=gaussLinearEquation(A,b)
%高斯法解线性方程Ax=b
disp('原方程为AX=b:')
A
b
disp('------------------------')
n=length(b);
eps=10^-2;
for k=1:n-1
%找列主元
[mainElement,index]=max(abs(A(k:n,k)));
index=index+k-1;%index在A(k:n,k)中的行号转换为在A中的行号
if abs(mainElement)<eps
disp('列元素太小!!');
break;
elseif index>k
%列主元所在行不是当前行,将当前行与列主元所在行交换
temp=A(k,:);
A(k,:)=A(index,:);
A(index,:)=temp;
end
%消元
for i=k+1:n
m(i,k)=A(i,k)/A(k,k);%A(k,k)将A(i,k)消为0所乘系数
A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n);%第i行消元处理
b(i)=b(i)-m(i,k)*b(k);%还有b也需要处理!!
end
end
disp('消元后所得到的上三角阵是')
A
%回代
b(n)=b(n)/A(n,n);
for i=n-1:-1:1
%sum(A(i,i+1:n).*b(i+1:n)')表示已知
b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)'))/A(i,i);
end
clear x;
x=b;
disp('AX=b的解x是')
x
用法:
在控制台输入:
A=[1.003 0.333 1.504 -0.333;
-2.011 1.455 0.506 2.956;
4.329 -1.952 0.006 2.087;
5.113 -4.004 3.332 -1.112];
b=[ 3.005,5.407,0.136,3.772 ]';
执行gaussLinearEquation(A,b);即可得到结果。
⑻ 求用MATLAB写一个高斯消元法的程序
function[x,XA]=Gauss(A,b)
N=size(A);
n=N(1);
index=0;
pos=zeros(n,1);
B=A;
fori=1:n
me=max(abs(B(1:n,i)));%选取列主元
fork=1:n
if(abs(A(k,i))==me)
index=k;
pos(i,1)=k;%保存列主元所在的行号
break;
end
end
m=A(index,i);
forj=1:n
if(j~=index)
l=A(j,i);
A(j,1:n)=A(j,1:n)-l*A(index,1:n)/m;
b(j)=b(j)-l*b(index)/m;%消元
end
end
B=A;
fork=1:n
if(pos(k,1)~=0)
B(pos(k,1),1:n)=0;%避免列主元在同一行
end
end
end
XA=A;
fori=1:n
x(i,1)=b(pos(i,1))/A(pos(i,1),i);%求解
end
测试用例:
>> A=magic(3);x=ones(3,1);b=A*x
b =
15
15
15
>> xx=Gauss(A,b)
xx =
1
1
1
>> xx-x
ans =
0
0
0
>>
⑼ 用matlab 编写高斯顺序消元法求解下面方程组的程序及并计算结果
function [x,XA]=GaussXQByOrder(A,b)
%高斯顺序消元法
N = size(A);
n = N(1);
for i=1:(n-1)
for j=(i+1):n
if(A(i,i)==0)
disp('对角元素为0!'); %防止对角元素为0
return;
end
l = A(j,i);
m = A(i,i);
A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; %消元方程
b(j)=b(j)-l*b(i)/m;
end
end
x=SolveUpTriangle(A,b); %通用的求上三角系数矩阵线性方程组的函数
XA = A; %消元后的系数矩阵
function x=SolveUpTriangle(A,b)
N=size(A);
n=N(1);
for i=n:-1:1
if(i<n)
s=A(i,(i+1):n)*x((i+1):n,1);
else
s=0;
end
x(i,1)=(b(i)-s)/A(i,i);
end
程序如上,自己算吧。这个东西应该尝试自己编程
⑽ 用matlab程序法编出高斯消元法
昨天才回答过这个问题..你可以再搜搜的Gauss消去法的分析。其包括两个过程:消去过程:把方程组系数矩阵A化为同解的上三角矩阵;回代过程:按相反的顺序,从xn至x1逐个求解上三角方程组。
%高斯消去法的MATLAB程序function
x=gauss(a,b);
%编写高斯消去法函数%a表示方程组的系数矩阵,b表示方程组的值%X表示最终的输出结果,即方程组的解n=length(b);
%计算方程组的维数%下面的程序在不断的消去,直到变成a变成上三角矩阵未知
for
k=1:n-1
for
i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for
j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
b(i)=b(i)-a(i,k)*b(k);
end
end
%表示高斯消去法的回带过程x=zeros(n,1);x(n)=b(n)/a(n,n);
for
k=n-1:-1:1
s=b(k);
for
j=k+1:n
s=s-a(k,j)*x(j);
end
x(k)=s/a(k,k);end实例验证:
%调用编好的消去法函数>>
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];gauss(A,B)ans
=
3.0000
-1.5517
0.0345
>>
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];x=gauss(A,B)
x
=
3.0000
-1.5517
0.0345
>>
A*x
%反代求解进行比较
ans
=
0.0000
3.00002.0000