matlab - 对称矩阵乘积不是对称的
问题描述
当我们有两个对称矩阵x和y时,矩阵z = xyx理论上也是对称的。然而,这在 Matlab 中并不完全正确:
x = randn(3);
y = randn(3);
x = x*x';
y = x*x';
z = x*y*x;
issymetric(z)
为什么会发生这种情况,我该怎么办?既然不想做
z = .5*(z+z')
这个stackoverflow问题的所有答案都不令人满意。
解决方案
问题是 Matlab 不能精确地执行计算,因此浮点计算的有限精度会引入一些截断误差。
如果您使用符号数学(没有截断,精确)运行示例,您会看到它z
实际上是对称的。
x = sym(randn(3));
y = sym(randn(3));
x = x*x';
y = y*y';
z = x*y*x;
% issymmetric does not take symbolic expressions as argument, convert to double
issymmetric(double(z))
由于您现在在最后而不是在中间步骤中进行双重转换,因此矩阵将保持对称。
推荐阅读
- android - Wear 手表上不显示嵌入式 Wear 应用
- javascript - 服务工作者不返回自定义离线页面,而是返回默认的“离线”页面
- javascript - React Redux -> 如何使用 UUID 为我的产品提供唯一 ID,然后使用该 ID 从购物车中删除它们?
- ruby-on-rails - 在启动 Rails 应用程序或中止时检查环境变量是否存在
- c++ - Apple clang 和 C++20 运算符歧义与继承的比较运算符
- spring-boot - Spring Boot 资源服务器和 Keycloak 范围与角色
- php - 如何用 axios 调用 php 文件?
- javascript - 如何检测 webview 是否已经加载了我想要的页面
- javascript - 从 React.js 到节点后端的休息调用错误
- sql - 试图创建一个返回不正确语法错误的过程