相关疑难解决方法(0)

加权Gram-Schmidt正交化的MATLAB优化

我在MATLAB中有一个函数,它执行Gram-Schmidt正交化,并对内积进行了非常重要的加权(我不认为MATLAB的内置函数支持这一点).据我所知,这个功能效果很好,但是在大型矩阵上它太慢了.改善这种情况的最佳方法是什么?

我已经尝试转换为MEX文件,但我失去了与我正在使用的编译器的并行化,因此它更慢.

我想在GPU上运行它,因为元素倍增是高度并行化的.(但我更喜欢实现方便携带)

任何人都可以将此代码矢量化或加快速度吗?我不确定如何优雅地做到这一点......

我知道这里的stackoverflow思想是惊人的,认为这是一个挑战:)

功能

function [Q, R] = Gram_Schmidt(A, w)
    [m, n] = size(A);
    Q = complex(zeros(m, n));
    R = complex(zeros(n, n));
    v = zeros(n, 1);

    for j = 1:n
        v = A(:,j);
        for i = 1:j-1
            R(i,j) = sum(   v    .* conj( Q(:,i) ) .* w ) / ...
                     sum( Q(:,i) .* conj( Q(:,i) ) .* w );
            v = v - R(i,j) * Q(:,i);
        end
        R(j,j) = norm(v);
        Q(:,j) = v / R(j,j);
    end …
Run Code Online (Sandbox Code Playgroud)

optimization performance matlab linear-algebra vectorization

19
推荐指数
2
解决办法
1829
查看次数

将捕获的坐标转换为屏幕坐标

我认为这可能是一个简单的数学问题,但我不知道现在发生了什么.

我在网络摄像头上捕捉"标记"的位置,我有一个标记及其坐标列表.四个标记是工作表面的外角,第五个(绿色)标记是小部件.像这样:

替代文字http://i37.tinypic.com/308cjtv.jpg

这是一些示例数据:

  • 左上标记(a = 98,b = 86)
  • 右上标记(c = 119,d = 416)
  • 左下标记(e = 583,f = 80)
  • 右下标记(g = 569,h = 409)
  • 小部件标记(x = 452,y = 318)

我想以某种方式将网络摄像头的小部件位置转换为坐标以显示在屏幕上,其中左上角是0,0而不是98,86并且以某种方式考虑了网络摄像头捕获的扭曲角度.

我甚至会从哪里开始?任何帮助赞赏

math image-processing linear-algebra computer-vision

11
推荐指数
2
解决办法
3763
查看次数

matlab/octave - 广义矩阵乘法

我想做一个函数来推广矩阵乘法.基本上,它应该能够进行标准矩阵乘法,但它应该允许通过任何其他函数更改两个二元运算符product/sum.

目标是在CPU和内存方面尽可能高效.当然,它总是比A*B效率低,但操作员的灵活性才是最重要的.

以下是我在阅读各种 有趣 线程后可以提出的一些命令:

A = randi(10, 2, 3);
B = randi(10, 3, 4);

% 1st method
C = sum(bsxfun(@mtimes, permute(A,[1 3 2]),permute(B,[3 2 1])), 3)
% Alternative: C = bsxfun(@(a,b) mtimes(a',b), A', permute(B, [1 3 2]))

% 2nd method
C = sum(bsxfun(@(a,b) a*b, permute(A,[1 3 2]),permute(B,[3 2 1])), 3)

% 3rd method (Octave-only)
C = sum(permute(A, [1 3 2]) .* permute(B, [3 2 1]), 3)

% 4th method (Octave-only): multiply nxm A with nx1xd B to …
Run Code Online (Sandbox Code Playgroud)

matlab matrix octave matrix-multiplication

10
推荐指数
1
解决办法
1785
查看次数

LAPACK SVD(奇异值分解)

你知道任何使用LAPACK的例子来计算SVD吗?

linear-algebra svd lapack

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

在哪里可以找到 Matlab 中的英特尔 MKL

我有一个 MATLAB 订阅,我读到 MATLAB 使用英特尔 MKL 库,但我不确定在哪里可以找到与英特尔 MKL 库相对应的所有 DLL/文件。我可以在文档中找到任何提到它们位置的地方。

谢谢

matlab intel-mkl

5
推荐指数
1
解决办法
3285
查看次数