计算科学

科学家使用计算机解决科学问题的问答

1
操作顺序,数值算法
我读过 (1)条件恶劣的操作应在条件良好的操作之前进行。 举例来说,由于减法不适用于乘法,而减法不适用于条件,因此应将计算为。(x - y )zxz−yzxz−yzxz-yz(x−y)z(x−y)z(x-y)z 但是,对这两种算法的一阶误差分析表明,它们的相差仅三倍(*),而且我不明白为什么有人可以将其概括为语句(1),也无法直观地理解操作顺序。您认为陈述(1)是被接受的规则,您对此有其他解释吗? *:更具体地说,第一个版本的相对误差由 eps+3|x|+|y||x|−|y|epseps+3|x|+|y||x|−|y|eps\text{eps}+3\frac{|x|+|y|}{|x|-|y|}\text{eps}而第二版本的相对误差由 3eps+|x|+|y||x|−|y|eps3eps+|x|+|y||x|−|y|eps3\text{eps}+\frac{|x|+|y|}{|x|-|y|}\text{eps} 其中是机器精度。epseps\text{eps} 该分析基于以下假设:第个中间结果乘以(由于舍入误差),其中是由界定的iid随机变量。“一阶”表示忽略诸如的高阶术语。(1 + ε 我)ε 我 EPS ε 我ε Ĵ Xiii(1+εi)(1+εi)(1+\varepsilon_i)εiεi\varepsilon_iepseps\text{eps}ϵiϵjxϵiϵjx\epsilon_i\epsilon_jx

3
如何在双曲空间中采样点?
庞加莱上半空间模型中的双曲空间看起来像普通的RnRn\Bbb R^n但是角度和距离的概念以相对简单的方式变形了。在欧几里德空间我可以均匀地在球磨机中在几个方面,例如,通过生成采样的随机点nnn独立高斯样本以获得一个方向,并分别进行采样径向坐标rrr通过均匀采样sss从[0,1n+1Rn+1][0,1n+1Rn+1]\left[0, \frac1{n+1}R^{n+1}\right],其中RRR是半径,设置r=((n+1)s)1n+1r=((n+1)s)1n+1r = \left((n+1)s\right)^{\frac1{n+1}}。在双曲上半平面中,一个球碰巧仍然是一个球,只有其中心不会成为欧几里得度量的中心,因此我们可以这样做。 如果我们要根据非均匀分布进行采样,但仍以各向同性的方式(例如高斯分布)进行采样,这似乎并不容易。在欧几里得空间中,我们可以为每个坐标生成一个高斯样本(这仅适用于高斯分布),或者等效地生成多维高斯样本。是否有直接方法将此样本转换为双曲空间中的样本? 一种替代方法是首先生成一个方向均匀分布的方向(例如,从nñn高斯样本中),然后生成一个用于径向分量的高斯样本,最后在指定方向上针对指定长度在指数映射下生成图像。一种变化是仅采用欧几里得高斯样本并将其映射在指数映射下。 我的问题: 在双曲空间中具有给定的均值和标准差的高斯样本的最佳有效方法是什么? 我上面描述的方式能否提供所需的采样? 有人解决这个公式了吗? 如何将其推广到其他指标和其他概率分布? 提前致谢。 编辑 我只是意识到,即使在统一抽样的情况下,这些问题仍然存在。即使球是球,也不能用球上的常数函数来描述均匀分布。

2
三阶与四阶辛积分器的测试结果很奇怪
在我的回答到关于MSE问题关于汉密尔顿的2D物理模拟,我一直在使用高阶建议辛积分。 然后,我认为演示不同时间步长对具有不同顺序的方法的全局精度的影响可能是一个好主意,为此我编写并运行了Python / Pylab脚本。为了比较,我选择了: (jump2) 我熟悉的Wikipedia的2阶示例,尽管我知道它的名称是jumpfrog, (ruth3)Ruth的三阶辛积分器, (ruth4)露丝的四阶辛格积分器。 奇怪的是,无论我选择什么时间步长,Ruth的三阶方法在我的测试中似乎都比Ruth的四阶方法更精确,甚至高出一个数量级。 因此,我的问题是:我在这里做错了什么?详细信息如下。 这些方法在具有可分离哈密​​顿量的系统中展现出它们的优势,即可以写为 H(q,p)=T(p)+V(q)H(q,p)=T(p)+V(q)H(q,p) = T(p) + V(q) ,其中qqq包括所有位置坐标, ppp包括共轭矩a, TTT表示动力学能量和VVV势能。 在我们的设置中,我们可以通过对其施加的质量进行归一化。因此,力变成加速度,而力矩变成速度。 辛积分器带有特殊的(给定的,恒定的)系数,我将它们标记为a1,…,ana1,…,ana_1,\ldots,a_n和b1,…,bnb1,…,bnb_1,\ldots,b_n。与那些系数,一个步骤,用于从时间演进系统ttt 到时间t + δŤt+δtt+\delta t的形式为 对于i = 1 ,… ,ni=1,…,ni=1,\ldots,n: 给定所有位置的向量q,计算所有加速度的向量Gggqqq 将所有速度的向量vvv改变b一世GδŤbigδtb_i\,g\,\delta t 变化矢量qqq的所有位置的一个一世vδŤaivδta_i\,v\,\delta t 现在的智慧在于系数。这些是 [a1b1a2b2][a1b1a2b2a3b3][a1b1a2b2a3b3a4b4]=[120121]=[23724−23341−124]=12−2–√3[1201−2√3211−2√32−2–√3121](leap2)(ruth3)(ruth4)[a1a2b1b2]=[121201](leap2)[a1a2a3b1b2b3]=[23−23172434−124](ruth3)[a1a2a3a4b1b2b3b4]=12−23[121−2321−2321201−231](ruth4)\begin{align} \begin{bmatrix} a_1 & a_2 \\ b_1 & b_2 \end{bmatrix} &= \begin{bmatrix} \frac{1}{2} & …

