计算科学

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

2
应用于近似奇异系统的迭代线性求解器的停止准则
考虑与甲几乎奇异这意味着有一个本征值λ 0的一个,这是非常小的。迭代方法的通常停止准则基于残差r n:= b − A x n,并认为当“ r n ” / “ r 0 ” <t o l且迭代次数为n时,迭代可以停止。但是在我们正在考虑的情况下,可能会有较大的误差vAx=bAx=bAx=bAAAλ0λ0\lambda_0AAArn:=b−Axnrn:=b−Axnr_n:=b-Ax_n∥rn∥/∥r0∥&lt;tol‖rn‖/‖r0‖&lt;tol\|r_n\|/\|r_0\|<tolnnnvvv住在与该小特征值有关的本征空间赋予小的残余阿v = λ 0 v。假设初始残差r 0大,则可能发生在“ r n ” / “ r 0 ” <t o l处,但误差x n − x仍然很大。在这种情况下,更好的错误指示符是什么?是`` x n − x n − 1 ''λ0λ0\lambda_0Av=λ0vAv=λ0vAv=\lambda_0vr0r0r_0∥rn∥/∥r0∥&lt;tol‖rn‖/‖r0‖&lt;tol\|r_n\|/\|r_0\|<tolxn−xxn−xx_n-x∥xn−xn−1∥‖xn−xn−1‖\|x_{n}-x_{n-1}\| 好候选人?


6
线性程序中涉及
假设 最小Av È Ç(Û)受 U我,Ĵ≤ 最大{ U我,ķ,Uķ ,Ĵ} ,i ,j ,k = 1 ,… ,nminAvec(U)subject to Ui,j≤max{Ui,k,Uk,j},i,j,k=1,…,n\begin{align*} \min A &\mathrm{vec}(U) \\ &\text{subject to } U_{i,j} \leq \max\{U_{i,k}, U_{k,j}\}, \quad i,j,k = 1, \ldots, n \end{align*} 其中是一个对称的n × n矩阵,而v e c(U )将U整形为具有n 2个条目的一维向量。üUUn × nn×nn\times nv È Ç(Û)vec(U)\mathrm{vec}(U)üUUñ2n2n^2 上述程序中给我带来麻烦的部分是。(限制非负对称矩阵的解似乎很简单。)最大值{ ⋅ ,⋅ …

1
使用有限体积法时应如何应用边界条件?
从上一个问题开始,我试图将边界条件应用于该非均匀有限体积网格, 我想将Robin类型的边界条件应用于域的lhs(,这样,x=xL)x=xL)x=x_L) σL=(dux+au)∣∣∣x=xLσL=(dux+au)|x=xL \sigma_L = \left( d u_x + a u \right) \bigg|_{x=x_L} 其中是边界值; a ,d是分别在边界,对流和扩散上定义的系数;Ù X = ∂ ùσLσL\sigma_La,da,da, d,是的衍生物ü在边界评价和ü为我们所求解的变量。ux=∂u∂xux=∂u∂xu_x = \frac{\partial u}{\partial x}uuuuuu 可能的方法 我可以想到两种在上述有限体积网格上实现此边界条件的方法: 鬼细胞方法。 将写为包括虚像元的有限差。σ 大号 = ð Ü 1 - ü 0uxuxu_xσL=du1−u0h−+au(xL)σL=du1−u0h−+au(xL) \sigma_L = d \frac{u_1 - u_0}{h_{-}} + a u(x_L) A.然后对点x 0和x 1使用线性插值法求中间值u (x …

1
具有网格相关稳定性的元素的有用性
在完成了与3D斯托克斯问题中的元素稳定性相关的一些数学运算后,我有点震惊地意识到对于任意四面体网格不是稳定的。更准确地说,如果您有一个元素,其中所有节点和四个构面中的三个构面都以Dirichlet条件位于域的边界上,则最终会得到一个奇异矩阵。实际上,从斯托克斯体系的薄弱形式得出结论是相当琐碎的。P2- P1个P2-P1个P_2-P_1 我测试了我可以访问的唯一商业Stokes代码(COMSOL),它允许我创建这样的网格。单击解决后,我得到预期的“错误:奇异矩阵”。(我的印象是COMSOL将用于其蠕变流模块。)P2- P1个P2-P1个P_2-P_1 为了进一步测试问题是否与其他配置无关,我尝试了以下网格,一切都按预期进行。 问题:自适应或非自适应)网格生成器是否考虑了这种约束?我从各种研究论文中看到,该元素似乎很受欢迎。在选择使用方法时,这些边界不稳定性通常被忽略吗?更重要的是,拥有一个稳定的有限元真正意味着什么,即哪种网格相关的不稳定性太大,以至于我们得出结论该方法不好?

