[踩坑]特征值计算

最近尝试将一个MATLAB程序通过codegen编译成C++库调用,好不容易编译通过但是运行结果不对,一步步跟踪下来发现是eig函数的问题,记录一下。

现象如同这个例子Matlab Codgen eig() function - strange behaviour。原本在MATLAB中工作正常的程序,编译成库后由于eig函数的结果出现了不同的排序方式和符号,导致最终的错误。例子中的回答也给出了解决方法:手动再对特征值和特征向量进行规范化处理——

1.Normalize all eigenvectors to length 1 (example: [-0.4472,-0.4472,-0.4472,0.4472,0.4472]’ instead of [-1,-1,-1,1,1]‘). Could be achieved using b=bsxfun(@rdivide,b,sqrt(sum(b.^2,1))).
2.For each eigenvectors with a negative value in the first component, take the negative value. (example: [0.4472,0.4472,0.4472,-0.4472,-0.4472]’ instead of [-0.4472,-0.4472,-0.4472,0.4472,0.4472]'). Could be achieved using b=bsxfun(@times,sign(b(1,:)),b).
3.Sort eigenvectors and eigenvalues in ascending order of the eigenvalues.
[V,D] = eig(A)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值