Questions tagged «accuracy»

17
是否有适用于Python的高质量非线性编程求解器?
我要解决几个具有挑战性的非凸全局优化问题。目前,我使用了MATLAB的Optimization Toolbox(特别是fmincon()使用algorithm = 'sqp'),它非常有效。但是,我的大部分代码是在Python中进行的,我也想在Python中进行优化。是否存在可以与Python绑定竞争的NLP求解器fmincon()?它必须 能够处理非线性等式和不等式约束 不需要用户提供雅可比行列式。 如果不保证全局最优(fmincon()没有),也可以。我正在寻找一种即使在遇到挑战性问题时也可以收敛到局部最优的东西,即使它比慢一些fmincon()。 我尝试了OpenOpt提供的几种求解器,发现它们不如MATLAB的fmincon/sqp。 只是为了强调,我已经有了一个易于处理的公式和一个好的求解器。我的目标仅仅是更改语言,以使工作流程更加简化。 Geoff指出问题的某些特征可能是相关的。他们是: 10-400个决策变量 4-100个多项式相等约束(多项式范围从1到大约8) 有理不等式约束的数量大约等于决策变量数量的两倍 目标函数是决策变量之一 等式约束的雅可比行列是密集的,不等式约束的雅可比行列是密集的。

5
是否有可以从符号公式自动生成数字精度浮点C例程的软件?
给定实变量的实函数,是否有可用的软件能够自动生成数字精确代码,以在配备IEEE 754算法的机器上对所有输入进行函数计算? 例如,如果要评估的实函数为: 该软件将考虑灾难性的取消操作,并可能考虑对某些输入集进行输出表查找,以避免计算精度下降。 或者,是否存在可以生成基于纯表的查找例程以高精度计算给定函数的软件?


