【发布时间】:2014-12-10 22:18:09
【问题描述】:
我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本,用于另一组函数。问题是,MEX 版本给出的结果与原始 m 文件不同。
经过调试,我认为是这个原因,是因为MEX文件和m文件不做矩阵除法(\)相同。或者 MEX 文件首先存在问题。导致矩阵除法所在行的所有变量在两边都是等价的。
这是出现问题的行:
F = (V-U)\(2*U) + I
其中 I 是 V 和 U 大小的单位矩阵。
MEX 文件进行矩阵除法时出现差异的原因是什么,我该如何解决这个问题?这行代码可以不用除法重写吗?
【问题讨论】:
-
哇.. 这确实很奇怪。虽然这很慢,但请尝试这样做:
F = inv(V-U)*(2*U) + I。执行<\>本质上是取左侧的逆矩阵并乘以右侧。<\>运算符通常用于非方阵,以便找到线性方程组的最小二乘解。 -
@rayryeng 我试过这个,不幸的是它不起作用。但是 inv(A) 不会导致矩阵除法吗? inv(A) = A\eye(size(A)) 是否有其他方法可以做到这一点?
-
不一定。
inv(A)自己计算逆矩阵。有一种不同的算法来计算逆矩阵,而不是调用<\>运算符。这两个答案有多大不同? -
这很有趣,因为数字非常小,而且结果矩阵的某些元素是准确的。但一些不正确的可能会有高达 100% 以上的百分比变化
-
这很奇怪。您是否尝试过使用
V和U的已知值以及知道F的结果是什么并比较这两种方法?
标签: matlab matrix mex equation-solving matlab-coder