3
科学编程竞赛
我定期参加所谓的“编程竞赛”,在那儿您可以在有限的时间内使用自己的代码和解决问题的技能来解决算法难题。有关这些示例的参考示例,请搜索诸如Google Code Jam或ACM-ICPC之类的比赛。 (如果您知道什么是编程竞赛,则可以跳过以下段落) 在这些竞赛中,您可以在物理站点或在线上进行单独竞赛或团队竞赛,目标是在竞赛结束之前解决尽可能多的问题。每个问题都与解决方案必须满足的某些约束条件有关,例如运行时间,使用的内存等。问题难度的范围可以从“显而易见的解决方法”到“需要大量知识或精通技巧才能破解”。主要目标当然是要玩得开心,但是在某些情况下,成功甚至可能会得到现金奖励,荣誉和机智,甚至与Google等顶尖公司的招聘人员进行面试。 (如果您跳过了上一段,请停止跳过,因为这是我的问题) 通过编程竞赛,我对算法,一般计算机科学以及编码和发展我的问题解决技能的整体意义有了真正的兴趣。我也想在科学计算中这样做。 问题: 是否存在与纯算法类型相同的竞争,但侧重于数值分析,优化等? 我尝试了谷歌搜索,但乍看之下找不到任何信息…… 附录:我得到了建议来检查欧拉计划,但这并不是我真正想要的。我想要的是一个更广阔的舞台,练习更多“肮脏”的数字,例如使用pde的解决方案来创意,解决数字优化问题等。仅作比较,Kaggle是一个您可以在定期举行的各种比赛中练习数据挖掘,机器学习等的网站。我想要类似的东西,但是要用数字方案之类来实现和发挥创意。