2
为何不反转矩阵的实际示例
我知道将矩阵求逆来求解线性系统不是一个好主意,因为它不如直接求解该系统或使用LU,Cholesky或QR分解那样准确和有效。 但是,我无法通过一个实际的例子进行验证。我已经尝试过此代码(在MATLAB中) M = 500; A = rand(M,M); A = real(expm(1i*(A+A.'))); b = rand(M,1); x1 = A\b; x2 = inv(A)*b; disp(norm(b-A*x1)) disp(norm(b-A*x2)) 并且残差总是相同的阶数(10 ^ -13)。 有人可以提供一个实际的例子,其中inv(A)* b的准确度远小于A \ b吗? ------问题更新------ 谢谢您的回答。但是,假设我们必须求解次系统,其中始终是相同的矩阵。考虑一下A x = b AnnnAx=bAx=bAx = bAAA -已满,因此需要存储器存储比相同。AAAA−1A−1A^{-1}AAA 条件数较小,因此可以精确计算。AAAA−1A−1A^{-1} 在那种情况下,计算比使用LU分解会更有效吗?例如,我已经尝试过以下Matlab代码:A−1A−1A^{-1} %Set A and b: M = 1000; A = rand(M,M); …

1
有改进的计算
大多数数学库都有许多对数函数版本。在大多数情况下,我们认为它们是完美的,但实际上很多它们只是提供了一定数量的精度。 对于某些功能,在数值上更稳定。例如,Fortran,R,Java和C都具有Math.log1p用于计算log(1.0+x)(对于较小的x值可提供更高的精度)和对应的expm1。此处的数字问题是由于精度降低而引起的-如果精度x很小,则会1.0 + x丢失数字以保留开头的1。 在许多情况下,我已经看到了此类功能以提高精度。每当您以较高的数字精度实现分布函数(Gamma,Beta,泊松等)时,这似乎都是很常见的。例如,伽玛函数似乎大部分时间都用作logGamma。通常,转到“ logspace”可以大大提高精度,因此R似乎在大多数函数上都有一个“ logspace”标志。 R中的另一个示例存在log1mexp于log(1 - exp(p)):http : //cran.r-project.org/web/packages/Rmpfr/vignettes/log1mexp-note.pdf 我一直在研究熵和信息理论方法。有一个很普通的名词 p * -log(p) 通常情况下,人们希望对数的底数是2,而不是e;但这通常只是一个线性因素,您也可以使用自然对数(因此这对我而言并不重要)。无论如何,您是否知道该术语是否有更快/更直接/更精确的计算方式?我到处都有它,因此它可以真正使它更加精确和快速地获得回报(感谢我节省了通常的“过早优化”工作)。 我看不出任何会导致精度下降的明显原因。因此,我最感兴趣的是是否有任何不错的技巧可以加快计算速度。这甚至可以省去我处理p=0极端情况的可能性(明智的是0,虽然log(0)不存在),或者免费给我以2为基数(尽管单次乘以常数显然并不昂贵)。谢谢。

2
如何提高找到奇异线性ODE本征系统的有限差分方法的精度
我正在尝试求解以下类型的方程: ( - ∂2∂X2- ˚F(X )) ψ(X)=λψ(X)(-∂2∂X2-F(X))ψ(X)=λψ(X) \left( -\tfrac{\partial^2}{\partial x^2} - f\left(x\right) \right) \psi(x) = \lambda \psi(x) 其中F(x )F(X)f(x)具有一个简单的极,对最小特征向量。边界条件是:和,而我只看上的函数。Ñ ψ (0 )= 0 ψ ([R )= 0 (0 ,- [R ]000ññNψ (0 )= 0ψ(0)=0\psi(0) = 0ψ (R )= 0ψ([R)=0\psi(R)=0(0 ,R ](0,[R](0,R] 但是,如果我执行一种非常简单的,均匀分布的有限差分方法,则最小特征值是非常不准确的(有时,“错误”特征值的负数比我所知道的负数个数个数量级大, “第一个特征值”成为第二个,但仍然很差。 什么因素会影响这种有限差分方案的准确性?我认为奇异性是导致问题的原因,并且间距不均匀的网格会显着改善问题,是否有任何论文可以使我朝着好的非均匀有限差分法发展?但是也许更高阶的差分方案会进一步改善它?您如何决定(或者只是“试着看看”) 注意:我的有限差分方案是对称三对角线,其中3个对角线是: ( − 12 Δ2,1个Δ2- ˚F(x …

4
快速准确地实现不完整伽玛函数的双精度
最新的实现双精度特殊功能的方式是什么?我需要以下积分: 对于和,可以用较低的不完全伽马函数来表示。这是我的Fortran和C实现:米=0,1,2,。。。Fm(t)=∫10u2me−tu2du=γ(m+12,t)2tm+12Fm(t)=∫01u2me−tu2du=γ(m+12,t)2tm+12 F_m(t) = \int_0^1 u^{2m} e^{-tu^2} d u = {\gamma(m+{1\over 2}, t)\over 2 t^{m+{1\over 2}}} m=0,1,2,...m=0,1,2,...m=0, 1, 2, ...t>0t>0t>0 https://gist.github.com/3764427 它使用级数展开,将各项相加直到达到给定的精度,然后使用递归关系有效地获得较低值。我对其进行了很好的测试,获得了我需要的所有参数值的1e-15精度,有关详细信息,请参见Fortran版本的注释。mmm 有没有更好的方法来实现它?这是gfortran中的gamma函数实现: https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_functions.c#L1781 它使用有理函数逼近而不是总结一些我正在做的无穷级数。我认为这是一种更好的方法,因为应该获得统一的精度。是否有某种规范的方法来处理这些问题,还是必须为每种特殊功能找出一种特殊的算法? 更新1: 根据评论,这是使用SLATEC的实现: https://gist.github.com/3767621 它从我自己的函数中复制值,大致在1e-15精度级别上。但是,我注意到一个问题,对于t = 1e-6和m = 50,项等于1e-303,对于更高的“ m”,它只是开始给出错误的答案。我的函数没有这个问题,因为我直接对使用了一系列扩展/递归关系。这是一个正确值的示例: ˚F米tm+12tm+12t^{m+{1\over2}}FmFmF_m F100F100F_{100}(1e-6)=4.97511945200351715E-003, 但是我无法使用SLATEC来实现这一点,因为分母会爆炸。如您所见,的实际值很小。FmFmF_m 更新2: 为避免上述问题,可以使用该函数dgamit(Tricomi的不完全Gamma函数),然后F(m, t) = dgamit(m+0.5_dp, t) * gamma(m+0.5_dp) / 2,因此不再存在问题,但是不幸的是,。然而,这可能是足够高的,我的目的。米≈ 172 米tttgamma(m+0.5_dp)m≈172m≈172m\approx 172mmm

2
二阶六面体有限元是否需要8个高斯点?
在不引入非物理模式的情况下,具有少于8个高斯点的六面体有限元是否可以获得二阶精度?单个中心高斯点引入了非物理剪切模式,并且与四面体离散化相比,8个高斯点的标准对称排列昂贵。 编辑:有人要求方程式。我感兴趣的方程是动态或准静态的非线性弹性。准静态方程为 ∇ ·&P(▿ φ ) = 0∇⋅P(∇ϕ)=0\nabla \cdot P\left(\nabla \phi \right) = 0 其中,和是超弹性的第一Piola-Kirchoff应力函数。一个简单的例子是可压缩的新霍克函数,其中 ϕ :Ω → R3ϕ:Ω→[R3\phi : \Omega \to \mathbf{R}^3Ω ⊂ ř3Ω⊂[R3\Omega \subset \mathbf{R}^3P:R3 × 3→ R3 × 3P:[R3×3→[R3×3P : \mathbf{R}^{3 \times 3} \to \mathbf{R}^{3 \times 3}P(F)= μ (F- ˚F- Ť)+ λ ˚F- Ť日志det FP(F)=μ(F-F-Ť)+λF-Ť日志⁡tF P(F) = …

2
数值积分,可能除以“零”
我正在尝试整合 ∫1个0Ť2 n + 2经验值(α[R0Ť) dŤ∫01t2n+2exp⁡(αr0t)dt\int^1_0 t^{2n+2}\exp\left({\frac{\alpha r_0}{t}}\right)dt 这是一个简单的转换 ∫∞1个X2 n经验值(- α[R0X )dX∫1∞x2nexp⁡(−αr0x)dx\int^{\infty}_1 x^{2n}\exp(-\alpha r_0 x)dx 使用 t =1个Xt=1xt = \frac1{x}因为很难在数值上近似不正确的积分。但是,这确实导致了评估新积分接近零的问题。看到间隔只有长度1(这样可比dŤdtdt 可以做得很小),但是当积分接近零时我应该考虑什么呢? 在某种程度上,我认为 ∫1个ϵŤ2 n + 2经验值(α[R0Ť) dŤ∫ϵ1t2n+2exp⁡(αr0t)dt\int^1_\epsilon t^{2n+2}\exp({\frac{\alpha r_0} {t}})dt 是个好主意 ϵϵ\epsilon是一些小数目。但是,我应该选择哪个号码?应该是机器epsilon吗?用机器epsilon划分的数字是否正确?此外,如果我的机器ε(或接近它)的除法给出了一个非常大的数字,则取经验值(1个ϵ)exp⁡(1ϵ)\exp(\frac{1}{\epsilon}) 会变得更大。 我应该如何处理呢?有没有一种方法可以对此函数定义明确的数值积分?如果没有,整合功能的最佳方法是什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.