小编Ana*_*a M的帖子

如何在重载决策算法中确定歧义?

我正在尝试理解重载解析方法.

为什么这个含糊不清:

void func(double, int, int, double) {}
void func(int, double, double, double) {}

void main()
{
    func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)

但这不是?

void func(int, int, int, double) {}
void func(int, double, double, double) {}

void main()
{
    func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,有2个精确参数匹配,2个转换针对1个完全匹配和3个转换,在第二种情况下,有3个完全匹配,1个转换针对1个完全匹配和3个转换.

那么为什么一个模棱两可而一个不是?这里的逻辑是什么?

c++ overload-resolution

61
推荐指数
2
解决办法
1895
查看次数

SVD Matlab实现

我试着编写将矩阵分解为SVD格式的matlab代码.

"理论":

为了获得U,我找到了AA'的特征向量,为了得到V,我找到了A'A的特征向量.最后,Sigma是与A相同维度的矩阵,对角线上的特征值的根在有序序列中.

但是,它似乎没有正常工作.

A=[2 4 1 3; 0 0 2 1];

% Get U, V
[aatVecs, aatVals] = eig(A*A');
[~, aatPermutation] = sort(sum(aatVals), 'descend');
U = aatVecs(:, aatPermutation);

[ataVecs, ataVals] = eig(A'*A);
[~, ataPermutation] = sort(sum(ataVals), 'descend');
V = ataVecs(:, ataPermutation);

% Get Sigma
singularValues = sum(aatVals(:, aatPermutation)).^0.5;
sigma=zeros(size(A));
for i=1:nnz(singularValues)
    sigma(i, i) = singularValues(i);
end

A
U*sigma*V'
Run Code Online (Sandbox Code Playgroud)

U*sigma*V'似乎以-1的系数返回:

ans =

-2.0000   -4.0000   -1.0000   -3.0000
0.0000    0.0000   -2.0000   -1.0000
Run Code Online (Sandbox Code Playgroud)

导致它的代码或"理论"中的错误是什么?

matlab svd

4
推荐指数
1
解决办法
1344
查看次数

标签 统计

c++ ×1

matlab ×1

overload-resolution ×1

svd ×1