2
为什么有限元的形状很重要?
我已经使用FEA几年了,但是正确使用和使用FEA是两件事,安全系数并不是解决所有问题的方法。我有种感觉,除非对这个问题有明确的答案,否则我不会正确使用它: 我知道元素必须接近其理想形状(仅基于雅可比矩阵?)才能获得准确的结果。但是为什么呢?既然我知道它来自坐标变换,那么除非元素的两个向量成为共线的,否则无论其形状如何,结果都不准确吗? 基于图示示例(任意应力分布)的逐步答案将是理想的,尤其是考虑到这是一个相对常见的问题(但从我所见到的答案中从来没有得到很好的回答)。

3
是否有之间的复杂
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为计算科学堆栈交换的主题。 5年前关闭。 是否存在大于小于的复杂度?O (n log n )O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n)


4
在C / C ++中寻找Runge-Kutta八阶
我想在使用Windows机器以C ++编写的天体力学/天体动力学应用程序中使用Runge-Kutta 8阶方法(89)。因此,我想知道是否有人知道有文档记录且可以免费使用的好的库/实现?只要用C编写就可以了,只要不存在任何编译问题即可。 到目前为止,我已经找到了这个库(mymathlib)。该代码似乎还可以,但是我还没有找到有关许可的任何信息。 您能通过揭示一些您可能知道并且适合我的问题的替代方法来帮助我吗? 编辑: 我看到确实没有像我期望的那样有太多的C / C ++源代码。因此,Matlab / Octave版本也可以(仍然必须免费使用)。



