在matlab中退出整个循环等

在matlab中退出整个循环等,matlab,Matlab,我用这个函数得到一个列向量,其中每个元素都应该是1, 但在n变大后,有时某些元素不是1,这是由于方法约束,我想知道n有多大并返回值。问题是:1.似乎1存储为1.0000,不知道如何转换它,以及如何比较(注释中的位置)2。不知道如何完全退出循环。多谢各位 function x = findn(n) for m = 1:n [a,b]=Hilbert(m); m1 = GaussNaive(a,b); m2 = size(m1,1); % m1 is a n*1 m

我用这个函数得到一个列向量,其中每个元素都应该是1, 但在n变大后,有时某些元素不是1,这是由于方法约束,我想知道n有多大并返回值。问题是:1.似乎1存储为1.0000,不知道如何转换它,以及如何比较(注释中的位置)2。不知道如何完全退出循环。多谢各位

function x = findn(n)

for m = 1:n
    [a,b]=Hilbert(m);
    m1 = GaussNaive(a,b);
    m2 = size(m1,1);
    % m1 is a n*1 matrix (a column vector) which every element is supposed 
    % to be 1, but when n gets large, some element is not 1.
    for i = 1:m2
        if (m1(i) ~= 1)
        % this compare isn't really working, since 1 is stored as 1.0000 for whatever
        % for whatever reason and they are not equal or not not equal.
        % I doubt whether it really compared.
        x = m;
        break;
        % it just exit the inner for loop, not entirely
        end
    end
end

在Matlab中,默认情况下,所有数值变量都是双精度浮点数。(实际上,字符串和逻辑也可能看起来像f-p数字,但暂时忘记这一点。)因此,除非您采取代码中没有显示的步骤,否则您将使用f-p数字。您可以采取的步骤包括将变量声明为具有特定类型,例如
int32
uint16
,并注意对它们执行的算术运算。Matlab对双精度浮点运算的吸引力非常强,它很容易在
int
s(例如)上进行操作,并再次以浮点数结束。开始阅读文档中的这些类型

这里几乎每天都会解释避免对f-p数进行(不)相等性测试的原因,因此,我不再重复它们,请四处看看。修改代码的简单方法是将测试替换为

if (m1(i) ~= 1)

其中,
tol
是一个较小的数字,任何大于
1+tol
(或小于
1-tol
)的数字都将被视为不等于
1

不幸的是,据我所知,Matlab缺少一个语句来
break
从一个内部循环到一个包含循环的外部。但是,在这种情况下,您可能可以将
中断
替换为
返回
,该返回将控制权返回到调用您的函数的函数,或者如果从那里调用它,则返回到命令行

if ((abs(m1(i)-1)>tol)