计算科学

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

2
计算一个非常大且非常稀疏的邻接矩阵的所有特征值
我有两个图,每个图都有近n〜100000个节点。在两个图中,每个节点正好连接到其他3个节点,因此邻接矩阵是对称的并且非常稀疏。 困难的部分是我需要邻接矩阵的所有特征值,而不是特征向量。准确地说,这将是我一生中唯一的一次(至少据我所知!),因此我想获取所有特征值,并且不介意等待几天来获取它们。 我尝试过scipy包装器ARPACK,但是花费的时间太长。我找到了多个库,但是它们最适合于获得最大/最小特征值的子集。是否有适用于对称稀疏矩阵并可能并行实现所有特征值的库?

1
定点问题中的非单调收敛
背景 我正在从液体理论中解决Ornstein-Zernike方程的一个变体。抽象地,该问题可以表示为解决不动点问题,其中是一个积分代数算子,而是解函数(OZ直接相关函数)。我正在通过Picard迭代进行求解,在这里我提供了初始试验解决方案并通过方案生成了新的试验解决方案 其中是一个可调参数,用于控制和的混合甲Ç ([R )Ç 0([R )ç Ĵ + 1 = α (甲Ç Ĵ)+ (1 - α )Ç Ĵ,α Ç 甲Ç α ε Δ Ĵ + 1≡ ∫ d → [R | c j + 1(Ac(r)=c(r)Ac(r)=c(r)A c(r)=c(r)AAAc(r)c(r)c(r)c0(r)c0(r)c_0(r)cj+1=α(Acj)+(1−α)cj ,cj+1=α(Acj)+(1−α)cj , c_{j+1} = \alpha (A c_j) + (1-\alpha)c_j~, αα\alphacccAcAcAc在下一个试用解决方案中使用。对于此讨论,我们假设的值不重要。我重复直到迭代收敛到期望的公差: 在我的问题变体中,取决于参数,而我的问题是关于的收敛性如何取决于此参数。αα\alphaϵϵ\epsilon甲λ 甲Ç = …

2
为什么病态线性系统可以精确解决?
根据此处的答案,较大的条件数(用于线性系统求解)会减少浮点解中保证的正确数字位数。伪光谱方法中的高阶微分矩阵通常条件非常恶劣。为什么它们仍然是非常准确的方法? 我了解病态矩阵带来的低精度只是一个保证值,但仍然令我感到奇怪的是,为什么实际上可以通过直接方法准确地解决病态矩阵-例如,LCOL第11页的表3.1 的列Wang等人,使用伪光谱积分矩阵的条件良好的聚集方法,SIAM J. Sci。计算36(3)。

3
数值通量在DG-FEM中的作用
我正在使用Hesthaven / Warburton的书学习DG-FEM方法背后的理论,并对“数值通量”的作用有些困惑。对于这是一个基本问题,我深表歉意,但是我已经找到了,但没有找到满意的答案。 考虑线性标量波动方程: 其中线性通量给定为˚F(Ú)=一个ü。∂u∂t+∂f(u)∂x=0∂u∂t+∂f(u)∂x=0\frac{\partial u}{\partial t} + \frac{\partial f(u)}{\partial x} = 0f(u)=auf(u)=auf(u) = au 正如Hesthaven的书中所介绍的,对于每个元素,我们最终得到N个方程,每个基函数一个,强制残差几乎消失:kkkNNN Rh(x,t)=∂uh∂t+∂auh∂xRh(x,t)=∂uh∂t+∂auh∂xR_h(x,t) = \frac{\partial u_h}{\partial t} + \frac{\partial au_h}{\partial x} ∫DkRh(x,t)ψn(x)dx=0∫DkRh(x,t)ψn(x)dx=0\int_{D^k} R_h(x,t) \psi_n(x) \, dx = 0 精细。因此,我们要进行一次部分集成以得出“弱形式”(1),然后进行两次部分集成以获得“强形式”(2)。我将在1D中采用Hesthaven的过大但容易推广的曲面积分形式: (1)∫Dk(∂ukh∂tψn−aukhdψndx)dx=−∫∂Dkn^⋅(auh)∗ψndx1≤n≤N∫Dk(∂uhk∂tψn−auhkdψndx)dx=−∫∂Dkn^⋅(auh)∗ψndx1≤n≤N \int_{D^k} \left( \frac{\partial u_h^k}{\partial t} \psi_n-au_h^k\frac{d \psi_n}{d x} \right)\, dx = - \int_{\partial D^k} \hat{n}\cdot(au_h)^*\psi_n \,dx …


2
特征值问题中的验证
让我们从形式问题开始 (L+k2)u=0(L+k2)u=0(\mathcal{L} + k^2) u=0 带有一组给定的边界条件(Dirichlet,Neumann,Robin,Periodic,Bloch-Periodic)。这对应于在某些几何和边界条件下找到某个算子的特征值和特征向量LL\mathcal{L}。例如,可以在声学,电磁学,弹性力学,量子力学等方面获得这样的问题。 我知道可以使用不同的方法(例如,有限差分方法)离散化运算符 [A]{U}=k2{U}[A]{U}=k2{U}[A]\{U\} = k^2 \{U\} 或使用有限元方法获得 [ K] { U} = k2[ M] { U}。[K]{U}=k2[M]{U}.[K]\{U\} = k^2 [M]\{U\} \enspace . 在一种情况下,得到一个特征值问题,而在另一种情况下得到一个广义的特征值问题。在获得问题的离散版本后,人们使用求解器来解决特征值问题。 一些想法 在这种情况下,“人造溶液”的方法无用,因为没有源项可以平衡方程。 [ K][K][K][M][M][M] [∇2+ω2/c2]u(ω)=f(ω),∀ω∈[ωmin,ωmax][∇2+ω2/c2]u(ω)=f(ω),∀ω∈[ωmin,ωmax][\nabla^2 + \omega^2/c^2] u(\omega) = f(\omega) \enspace ,\quad \forall \omega \in [\omega_\min, \omega_\max] 代替 [∇2+k2]u=0.[∇2+k2]u=0.[\nabla^2 + k^2] u = …

2
有限元分析中测试功能的目的是什么?
在波动方程中: c2∇⋅∇u(x,t)−∂2u(x,t)∂t2=f(x,t)c2∇⋅∇u(x,t)−∂2u(x,t)∂t2=f(x,t)c^2 \nabla \cdot \nabla u(x,t) - \frac{\partial^2 u(x,t)}{\partial t^2} = f(x,t) 为什么在积分之前先乘以测试函数v (x ,t )v(x,t)v(x,t)?

1
如何激发Krylov加速的Multigrid(使用MG作为前提条件)?
通过构造初始猜测值并对重复以下步骤,直到收敛为止,可以使用Multigrid(MG)求解线性系统:X 0我= 0 ,1 ..甲X = bAx=bAx=bX0x0x_0我= 0 ,1 ..i=0,1..i=0,1.. 计算残差[R一世= b - A x一世ri=b−Axir_i = b-Ax_i 应用多重网格周期以获得近似值,其中。甲é 我 = - [R 我Δ X一世≈ è一世Δxi≈ei\Delta x_i \approx e_iAei=riAei=riAe_i = r_i 更新xi+1←xi+Δxixi+1←xi+Δxix_{i+1} \gets x_i + \Delta x_i 多重网格周期是应用于以产生的平滑,内插,约束和精确的粗网格求解操作的序列。这通常是一个V周期或W周期。这是一个线性运算,因此我们写成。 Δ X 我 Δ X 我 = 乙ř 我ririr_iΔxiΔxi\Delta x_iΔxi=BriΔxi=Bri\Delta x_i = B …

1
具有牛顿法的有限差分的近似雅可比方程会引起不稳定性吗?
我已经在python 3中实现了向后欧拉求解器(使用numpy)。为了我自己的方便和练习,我还编写了一个小函数来计算梯度的有限差分近似值,这样我就不必总是解析地确定雅可比矩阵(如果可能的话!)。 使用Ascher和Petzold 1998中提供的描述,我编写了此函数来确定给定点x处的梯度: def jacobian(f,x,d=4): '''computes the gradient (Jacobian) at a point for a multivariate function. f: function for which the gradient is to be computed x: position vector of the point for which the gradient is to be computed d: parameter to determine perturbation value eps, where eps …

2
为什么Matlab的整体性能优于Scipy?
对于Matlab处理数值积分与Scipy的方式,我感到有些沮丧。我在下面的测试代码中观察到以下差异: Matlab的版本平均运行速度比我的python 快24倍! Matlab的版本能够在没有警告的情况下计算积分,而python返回 nan+nanj 关于上述两点,我该怎么做才能确保在python中获得相同的性能?根据文档,这两种方法都应使用“全局自适应正交”来近似积分。 下面是这两个版本中的代码(尽管python要求创建一个积分函数以便它可以处理复杂的被积数,但两者非常相似。) 蟒蛇 import numpy as np from scipy import integrate import time def integral(integrand, a, b, arg): def real_func(x,arg): return np.real(integrand(x,arg)) def imag_func(x,arg): return np.imag(integrand(x,arg)) real_integral = integrate.quad(real_func, a, b, args=(arg)) imag_integral = integrate.quad(imag_func, a, b, args=(arg)) return real_integral[0] + 1j*imag_integral[0] vintegral = np.vectorize(integral) …

2
] 0,1 []中热方程的周期边界条件
让我们考虑一个平滑的初始条件和热方程在一个维度: 在开区间] 0 ,1 [,让我们假设我们想要与有限差分数值求解。∂tu=∂xxu∂tu=∂xxu \partial_t u = \partial_{xx} u]0,1[]0,1[]0,1[ 我知道,要使我的问题很好地解决,我需要赋予它和x = 1的边界条件。我知道Dirichlet或Neumann都能很好地工作。x=0x=0x=0x=1x=1x=1 如果我在第一种情况下有内部点x k = kNNN表示k=1,⋯,N,则我有N个未知数:uk=u(xk)表示k=1,⋯,N,因为u是在边界处规定的。xk=kN+1xk=kN+1x_k=\frac{k}{N+1}k=1,⋯,Nk=1,⋯,Nk=1,\cdots,NNNNuk=u(xk)uk=u(xk)u_k=u(x_k)k=1,⋯,Nk=1,⋯,Nk=1,\cdots,Nuuu 在第二种情况下真有未知数ü 0,⋯ ,ù Ñ + 1,我知道如何使用(均相)诺伊曼BC在边界来离散拉普拉斯,例如具有两个虚构点的红利x − 1和x N + 2以及等式:N+2N+2N+2u0,⋯,uN+1u0,⋯,uN+1u_0,\cdots,u_{N+1}x−1x−1x_{-1}xN+2xN+2x_{N+2} u1−u−12h=0=uN+2−uN2hu1−u−12h=0=uN+2−uN2h\frac{u_1-u_{-1}}{2 h} = 0 = \frac{u_{N+2}-u_N}{2 h} 我的问题是关于定期公元前。我觉得我可以使用一个方程,即 ,但也许两年,然后我会用 ∂ X ü (0 )= ∂ X ù (1 )u(0)=u(1)u(0)=u(1)u(0) = u(1)∂xu (0 …

1
如何避免python函数中的灾难性取消?
我无法在数字上实现函数。它受到以下事实的困扰:在较大的输入值下,结果是很大的数乘以很小的数。我不确定灾难性取消是否是正确的术语,因此请纠正我。出现问题的证据: 对于6的较大输入,如何避免振荡和0.0的赋值? 这是我的功能: import numpy as np def func(x): t = np.exp(-np.pi*x) return 1/t*(1-np.sqrt(1-t**2))

3
Thomas算法是求解对称对角占优稀疏三对角线性系统的最快方法吗
我想知道托马斯算法是否是解决算法复杂性(不寻找像LAPACK之类的实现包)方面最快的方法(可证明?)来解决对称对角占优的稀疏三对角线系统。我知道,托马斯算法和多重网格都为复杂度,但是多重网格的常数因子可能较小吗?在我看来,Multigrid可能不会更快,但我并不乐观。O(n)O(n)O(n) 注意:我正在考虑矩阵很大的情况。可以采用直接方法或迭代方法。

4
估计硬件错误概率
假设我在http://www.nersc.gov/users/computational-systems/edison/configuration上的100k内核上运行了4个小时的超级计算机计算,通过网络交换了大约4 PB的数据,并执行了大约4 TB的I /哦 计算都是整数,所以结果是对还是错(没有中间数值错误)。 假设代码正确,我想估计由于硬件故障而导致计算错误的可能性。有什么好的方法可以解决这个问题?是否有足够的资源可以估算出所需的数字?

3
使用有限差分法时如何处理弯曲边界条件?
我正在尝试自己学习数字解PDE。 我开始使用有限差分法(FDM)已有一段时间了,因为我听说FDM是PDE众多数值方法的基础。到目前为止,我对FDM有了一些基本的了解,并且能够使用我在图书馆和Internet上找到的资料来为常规区域中的一些简单PDE编写代码,但是奇怪的是,我通常所用的资料很少关于治疗不规则的,弯曲的,奇怪的边界,像这样。 而且,我从未见过处理弯曲边界的简单方法。例如,《偏微分方程的数值解-入门》(Morton K.,Mayers D)一书,其中包含我到目前为止所见的最详细的讨论(主要在p71的3.4和p199的6.4中)。对于我来说,这确实很麻烦且令人沮丧。 因此,正如标题所要求的那样,关于弯曲边界,人们通常在使用FDM时如何处理它?换句话说,最流行的治疗方法是什么?还是取决于PDE的类型? 是否有(至少相对)优雅且高精度的方法来处理弯曲边界?还是只是不可避免的痛苦? 我什至要问,当今人们是否真的将FDM用于弯曲边界?如果没有,通常的方法是什么? 任何帮助,将不胜感激。

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.