-
问题出在点划分(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