0

假设我创建了一个函数 Sn=LeftRiemannSum(f,left,right,N) ,它使用 N 个子域计算从左到右区间内的左黎曼和。即:

对于所有子域 i=0 到 N-1, Sn=sum(f(xi) h)。f 是我的函数和 xi=left+i h ,所以输入参数 left=x0 和 right=xN。

让 f 成为我的匿名函数(例如 f=@(x)(x.*log(1+x)) 。

我还估计了不同 N 的 Sn,从 N=10 到 100000。

现在,我只想计算 N -> 无穷大时序列 Sn 的值。在函数内部我有一个 for 循环 [ for i=0:(N-1)] 所以我会有无限循环..

我可以以某种方式将函数传递给“限制”命令吗?有什么线索吗?

谢谢!

PS:我的函数LeftRiemann Sum的主要部分代码如下:

for i=0:(N-1)
    x=x0+i.*h;
    y=f(x);
    A=y.*h;
    S=S+A
  end
   Sn=S
4

1 回答 1

0

如果N -> inf黎曼和的值将是函数在区间 [left, right] 中的积分。

可以引入这样的检查:

function Sn = LeftRiemannSum(f, left, right, N)

if isinf(N)
    Sn = exact integral of the function f in the interval [left, right]
    return
end

% // Rest of the code

这里的挑战是计算 的解析积分f。除非您使用符号数学工具箱,否则 Matlab 算法的所有结果都是近似值。

由于您无法真正运行循环直到无穷大,因此我看到了两个选项:

  1. N如果输入大于限制,我会声明一个限制并抛出错误。
  2. 内部将无穷大定义为一个高数,每当您收到inf作为参数时,您将其替换为,比方说 N=1e200。考虑到使用这种策略,您的算法可能需要很长时间才能完成执行。
于 2014-11-03T12:50:53.600 回答