⑴ 用高斯消元法解線性方程組 的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