相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

为什么在MATLAB中24.0000不等于24.0000?

我正在编写一个程序,我需要删除存储在矩阵中的重复点.问题在于,当检查这些点是否在矩阵中时,MATLAB不能在矩阵中识别它们,尽管它们存在.

在以下代码中,intersections函数获取交集点:

[points(:,1), points(:,2)] = intersections(...
    obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ...
    [vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]);
Run Code Online (Sandbox Code Playgroud)

结果:

>> points
points =
   12.0000   15.0000
   33.0000   24.0000
   33.0000   24.0000

>> vertex1
vertex1 =
    12
    15

>> vertex2    
vertex2 =
    33
    24
Run Code Online (Sandbox Code Playgroud)

应从结果中消除两点(vertex1vertex2).它应该通过以下命令完成:

points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);
Run Code Online (Sandbox Code Playgroud)

在这之后,我们有了这个意想不到的结果:

>> points
points =
   33.0000   24.0000
Run Code Online (Sandbox Code Playgroud)

结果应该是一个空矩阵.如你所见,第一对(或第二对)[33.0000 24.0000]已被淘汰,但不是第二对.

然后我检查了这两个表达式:

>> points(1) ~= vertex2(1)
ans …
Run Code Online (Sandbox Code Playgroud)

floating-point precision matlab

67
推荐指数
4
解决办法
2万
查看次数

Matlab采用Vandermonde矩阵的逆

我有一个矩阵M,它有576行和15列.第一列是全部1.第二列从1开始,逐一增加到576.第三列是第二列的平方.第四列是第二列的第三列.第五列是第二列的第四列.它是这样的.最后第十五列是第二列的第十四次幂.操作是将矩阵M的转置与其自身相乘并取结果的倒数.然而,Matlab会发出这样的警告; 警告:矩阵接近单一或严重缩放.结果可能不准确.RCOND = 1.889839e-79.这是一种反过来的方式吗?我也试过这个操作符\但是发生了同样的警告.

matlab matrix matrix-inverse

0
推荐指数
1
解决办法
424
查看次数

矩阵乘法和差异

我需要用MATLAB计算这个等式:

在此输入图像描述

哪里Sn可以是矩阵或标量,我试图用它

S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4
Run Code Online (Sandbox Code Playgroud)

问题是它没有给我正确的结果和它似乎与差异的问题 在此输入图像描述 但我无法理解为什么给我错误的结果.

结果应该是这个

在此输入图像描述

但是MATLAB的结果是

在此输入图像描述

我不明白为什么这两个结果不一样.我想到的唯一方法是通过这个

diff = ones-(S_1*S_5);
if S_1*S_5 == zeros         %Perchè senza non funziona?
    diff = ones;
else 
    diff = (ones-(S_1*S_5)).^(-1)
end
S_A = S_3*S_5*diff*S_2+S_4;
Run Code Online (Sandbox Code Playgroud)

但我不认为这是一个聪明的解决方案.谁知道为什么我没有得到正确的结果?

matlab matrix matrix-multiplication

0
推荐指数
1
解决办法
76
查看次数