如何评估对数字的积分?

发布于 2024-10-12 19:47:54 字数 272 浏览 10 评论 0原文

我设置了一些函数,如下所示:

f(x):=1-2**-x$
g(y):=integrate(f(x), x, 0, y)$

并对它们进行了评估:

f(1)$float(%);
g(1)$float(%);

但是对于 g(1),我得到了符号答案而不是数字答案。使用 float() 是为了获得数值答案,但它只是将积分中的所有项都转换为浮点数。

我怎样才能得到g(1)作为一个数字?

I have some functions set up like this:

f(x):=1-2**-x$
g(y):=integrate(f(x), x, 0, y)$

and evaluated them:

f(1)$float(%);
g(1)$float(%);

but for g(1), I got a symbolic answer instead of a numerical answer. Using float() was an attempt to get a numerical answer but it just turned all of the terms in the integral into floats.

How can I get g(1) as a number?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

束缚m 2024-10-19 19:47:54

为什么不直接这样做(根据定积分的定义):

f(x):=1-2**-x$
gg(x):=''(integrate(f(x), x))$
g(y):=gg(y) - gg(0)$

''(引号-引号)运算符用于在赋值之前强制评估 := 的右侧。

Why not just do (by the definition of definite integral):

f(x):=1-2**-x$
gg(x):=''(integrate(f(x), x))$
g(y):=gg(y) - gg(0)$

'' (quote-quote) operator is used to force the evaluation of the :='s right hand side before the assignment.

枫林﹌晚霞¤ 2024-10-19 19:47:54

如果您只对数值解感兴趣,那么您可以使用数值积分。
例如,您可以使用quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit])。

我尝试过:

f(x) := 1-2^(-x);
g(y):= quad_qag(f(x), x, 0, y, 3, epsrel=10d-8)$
g(1);

它返回:

[0.27865247955552,3.093663986714272*10^-15,31,0]

第一个条目是数值解,

第二个条目是近似相对误差,

第三个条目是实现解决方案所需的迭代次数,

最后一个条目是错误代码; 错误代码为

  • 如果没有遇到问题,
  • 0; 1 如果完成了太多子间隔;
  • 2 如果检测到舍入误差过大;
  • 3 如果发生极其糟糕的被积函数行为;
  • 6 如果输入无效。

顺便说一句,精确解是 1-1/(2*log(2)),大约为 0.27865。

If you're only interested in a numerical solution, then you could use numerical integration.
For example you could use quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit]).

I tried:

f(x) := 1-2^(-x);
g(y):= quad_qag(f(x), x, 0, y, 3, epsrel=10d-8)$
g(1);

which returns:

[0.27865247955552,3.093663986714272*10^-15,31,0]

the first entry is the numerical solution,

the second entry is the approximate relative error,

the third entry is the number of iterations required to achieve the solution,

and the last entry is an error code; error codes are

  • 0 if no problems were encountered;
  • 1 if too many sub-intervals were done;
  • 2 if excessive roundoff error is detected;
  • 3 if extremely bad integrand behavior occurs;
  • 6 if the input is invalid.

BTW, the exact solution is 1-1/(2*log(2)) which is approximately 0.27865.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文