3
是否有处理五个以上维度的有限元软件?
我是FE的初学者。我的应用是空间为五维的金融衍生产品的定价。因此,增加时间,问题有六个方面。 我试图环顾四周(Fenics,escript,deal.II等),但我的理解是,这些软件限于3 + 1(3d空间+ 1d时间)。它是否正确? 我的目标语言是Python或C ++。 问题描述 我想对一种投资产品进行定价,每个月投资者都可以自由进行或不进行再投资。我想做到的是随机波动,随机利率和随机死亡率。 随机偏微分方程这个样子 其中μ š 吨是相关的股票价格的时间依赖性常数小号,和乙小号吨是一个独立的Levy过程,其在股价噪声产生小号。类似地,对于其他量:ν σ 吨是关联到波动的时间依赖量σ。 让Çτ表示在时间允许的投资τd小号ŤdσŤd[RŤdqŤ= μ小号ŤdŤ+ σŤ--√d乙小号Ť= μσŤdt + νσŤd乙σŤ= μ[RŤdt + ν[RŤd乙[RŤ= μqŤdt + νqŤd乙qŤ(股票)(挥发性)(利率)(死亡)dSt=μtSdt+σtdBtS(stock)dσt=μtσdt+νtσdBtσ(volatility)drt=μtrdt+νtrdBtr(interest rate)dqt=μtqdt+νtqdBtq(mortality)\begin{align} dS_t &= \mu^S_t d_t + \sqrt{\sigma_t} dB^S_t &\text{(stock)}\\ d\sigma_t &= \mu^\sigma_t dt + \nu^\sigma_t dB^\sigma_t & \text{(volatility)} \\ dr_t &= \mu^r_t dt …

2
用于随机计算函数的方程求解的数值方法
有许多众所周知的数值方法可以求解类型为 例如二等分法,牛顿法等。F(x )= 0 ,X ∈ řñ,f(x)=0,x∈Rn, f(x) = 0, \quad x \in \mathbb{R}^n, 在我的应用程序中,是用随机方法计算的(结果是平均值)。F(x )f(x)f(x) 有什么数值方程求解方法可以很好地处理这种情况?也欢迎链接到任何类似情况的讨论。 我可以计算的精度很大程度上取决于,并且我很容易碰到一堵墙,在不显着增加计算时间的情况下无法提高精度。因此,我不能忽略的结果不精确的事实。这也将影响实际中可以找到的精度。F(x )f(x)f(x)XxxFffXxx

3
Nvidia K20X与GeForce Titan进行GPGPU加速
我试图了解这两种用于学术计算的图形卡之间的区别,特别是对于DGEMM组件。 如果我们看原始统计数据,它们都有相同的GK110芯片,几乎在每个类别中都有可比较的统计数据,而且我相信它们具有相同的核心体系结构。不计任何折扣,K20X的价格大约是Titan的4倍。从效率的角度来看,在K20X上使用Titan似乎很有意义。 我很难理解这里的区别,有人可以阐明情况吗? 需要注意的是,我正在考虑为机架服务器购买这些卡,并基本上以完全倾斜的方式运行直到它们消失为止。但是,我认为对单个作业使用多个GPU的效率并不是特别重要。

3
用有限体积法将Dirichlet边界条件应用于泊松方程。
我想知道在以单元为中心的非均匀网格上使用有限体积方法时通常如何应用Dirichlet条件, 我目前的实现只是在确定第一个单元格的值时施加了边界条件, ϕ1=gD(xL)ϕ1=gD(xL) \phi_1 = g_D(x_L) 其中是可变的解决方案和克d(X 大号)是在域的LHS狄利克雷边界条件值(NB X 大号 ≡ X 1 / 2)。但是,这是不正确的,因为边界条件应固定像元面的值而不是像元本身的值。我真正应该适用的是ϕϕ\phigD(xL)gD(xL)g_D(x_L) xL≡x1/2xL≡x1/2x_L \equiv x_{1/2} ϕL=gD(xL)ϕL=gD(xL) \phi_{L} = g_D(x_L) 例如,让我们求解泊松方程, 0=(ϕx)x+ρ(x)0=(ϕx)x+ρ(x) 0 = (\phi_x)_x + \rho(x) 有初始条件和边界条件 ρ=−1gD(xL)=0gN(xR)=0ρ=−1gD(xL)=0gN(xR)=0\rho=-1\\ g_D(x_L)=0 \\ g_N(x_R)=0 (其中是右侧的Neumann边界条件)。gN(xR)gN(xR)g_N(x_R) 注意数值解法如何将单元格变量的值固定为左侧的边界条件值()。这具有向上移动整个解决方案的影响。通过使用大量的网格点可以使影响最小化,但这并不是解决问题的好方法。gD(xL)=0gD(xL)=0g_D(x_L)=0 题 使用有限体积法时,将以何种方式应用Dirichlet边界条件?我假设我需要通过使用ϕ 0(幻影点)或ϕ 2进行插值或外推来固定的值,以便经过这些点的直线在x L处具有所需的值。您是否可以提供任何指导或示例,说明如何对以单元为中心的非均匀网格进行此操作?ϕ1ϕ1\phi_1ϕ0ϕ0\phi_0ϕ2ϕ2\phi_2xLxLx_L 更新资料 这是我尝试使用您建议的幻像细胞方法,看起来合理吗? 该方程对于细胞是(其中˚F表示的磁通φ),Ω1Ω1\Omega_1FF\mathcal{F}ϕϕ\phi F3/2−FL=ρ¯F3/2−FL=ρ¯ \mathcal{F}_{3/2} - \mathcal{F}_{L} = \bar{\rho} …

4
是否有四对偶算术稀疏矩阵包?
我正在研究一些病态的大型稀疏线性方程组。我想使用双精度双精度算术或四进制双精度算术来解决它们。我知道有一个由Nakata Maho开发的名为MPACK的程序包,它可以在四对偶算术下执行数值线性代数计算。但是,它是为密集矩阵而不是稀疏矩阵设计的。您是否知道是否有四重对偶算术稀疏矩阵包?

4
具有矩阵约束的线性规划
我有一个类似于以下内容的优化问题 minJ,Bs.t.∑ij|Jij|MJ+BY=XminJ,B∑ij|Jij|s.t.MJ+BY=X \begin{array}{rl} \min_{J,B} & \sum_{ij} |J_{ij}|\\ \textrm{s.t.} & MJ + BY =X \end{array} 在这里,我的变量是矩阵 JJJ和BBB,但是整个问题仍然是线性程序。其余变量是固定的。 当我尝试将此程序输入我最喜欢的线性编程工具时,遇到了一些麻烦。即,如果我以“标准”线性程序形式编写此代码,则参数矩阵MMM和YYY最终会重复一遍(每X列一次XXX)。 是否有可以处理上述形式的优化的算法和/或程序包?现在我内存不足,因为MMM和YYY必须被复制很多次!

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.