Matlab 大于或等于输入谐波级数的最小整数
我正在处理以下问题: 我意识到我的代码有点不正确,但我想创建一个for循环来确定整数x(输入值)是否至少小于或等于谐波级数的和 以下是我到目前为止的情况: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
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))代码>