-
問題出在點劃分(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=[,b=[;;gauss(a,b)
ans =a^2/2
這個方程組有乙個獨特的解。 x =
-
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
endif 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);
endend
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);
endelse
disp('請注意:因為 ra=rbendend
這個程式沒有問題。
-
經過自己測試,即使經過更正,您的程式仍然是錯誤的。
-
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;
endif k==n
break;
endlu(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);
endl=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)';
endx(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);
endx=x';
-
函式 x=gauss pivot(a,b)% 通過消除高斯列的主元素 ax=b%x 來求解線性方程組,並且是乙個未知向量。
n=length(b);
x=zeros(n,1);
c=zeros(1,n);
d1=0for i=1:n-1
max=abs(a(i,i));
m=i;for j=i+1:n
if maxmax=abs(a(j,i));
m=j;endend
if(m~=i)
for k=i:n
c(k)=a(i,k);
a(i,k)=a(m,k);
a(m,k)=c(k);
endd1=b(i);
b(i)=b(m);
b(m)=d1;
endfor k=i+1:n
for j=i+1:n
a(k,j)=a(k,j)-a(i,j)*a(k,i)/a(i,i);
endb(k)=b(k)-b(i)*a(k,i)/a(i,i);
a(k,i)=0;
endend
回顧性求解。 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);
endx(i)=(b(i)-sum)/a(i,i);end
-
建議房東先了解尋求反轉高斯方法的想法,然後再回過頭來看這個程式,這應該不是什麼大問題。
-
操作步驟如下。
函式 x=gauss(a,b) %Gausss 求解方程組%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;
endfor 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;
endend
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
如果 a(n,n)==0
return
endx(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);
以下是結束呼叫的示例:
a=[2,-1,3;4,2,5;1,2,0];
b=[1;4;7];
x=gauss(a,b)
x =9 -1 -6
-
matalb 下標從 1 開始;
**懶得看,直接給你寫乙個,你自己看看吧,我們最近剛好學這個,我寫來試試。
高斯消元法是對線性方程組的增強矩陣進行直線初階變換,將a變成上三角矩陣,從而得到三角方程組,然後以回顧的方式求解。
乙個下午後,終於完成了,你可以自己嘗試一下。
-
function [a,det]=gajo_inv(a)
Gauss-Jordan 列主元素消除了求方陣逆 p178 的方法
a,det]=gajo_inv(a)
反矩陣是必需的。
det 返回按需行列式。
A 返回逆矩陣,放置在 a 中。
n=size(a);
if n(1)~=n(2)
error('不是方陣! ');
endn=n(1);det=1;
flag=1:n;
for k=1:n
t=find(abs(a(k:n,k))==max(abs(a(k:n,k)))))。
t=t(1)+k-1;
flag(k)=t;
if t~=k
p=a(k,:)a(k,:)=a(t,:)a(t,:)=p;% 交換線。
det=-det;
endif a(k,k)==0
error('矩陣是不可逆的! ');
enddet=det*a(k,k);
h=1/a(k,k); a(k,k)=h;
a([1:k-1 k+1:n],k)=a([1:k-1 k+1:n],k)*(h);
for i=1:n
if i~=k
a(i,[1:k-1 k+1:n])=a(i,[1:k-1 k+1:n])+a(k,[1:k-1 …
k+1:n])*a(i,k);消除。
end- 31 -
enda(k,[1:k-1 k+1:n])=a(k,[1:k-1 k+1:n])*h;
endfor k=n-1:-1:1
t=flag(k);
如果 k = t % 調整列 A(因為原始矩陣換行)。
p=a(:,t); a(:,t)=a(:,k); a(:,k)=p;
endend
-
主要有兩個要素的主要素方法,乙個完整的主要素方法,一般來說,該方法的主體能夠保證演算法的穩定性,所謂過程的穩定性,演算法的計算誤差(這種直接方法的消除誤差主要是指捨入誤差是由於計算機的字長有限)是可以控制的, 完整的主元法是主元演算法比較穩定的主元法,但是計算金額的方法比主元法多,只在每次消除同一列的元數上進行比較,做比對序號的線性方程,n是同階的, 每次使用全主元法消除係數矩陣中所有元素的比較時,amoun
快手穿雲箭是新增的送禮功能,粉絲們可以送給主播,幫主播拉人氣,送穿雲箭可以在公共螢幕上看到,不過穿雲箭還是有點貴,乙個2888個快幣,相當於288元人民幣,所以看來能在公眾面前看到是有原因的, 而能刷上穿雲箭的,都是大錢人 >>>More
樓上的人玩魔獸爭霸,你得到乙個inter CPU,他們說不要整合顯示卡的主機板,你給別人買乙個g41,我汗流浹背。 >>>More
中央處理器: Intel Core i5 4590 1 1220
主機板 華碩 B85M-Gamer 1 699 >>>More