小编Joh*_*ith的帖子

当A和B都是大矩阵时,在MATLAB中用AX = B求解X的有效方法

我有这个问题,这需要解决XAX=B.A是15000 x 15000的顺序,是稀疏和对称的.B是15000 X 7500并且不稀疏.解决X的最快方法是什么?

我可以想到两种方式.

  1. 最简单的方式, X = A\B
  2. 使用for循环,

    invA = A\speye(size(A))
    for i = 1:size(B,2)
        X(:,i) = invA*B(:,i);
    end
    
    Run Code Online (Sandbox Code Playgroud)

有没有比上面两个更好的方法?如果没有,我提到的两者之间哪一个最好?

matlab linear-algebra sparse-matrix matrix-inverse factorization

6
推荐指数
1
解决办法
8551
查看次数

给出顶点时计算多面体的质心和体积

给定凸多面体(3D)的顶点的位置,我需要计算多面体的质心和体积.以下代码可在Mathworks网站上获得.

function C = centroid(P)
k=convhulln(P);
if length(unique(k(:)))<size(P,1)
    error('Polyhedron is not convex.');
end
T = delaunayn(P);
n = size(T,1);
W = zeros(n,1);
C=0;
for m = 1:n
    sp = P(T(m,:),:);
    [null,W(m)]=convhulln(sp);
    C = C + W(m) * mean(sp);
end
C=C./sum(W);
return
end
Run Code Online (Sandbox Code Playgroud)

代码很优雅,但速度非常慢.我需要数百次计算数千个多面体的体积和质心.在当前状态下使用此代码是不可行的.有没有人知道更好的方法,或者这个代码可以更快?我可以想到一些微小的变化,例如用mean平均值替换表达式.

performance matlab volume polyhedra centroid

6
推荐指数
1
解决办法
3682
查看次数

求和单元阵列的成员大小

我有一个单元阵列,

a=cell(2,1); 
a{1,1}=[1 2 3];
a{2,1}=[4 5];
Run Code Online (Sandbox Code Playgroud)

我需要计算字段长度的总和a,即答案应该是3+2=5.这可以使用for循环来完成,

sum=0;
for i=1:size(a,1)
    sum = sum + size(a{i},2); 
end
Run Code Online (Sandbox Code Playgroud)

但是,我需要一个没有循环的行命令.有什么想法吗?

arrays matlab

3
推荐指数
2
解决办法
570
查看次数