Matlab 大于或等于输入谐波级数的最小整数

Matlab 大于或等于输入谐波级数的最小整数,matlab,function,loops,for-loop,while-loop,Matlab,Function,Loops,For Loop,While Loop,我正在处理以下问题: 我意识到我的代码有点不正确,但我想创建一个for循环来确定整数x(输入值)是否至少小于或等于谐波级数的和 以下是我到目前为止的情况: function n =one_per_n(x) if x > 10000 n = -1; end total = 0; i = 0; for i = 1:10000 if x >= total n = ceil(total); else to

我正在处理以下问题:

我意识到我的代码有点不正确,但我想创建一个for循环来确定整数x(输入值)是否至少小于或等于谐波级数的和

以下是我到目前为止的情况:

 function n =one_per_n(x)
 if x > 10000
     n = -1;
 end
 total = 0;
 i = 0;
 for i = 1:10000
      if x >= total
          n = ceil(total);
      else
          total = (1/i) + total;


  end


  end
我添加了一个while循环的尝试。我意识到这是错误的,但任何帮助都将不胜感激

 function n =one_per_n(x)
 if x > 10000
     n = -1;
 end
 total = 0;
 i = 0;
 for i = 1:10000
      while total <= x
          total = (1/i) + total;
  end
  end
函数n=每n(x)一个
如果x>10000
n=-1;
结束
总数=0;
i=0;
对于i=1:10000

在这种情况下,while循环是一个更好的选择

function [total, n] = one_per_n(x)
% This is a good initial check, good work
if x > 10000
    n = -1;
    return;
end

% Initialize the variables
total = 0;
n = 0;

% While not finished
while (total < x)
    % Number of terms
    n = n + 1;
    total = total + 1/n;
end

end
函数[total,n]=每n(x)一个
%这是一个很好的初步检查,很好的工作
如果x>10000
n=-1;
返回;
结束
%初始化变量
总数=0;
n=0;
%虽然还没有完成
而(总数
您不需要使用某些循环:

function n = one_per_n(x)
lim   = min(10000,exp(x));
value = cumsum(1./(1:lim));
n     = find(value >= x,1); 
if isempty(n)
    n = -1;
end

一旦找到
n
(在
if
语句中),使用
break
退出循环,也不需要通过
i=i+1增加
i
。这已经由
for
循环本身完成了阅读:我理解这些概念,我只是有点难以将它们组合在一起。当for循环的总数超过输入值时,我需要中断。确实如此。
n=ceil(总计)后的中断。另外,第一个检查(
如果x>10000
)是不相关的。谢谢,我将用while循环发布我的更新代码。这是错误的,但如果有人能指出我的错误,我将不胜感激。你应该在
if
之后使用
返回
。很好,但实际上,考虑到你的内存,这个解决方案不是很有效。
lim
必须在
x
上,
a
的长度要大得多。您可以使用
value=cumsum(1./(1:lim))