计算科学

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


3
显式欧拉方法对于反应扩散问题太慢
我正在使用以下C ++代码解决Turing的反应扩散系统。它太慢了:对于128x128像素纹理,可接受的迭代次数为200 –导致2.5秒的延迟。我需要进行400次迭代才能获得有趣的图像-但是等待5秒钟太多了。同样,纹理的大小实际上应为512x512-但这会导致大量的等待时间。设备是iPad,iPod。 有没有机会更快地做到这一点?欧拉方法收敛缓慢(维基百科)–使用更快的方法可以减少迭代次数吗? 编辑:正如托马斯·克里姆佩尔(Thomas Klimpel)所指出的,这些行:“ if(m_An [i] [j] <0.0){...}”,“ if(m_Bn [i] [j] <0.0){...}”延迟收敛:移除后,经过75次迭代后会出现有意义的图像。我在下面的代码中注释掉了这些行。 void TuringSystem::solve( int iterations, double CA, double CB ) { m_iterations = iterations; m_CA = CA; m_CB = CB; solveProcess(); } void set_torus( int & x_plus1, int & x_minus1, int x, int size ) { // …
10 pde  stiffness 

3
推动GPU编程
我对GPGPU编程非常陌生,所以如果这个问题不是特别合适,请原谅我。据我了解,与通常的CPU编程相比,GPU编程是一项非常复杂的工程工作。必须注意发散性问题,切片,固定的内存分配以及主机设备通信/设备计算重叠。 经过一些研究后,我发现了推力库,它似乎试图模仿C ++ STL。很好 但是,基于我非常有限的经验,并且看到了获得良好性能所需的所有微观管理,我对性能有些怀疑。能否有效地内部处理所有复杂的编程部分?一些非常著名的库(例如PETSc)似乎使用了此软件包,这使我相信它应该以某种方式出现。 我想知道,与低级CUDA编程相比,对CUDA有更多经验和推力的人能否对软件包的性能说一两句话。什么时候可以使用推力?什么时候应该切换回CUDA?

2
二维Euler方程
作为大学的一项作业,我做了一维模拟。问题陈述是要解决一维冲击管问题,其中涉及可压缩理想气体作为工作流体。对于这个问题,我使用Roe的Riemann求解器求解了Eulers方程组。我想知道,要解决2维或3维欧拉方程,我应该从哪里开始?我应该首先考虑哪个测试问题?(请不要建议商业求解器。我想编写自己的代码)只是在编写自己的代码时需要一些帮助。 以最实际的方式介绍2d问题的好的资源是什么?

2
密集病态矩阵的对角化
我正在尝试将一些稠密,病态的矩阵对角化。在机器精度方面,结果不准确(返回负特征值,特征向量不具有预期的对称性)。我切换到Mathematica的Eigensystem []函数以利用任意精度,但是计算速度非常慢。我愿意接受许多解决方案。是否有非常适合病态问题的软件包/算法?我不是预处理方面的专家,所以我不确定这有多大帮助。否则,我所能想到的就是并行化的任意精度特征值求解器,但是我对Mathematica,MATLAB和C ++并不熟悉。 为了提供一些有关此问题的背景,矩阵很大,但不是很大(最多4096x4096至32768x32768)。它们是实数,是对称的,特征值在0到1(不包括)之间,许多特征值非常接近0,没有一个接近1。矩阵本质上是卷积算符。我不需要对所有矩阵进行对角线化,但是我可以走的越大越好。我可以访问具有许多处理器和分布式计算功能的计算集群。 谢谢

3
如何在C ++中构建递归样条函数
目前,我正在研究一种称为基样条搭配的微分方程求解方法。我遇到的麻烦是建立一种建立任意阶样条的方法,关系为 ,初始条件 B 1 i(x)={ 1乙k + 1一世(x )= x − x一世Xķ + 我− x一世乙ķ一世+ xk + i + 1− xXk + i + 1− x我+ 1乙ķ一世+ 1( x )乙一世ķ+1个(X)=X-X一世Xķ+一世-X一世乙一世ķ+Xķ+一世+1个-XXķ+一世+1个-X一世+1个乙一世+1个ķ(X) B^{k+1}_{i}(x)= \frac{x-x_i}{x_{k+i}-x_i}B^k_i + \frac{x_{k+i+1}-x}{x_{k+i+1}-x_{i+1}}B^k_{i+1}(x) ,我什至从这个问题开始就遇到了麻烦,因为它是递归的,可能是从“顶部”或“底部”开始的,并且我遇到了一般作家的事情,而我无法我围绕我需要做的事情。乙1个一世(x )= { 10对于 X一世≤ X < X我+ 1除此以外乙一世1个(X)={1个对于 X一世≤X<X一世+1个0除此以外B^1_i(x)=\begin{cases} 1 & \; \text{for } \; …
10 c++  b-spline 


3
稀疏矩阵乘法的开销是多少
矩阵乘法(Mat * Mat和Mat * Vec)是否随非零数或矩阵大小缩放?或两者的某种组合。 形状呢? 例如,我有一个100 x 100的矩阵,其中包含100个值,或者一个1000 x 1000的矩阵,其中包含100个值。 当对这些矩阵求平方(或将它们乘以具有相似稀疏性的相似矩阵)时,第一个(100x100)是否比第二个(1000x1000)快?是否取决于值在哪里? 如果它取决于实现,那么我对PETSc的答案很感兴趣。

3
MATLAB矩阵乘法(最佳计算方法)
我必须在两个参考系统(轴)之间进行坐标转换。为此,由于使用了一些中间轴,必须将三个矩阵(3 × 33×33\times3)相乘。我考虑过两种解决方法: 方法1:直接进行乘法,即 vF= R1个 [R2 [R3 v一世vF=[R1个 [R2 [R3 v一世v_f = R_1\ R_2\ R_3\ v_i 方法2:分为以下步骤: v3 我= R3 v一世v3一世=[R3 v一世v_{3i} = R_3\ v_i v23= R2 v3 我v23=[R2 v3一世v_{23} = R_2\ v_{3i} vF= R1个 v23vF=[R1个 v23v_f = R_1\ v_{23} 哪里: [R1个[R1个R_1,[R2[R2R_2和[R3[R3R_3是3 × 33×33\times3矩阵 vFvFv_f,,,是向量v 3 i v 23 …

2
在Python中为SVM计算Lagrange系数
我试图用Python 编写完整的SVM实现,但是在计算Lagrange系数时遇到一些问题。 首先让我重新叙述一下我从算法中了解的内容,以确保我走在正确的道路上。 如果是一个数据集和ÿ 我 ∈ { - 1 ,1 }是的类别标签X 我,然后∀ 我,ÿ 我(瓦特Ť X 我 + b )≥ 1x1,x2,...,xnx1,x2,...,xnx_1, x_2, ..., x_nyi∈{−1,1}yi∈{−1,1}y_i \in \{-1, 1\}xixix_i∀i,yi(wTxi+b)≥1∀i,yi(wTxi+b)≥1\forall i, y_i(w^Tx_i + b) \geq 1 因此,我们只需要解决一个优化问题即可 ∥w∥2‖w‖2\|w\|^2 服从yi(wTxi+b)≥1yi(wTxi+b)≥1y_i(w^Tx_i + b) \geq 1 就拉格朗日系数而言,这转化为找到,和和最小化:wwwbbbα=(α1,α2,...αn)≠0α=(α1,α2,...αn)≠0\alpha=(\alpha_1, \alpha_2, ... \alpha_n) \neq0≥0≥0\geq0L(α,w,b)=12∥w∥2−∑αi(yi(wTx+b)−1)L(α,w,b)=12‖w‖2−∑αi(yi(wTx+b)−1)L(\alpha, w, b) = \frac12 \|w\|^2 - …

2
匹配集合中的相似项目
我正在尝试搭配物品。给定一组项目,我可以按从0到100的等级对它们之间的相似程度进行排名。例如,如果项目n 1是牛奶,项目n 2也是牛奶,那么n 1和n 2之间的相似度将是100%。如果n 3是苏打水,则n 1和n 3之间的相似度可能是80%,依此类推。ññnñ1个ñ1个n_1ñ2ñ2n_2ñ1个ñ1个n_1ñ2ñ2n_2ñ3ñ3n_3ñ1个ñ1个n_1ñ3ñ3n_3 我试图弄清楚如何将项目分组为相似项目的组,但这是一个具有挑战性的问题。我遇到了以下问题:马类似于牛,类似于山羊,部分类似于山羊奶酪,后者类似于与薄脆饼干相关的奶酪。但是,我不希望一匹马与饼干一样。每个项目可能是成对相关的,但开始和结束可能不是。ññn 有任何想法吗?

2
(元)启发式方法的含义
为了优化,请参阅Wikipedia: 在计算机科学中,元启发法指的是一种计算方法,该方法通过反复尝试针对给定的质量度量来改进候选解决方案来优化问题。元启发法很少或根本没有假设要优化的问题,并且可以搜索很大范围的候选解。但是,元启发法不能保证找到最佳解决方案。许多元启发法实现某种形式的随机优化。 其他与元启发式具有相似含义的术语是:无导数,直接搜索,黑盒或实际上只是启发式优化器。关于该主题已经出版了几本书和调查论文。 我想知道如何判断优化方法是否是元启发式的?例如, (1)线性规划元启发式的单纯形法吗? (2)是否存在大多数非线性编程方法,例如梯度下降,拉格朗日乘数方法,罚分方法,内点方法(屏障方法),元启发式方法? (3)是否所有无梯度方法(例如Nelder–Mead方法或下坡单纯形方法)都属于启发式方法? 什么不是元启发式优化方法? 从Wikipedia上更一般地(超越优化)解决问题的技术: 启发式是指用于解决问题,学习和发现的基于经验的技术。如果无法进行详尽的搜索,则可以使用启发式方法来加快找到令人满意的解决方案的过程。此方法的示例包括使用经验法则,有根据的猜测,直观的判断或常识。 准确地说,启发法是使用易于访问但宽松的信息来控制人类和机器中问题解决的策略。 我想知道如何理解“启发式”的含义吗? 如何判断“解决问题,学习和发现”技术是否具有启发性? 什么是非启发式的“解决问题,学习和发现”技术? 谢谢并恭祝安康!

2
三角形/四面体/单形上的高阶数值积分
令为三角形,令为上的平滑函数。ŤŤTFFfŤŤT 我们可以使用中点正交,其中是的中点。∫FdX ≈ | Ť| ⋅˚F(x中号)∫FdX≈|Ť|⋅F(X中号)\int f dx \approx |T|\cdot f(x_M)X中号X中号x_MŤŤT 能否为我提供单形的高阶公式(作为参考)?
10 quadrature 


1
如果给出了序列,如何确定伪随机数生成器的初始值?
假设我知道线性同余生成器生成了一个随机数序列。那是, xn+1=(aXn+c)modmxn+1=(aXn+c)modmx_{n+1}=(aX_n+c) \bmod m 如果给了我整个周期(或至少是一个较大的连续子序列),我该如何重建产生该序列的参数和?我正在寻找一种通用方法,如果已知伪随机数生成器,该方法将能够确定初始参数。a,c,ma,c,ma,c,mx0x0x_0

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.