Matlab-在不使用for语句的情况下,将向量减去矩阵的每一行

Matlab-在不使用for语句的情况下,将向量减去矩阵的每一行,matlab,matrix,vector,vectorization,subtraction,Matlab,Matrix,Vector,Vectorization,Subtraction,我有一个考试的代码,他们想让我做的是在没有第二个“for”语句的情况下实现同样的事情,以获得更好的成绩 代码是: piv=1:n;%//位置向量 对于k=1:n-1%//对于每列: if((max(abs(A(piv(k:n,k)))>eps(normA))%//如果枢轴为非零 [~,I]=max(A(piv(k:n),k));%//查找最大索引 I=I+(k-1); piv([k,I])=piv([I,k]);%//交换轴心元素 A(piv(k+1:n),k)=A(piv(k+1:n),k)/

我有一个考试的代码,他们想让我做的是在没有第二个“for”语句的情况下实现同样的事情,以获得更好的成绩

代码是:

piv=1:n;%//位置向量
对于k=1:n-1%//对于每列:
if((max(abs(A(piv(k:n,k)))>eps(normA))%//如果枢轴为非零
[~,I]=max(A(piv(k:n),k));%//查找最大索引
I=I+(k-1);
piv([k,I])=piv([I,k]);%//交换轴心元素
A(piv(k+1:n),k)=A(piv(k+1:n),k)/A(piv(k),k);%//计算乘数并将其保存在列中
对于j=k+1:n
A(piv(j),k+1:n)=A(piv(j),k+1:n)-(A(piv(k),k+1:n)*A(piv(j),k));%//乘以乘数,然后用行减去它们
结束
结束
结束
这是高斯分解法,但没关系,问题是我需要有相同的结果,没有第二个e和j变量。

你当然可以用它杀死最里面的循环。我让你们向你们的教授解释它是如何工作的。浏览bsxfun文档将是一个好主意,在这个过程中,您可能会学到一些东西。下面是实现-

parte2 = bsxfun(@times,A(piv(k),k+1:n),A(piv(k+1:n),k))
A(piv(k+1:n),k+1:n) = A(piv(k+1:n),k+1:n) - parte2

z=x-one(大小(x,1),1)*y
他们希望您根据使用情况实施householder变换或givens旋转。我想对其他用户说,这非常好,工作非常完美!但她上课时没给我们看什么,我给她发了一封电子邮件,问她怎么想。。。我希望她不要更“基本”的东西。那样的话,我就不知道该怎么办了。无论如何谢谢你@我真的很想听听她对这件事的看法!她在课堂上谈过bsxfun吗?她期望什么样的矢量化技术?我的老师提出了这个解决方案:A(piv(k+1:n),k+1:n)=A(piv(k+1:n),k+1:n)-A(piv(k+1:n),k)*A(piv(k),k+1:n)@朱塞佩特拉帕索啊,太好了!矩阵乘法
A(piv(k+1:n),k)*A(piv(k),k+1:n)
与解决方案中列出的bsxfun用法相同。所以,她真的很聪明!:)