当我尝试在Mathematica 8中计算以下积分时,我得到了这个奇怪的结果:
In[1]:= Integrate[y/((1 + x^2 + y^2)^(3/2)), {y, 0, 1}]
Run Code Online (Sandbox Code Playgroud)

Maple 14可以轻松解决这个问题:


为什么Mathematica给我一个不同的结果?
我想知道如何编码在R中采用双积分.我已经提到了两个类似的问题.
但我仍然很困惑如何从这些答案中得到我的问题.我的问题是以下.
我想在R中编写这个计算代码.
从我的手和Wolfram alpha计算,它变成了16826.4.如果两个积分都来自使用adaptIntegrate()的精确数字,我知道如何取一个积分.但我不知道该怎么办.你们能帮助我吗?非常感谢你提前.
在尝试使用scipy的四边形方法来集成高斯(假设有一种名为gauss的高斯方法)时,我遇到了将所需参数传递给高斯并留下四边形来对正确变量进行积分的问题.有没有人有一个如何使用四维w /多维函数的好例子?
但这让我想到了一个关于整合高斯的最佳方法的更大问题.我没有在scipy中找到高斯整合(令我惊讶).我的计划是编写一个简单的高斯函数并将其传递给quad(或者现在可能是一个固定宽度的积分器).你会怎么做?
编辑:固定宽度意味着像trapz一样使用固定的dx来计算曲线下的区域.
到目前为止我所得到的是一个方法make___gauss,它返回一个lambda函数,然后可以进入quad.通过这种方式,我可以在积分之前使用我需要的平均值和方差来生成正常函数.
def make_gauss(N, sigma, mu):
return (lambda x: N/(sigma * (2*numpy.pi)**.5) *
numpy.e ** (-(x-mu)**2/(2 * sigma**2)))
quad(make_gauss(N=10, sigma=2, mu=0), -inf, inf)
Run Code Online (Sandbox Code Playgroud)
当我尝试传递一般高斯函数(需要用x,N,mu和sigma调用)并使用四边形填充一些值时
quad(gen_gauss, -inf, inf, (10,2,0))
Run Code Online (Sandbox Code Playgroud)
参数10,2和0不一定匹配N = 10,sigma = 2,mu = 0,这促使更多的扩展定义.
scipy.special中的erf(z)将要求我确切地定义最初的t,但很高兴知道它就在那里.
使用最新版本的sympy(0.7.6),在确定支持[0,y)的函数的积分时,得到以下错误结果:
from sympy import *
a,b,c,x,z = symbols("a,b,c,x,z",real = True)
y = Symbol("y",real=True,positive=True)
inner = Piecewise((0,(x>=y)|(x<0)|(b>c)),(a,True))
I = Integral(inner,(x,0,z))
Eq(I,I.doit())
Run Code Online (Sandbox Code Playgroud)
http://mathurl.com/l8wrjcn.png
这是不正确的,因为实际结果应该交换最后两个案例.这可以通过检查衍生物来确认:
Derivative(I.doit(),z).doit().simplify().subs(z,x)
Run Code Online (Sandbox Code Playgroud)
http://mathurl.com/mg4zpts.png
到处都减少到0.
有趣的是,当(b>c)通过替换inner = Piecewise((0,(x>=y)|(x<0)),(a,True))I得到一个TypeError来删除条件时:
TypeError: cannot determine truth value of
-oo < y
Run Code Online (Sandbox Code Playgroud)
我是否错误地使用了该库,或者这实际上是一个严重的症状错误?
simpson's rule从scipy.integrate库中使用时出现问题。即使所有数字均为正且x轴上的值从左向右递增,有时计算得出的面积也为负。例如:
from scipy.integrate import simps
x = [0.0, 99.0, 100.0, 299.0, 400.0, 600.0, 1700.0, 3299.0, 3300.0, 3399.0, 3400.0, 3599.0, 3699.0, 3900.0,
4000.0, 4300.0, 4400.0, 4900.0, 5000.0, 5100.0, 5300.0, 5500.0, 5700.0, 5900.0, 6100.0, 6300.0, 6600.0,
6900.0, 7200.0, 7600.0, 7799.0, 8000.0, 8400.0, 8900.0, 9400.0, 10000.0, 10600.0, 11300.0, 11699.0,
11700.0, 11799.0]
y = [3399.68, 3399.68, 3309.76, 3309.76, 3274.95, 3234.34, 3203.88, 3203.88, 3843.5,
3843.5, 4893.57, 4893.57, 4893.57, 4847.16, 4764.49, 4867.46, 4921.13, 4886.32,
4761.59, 4731.13, 4689.07, 4649.91, 4610.75, 4578.84, 4545.48, 4515.02, …Run Code Online (Sandbox Code Playgroud) 我想在R中解决以下问题:
∫ 0 ħ [π(吨)∫ 吨ħ 甲(X)DX] dt的
其中π(t)是先验,A(x)是下面定义的A函数.
prior <- function(t) dbeta(t, 1, 24)
A <- function(x) dbeta(x, 1, 4)
expected_loss <- function(H){
integrand <- function(t) prior(t) * integrate(A, lower = t, upper = H)$value
loss <- integrate(integrand, lower = 0, upper = H)$value
return(loss)
}
Run Code Online (Sandbox Code Playgroud)
由于π(t),A(x)> 0,expected_loss(.5)应小于expected_loss(1).但这不是我得到的:
> expected_loss(.5)
[1] 0.2380371
> expected_loss(1)
[1] 0.0625
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么.
我想对等式进行积分:
f(x) = 积分(E^(-i * omega * t)),从
-a到a.
我写了以下代码:
from sympy import *
from sympy.abc import a, omega, t
init_printing(use_unicode=False, wrap_line=False, no_global=True)
f = E**(-I * omega * t)
integrate(f, (omega, -a, a))
Run Code Online (Sandbox Code Playgroud)
但结果只是输入的定积分。当我改变整体限制0到I得到结果......没有人知道如何从得到一个解决方案-a来a?
提前谢谢了。
约翰
在 sympy http://docs.sympy.org/latest/modules/integrals/integrals.html 的文档中,我们可以阅读:
manualintegrate 模块具有返回所使用步骤的函数(有关更多信息,请参阅模块文档字符串)。
但是调用help(sympy.integrals.manualintegrate)我们得到:
Help on function manualintegrate in module sympy.integrals.manualintegrate:
manualintegrate(f, var)
manualintegrate(f, var)
Compute indefinite integral of a single variable using an algorithm that
resembles what a student would do by hand.
Unlike ``integrate``, var can only be a single symbol.
Examples
========
>>> from sympy import sin, cos, tan, exp, log, integrate
>>> from sympy.integrals.manualintegrate import manualintegrate
>>> from sympy.abc import x
>>> manualintegrate(1 / x, x)
log(x)
>>> integrate(1/x)
log(x) …Run Code Online (Sandbox Code Playgroud) 这是一个使用中点规则计算 AUC 的函数。使用 R 如何定义一个包含前一个向量值之间的中点的向量?或者如何将向量的值移至中点?
# define h (or delta x)
h <- (b - a) / n
# define vector based on the limits of integration, a to b by increments of h
xj <- seq.int(a, b, length.out = n + 1
# shift values of vector to their midpoints
Run Code Online (Sandbox Code Playgroud)
例如,将值 [0, 1, 2, 3] 转换为 [.25, 1.5, 2.5]
这个 for 循环有效,但我想知道是否有比这更优雅的解决方案:
for (i in 1:length(xj)) {
xji[i] <- (xj[i] + xj[i + 1]) / 2
}
Run Code Online (Sandbox Code Playgroud) 这是我第一次使用 stackoverflow,所以请耐心等待!我正在使用 R 包“pracma”来计算三重积分。这是我的代码:
mu1=0
mu2=0
mu3=0
mu4=0
sigma1=1
sigma2=1
sigma3=1
sigma4=1
f3=function(x,y,z){dnorm(z,mean = mu2,sd=sigma2)*dnorm(y,mean =
mu3,sd=sigma3)*(1-pnorm(z,mean= mu1,sd=sigma1))*dnorm(x,mean =
mu4,sd=sigma4)}
ymin=function(x){x}
zmin=function(x,y){y}
integral3(f3,xmin = -100,xmax = 100,ymin,ymax=100,zmin,zmax = 100)
Run Code Online (Sandbox Code Playgroud)
但实际上,我收到以下错误:
Error in if (adjerr[1] > localtol) { :
missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个解决这个问题的提示吗?预先感谢