5
为什么ODE的数值解会偏离不稳定的平衡?
我希望模拟双摆式系统的行为。该系统是一个2自由度的机器人操纵器,该操纵器没有被致动,因此其行为主要类似于受重力影响的双摆。双摆的唯一主要区别在于,它由两个刚体组成,两个刚体在其质心处具有质量和惯性特性。 基本上,我ode45在Matlab下进行编程,以解决以下类型的ODE系统: ⎡⎣⎢⎢⎢10000M110M1200100M120M22⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢x˙1x˙2x˙3x˙4⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢x2−V1−G1x4−V2−G2⎤⎦⎥⎥⎥[10000M110M1200100M120M22][x˙1x˙2x˙3x˙4]=[x2−V1−G1x4−V2−G2] \left[ \begin{array}{cccc} 1 & 0 & 0 & 0\\ 0 & M_{11} & 0 & M_{12}\\ 0 & 0 & 1 & 0\\ 0 & M_{12} & 0 & M_{22} \end{array} \right] \left[ \begin{array}{c} \dot{x}_1\\ \dot{x}_2\\ \dot{x}_3\\ \dot{x}_4 \end{array} \right]= \left[ \begin{array}{c} x_2\\ -V_1-G_1\\ x_4\\ -V_2-G_2 \end{array} …

4
从一组点中选择最分散的点
是否有任何(有效的)算法从一组N个点(M &lt; N)中选择个点的子集,以使它们“覆盖”大部分区域(在大小为M的所有可能子集上)?MMMNNNM&lt;NM&lt;NM < NMMM 我假设这些点在2D平面中。 天真的算法很简单,但是在时间复杂度方面却令人望而却步: for each subset of N points sum distance between each pair of points in the subset remember subset with the maximum sum 我正在寻找一种更有效甚至近似的方法。 例如,这是其中有一些随机点的平面: 对于,我希望选择以下点:M=5M=5M=5 请注意,所选点(红色)分散在整个平面上。 我找到了一篇与该问题有关的文章“ 为视觉跟踪有效地选择空间分布的关键点 ”。但是,这是假定点是加权的。

5
目标函数非常昂贵的问题的并行优化算法
我正在优化10-20个变量的函数。坏消息是每个功能评估都很昂贵,大约需要30分钟的串行计算时间。好消息是我有一个群集,其中包含几十个计算节点。 因此,问题是:是否存在可用的优化算法,这些算法可以使我有效地利用所有这些计算能力? 频谱的一侧将是穷举搜索:将整个搜索空间细分为一个精细的网格,并在每个网格点上独立计算函数。这当然是非常并行的计算,但是该算法效率非常低。 频谱的另一端是准牛顿算法:根据先前的历史智能更新参数的下一个估计。这是一种有效的算法,但我不知道如何使其并行:“基于先前历史估计参数”的概念听起来像是串行计算。 二次算法似乎处于中间位置:可以通过并行计算一堆值来构建初始的“代理模型”,但是我不知道其余迭代是否可并行化。 关于哪种无梯度优化方法在群集上能很好地表现出什么建议?此外,目前是否有并行的优化算法实现方案?

1
关于五阶Runge-Kutta方法的稳定性区域的令人困惑的评论
我在论文中碰到一个令人费解的评论 PJ van der Houwen,偏微分方程Runge-Kutta方法的发展,应用。嗯 数学。1996年20:261 范德侯文在第264页的第8ff行中写道: “对于泰勒多项式这意味着假想稳定性间隔为空 ”p = 1 ,2 ,5 ,6 ,9,10 ,⋯p=1个,2,5,6,9,10,⋯p = 1, 2, 5, 6, 9, 10, \cdots 其中,泰勒多项式是指Runge-Kutta方法的稳定性多项式(在x = 0处截断展开),p是阶数(请参阅第263页)。我认为我误会了一些东西,因为据我所知,五阶Runge-Kutta方法没有虚假的稳定区间。据我所知,假想极限约为3.4左右。经验值(x )经验值⁡(X)\exp(x)x = 0X=0x=0 我有什么误会


7
浮点数中两个数字的均值的稳健计算?
设x,y是两个浮点数。什么是计算均值的正确方法? 天真的方法(x+y)/2会在x和y太大时导致溢出。我认为0.5 * x + 0.5 * y可能更好,但是它涉及两个乘法(可能效率不高),我不确定它是否足够好。有没有更好的办法? 我一直在玩的另一个想法是(y/2)(1 + x/y)if x&lt;=y。但是,我不确定如何对此进行分析并证明它满足我的要求。 此外,我需要保证计算的均值将为&gt;= min(x,y)和&lt;= max(x,y)。正如唐·哈奇(Don Hatch)的回答所指出的那样,提出这个问题的一种更好的方法可能是:两个数字均值的实现是什么,总是能给出最准确的结果?也就是说,如果x和y是浮点数,如何计算最接近的浮点数(x+y)/2?在这种情况下,计算的平均值将自动为&gt;= min(x,y)和&lt;= max(x,y)。有关详细信息,请参见Don Hatch的答案。 注意:我的首要任务是确保准确性。效率是消耗性的。但是,如果有许多健壮且准确的算法,我会选择最有效的算法。

2
有什么办法可以做“双重预处理”
题: 假设您对对称正定矩阵有两个不同的(分解的)前置条件: 和 其中的逆是容易申请。一种一种A一≈ 乙Ť乙一种≈乙Ť乙A \approx B^TB一≈ ÇŤC,一种≈CŤC,A \approx C^TC,乙,乙Ť,C,CŤ乙,乙Ť,C,CŤB, B^T, C, C^T 什么时候可以使用的信息来自两个 和建设比任何一个更好的预处理器或一个人吗?乙乙BCCC乙乙BCCC

3
矩阵平方根逆的高效计算
统计中的一个常见问题是计算对称正定矩阵的平方根逆。什么是最有效的计算方式? 我碰上了一些文献(我还没有读),以及一些附带的R代码里面在这里,我将在这里重现为了方便 # function to compute the inverse square root of a matrix fnMatSqrtInverse = function(mA) { ei = eigen(mA) d = ei$values d = (d+abs(d))/2 d2 = 1/sqrt(d) d2[d == 0] = 0 return(ei$vectors %*% diag(d2) %*% t(ei$vectors)) } 我不能完全确定我了解这条线d = (d+abs(d))/2。有没有更有效的方法来计算矩阵平方根逆?R eigen函数调用LAPACK。

1
BFGS更新的直观动机
我正在教一个数值分析调查课,并且正在为背景/直觉有限的学生寻求BFGS方法的动力! Ĵ ķ(→ X ķ - → X ķ - 1)= ˚F (→ X ķ)- ˚F (→ X ķ - 1)∥ Ĵķ− Jk − 1∥2来回‖Ĵķ-Ĵķ-1个‖来回2\|J_k-J_{k-1}\|^2_{\textrm{Fro}}Ĵķ(x⃗ ķ− x⃗ k − 1)= f(x⃗ ķ)− f(x⃗ k − 1)Ĵķ(X→ķ-X→ķ-1个)=F(X→ķ)-F(X→ķ-1个)J_k(\vec x_k-\vec x_{k-1})=f(\vec x_k)-f(\vec x_{k-1}) BFGS更新的派生似乎更加复杂和模糊!特别是,我不想先验地认为更新应为等级2或采用特定形式。BFGS Hessian更新是否像Broyden的更新一样具有短暂的变化动机?

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.