Questions tagged «matlab»

有关数值编程语言MATLAB的问题。

4
MATLAB反斜杠运算符如何求解平方矩阵的
我将一些代码与“常规” MATLAB代码进行了比较。我对结果感到惊讶。 我运行了一个示例代码(稀疏矩阵) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; 结果: For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is 3.819182 seconds. Inv(A)*B Elapsed time …

4
难振荡积分的数值积分方法
我需要对以下积分进行数值评估: ∫∞0š 我Ñ Ç′(x r )r E(r )----√d[R∫0∞sinc′(xr)rE(r)dr\int_0^\infty \mathrm{sinc}'(xr) r \sqrt{E(r)} dr 其中,和。在这里,是第二种修改的贝塞尔函数。在我的特定情况下,我有,和。X∈[R+λ,κ,ν>0ķλ=0.00313κ=0.00825ν=0.33Ë(r )= r4(λ κ2+ r2------√)- ν- 5 / 2ķ- ν- 5 / 2(λκ2+r2------√)E(r)=r4(λκ2+r2)−ν−5/2K−ν−5/2(λκ2+r2)E(r) = r^4 (\lambda\sqrt{\kappa^2+r^2})^{-\nu-5/2} K_{-\nu-5/2}(\lambda\sqrt{\kappa^2+r^2})X ∈ ř+x∈R+x \in \mathbb{R}_+λ ,κ ,ν> 0λ,κ,ν>0\lambda, \kappa, \nu >0ķKKλ = 0.00313λ=0.00313\lambda = 0.00313κ=0.00825κ=0.00825\kappa = 0.00825ν=0.33ν=0.33\nu = 0.33 我正在使用MATLAB,并且尝试了内置函数integral和quadgk,这给了我很多错误(请参见下文)。我自然也尝试了许多其他事情,例如按部分积分,以及将到积分求和。(ķ + 1 …

12
是否可以使用Octave学习MATLAB编程?
此问题是从“交叉验证” 迁移而来的,因为可以在“计算科学堆栈交换”上回答。 迁移 7年前。 我想学习MATLAB编程,这样我就可以自己进行一些研究/分析,也可以研究/修改一些我在网上找到的MATLAB脚本。 但是,问题是我买不起MATLAB。据我所知,GNU Octave与MATLAB兼容。但是,Octave面临的挑战是文档非常稀疏。 因此,一方面,MATLAB过于昂贵(-ve),但在线上却有很多不错的文档,教程和脚本(+),而Octave是免费的(例如在啤酒中),尽管(可以理解)它缺少全面的文档,等等。 。 我正在考虑下载和安装Octave,但要使用MATLAB文档(和脚本)来帮助我开始。我知道Octave和MATLAB之间存在一些差异-我想弄清楚的是,差异是否足够大以阻止我的努力(有效)“使用Octave学习MATLAB”。 欢迎任何建设性的反馈。

3

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} …

1
我可以相信Matlab提供的这个数值三重积分吗?
计算科学的人: 我最初将此问题发布在Math Stack Exchange上,有人评论说我的答案可能会“好得多”: 我是数值方法和Matlab的新手。我正在尝试评估以下两个三重积分之和(显然可以将其写得更简单,但是您仍然不能象征性地对其进行评估(?))。我在拿L时遇到麻烦在这里工作,所以我很不情愿地将它分解成碎片:我想找到大号一种ŤËX大号一种ŤËX\LaTeX 2((1 / 0.3 )− 1 )2(∫1 / 0.31个∫[R1个1个∫[R1个- - [R00F1个([R0,[R1个,t )exp(- (0.3 )2Ť24)dŤd[R0d[R1个),2((1个/0.3)-1个)2(∫1个1个/0.3∫1个[R1个∫0[R1个-[R0F1个([R0,[R1个,Ť)经验值⁡(-(0.3)2Ť24)dŤd[R0d[R1个),\frac{2}{((1/0.3) - 1)^2}\left(\int_1^{1/0.3}\int_1^{r_1}\int_0^{r_1-r_0}F_1(r_0,r_1,t)\exp(-\frac{(0.3)^2 t^2}{4})\,dt\,dr_0\,dr_1 \right), 和 2((1 / 0.3 )− 1 )2(∫1 / 0.31个∫[R1个1个∫[R1个+ r0[R1个- - [R0F2([R0,[R1个,t )exp(- (0.3 )2Ť24)dŤd[R0d[R1个),2((1个/0.3)-1个)2(∫1个1个/0.3∫1个[R1个∫[R1个-[R0[R1个+[R0F2([R0,[R1个,Ť)经验值⁡(-(0.3)2Ť24)dŤd[R0d[R1个),\frac{2}{((1/0.3) - 1)^2}\left(\int_1^{1/0.3}\int_1^{r_1}\int_{r_1-r_0}^{r_1+r_0} F_2(r_0,r_1,t)\exp(-\frac{(0.3)^2 t^2}{4})\,dt\,dr_0\,dr_1 \right), 哪里 F1个([R0,[R1个,t )= t2[R30∗ (0.3 )32 r31个π--√F1个([R0,[R1个,Ť)=Ť2[R03∗(0.3)32[R1个3πF_1(r_0,r_1,t)=\frac{t^2 r_0^3*(0.3)^3}{2r_1^3\sqrt{\pi}} …
15 matlab 

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
在Matlab中编写“ for”循环的最有效方法是什么?
我已经读过,例如,如果我有一个for在矩阵索引上运行的双循环,那么将列运行索引放在外部循环中会更有效。例如: a=zeros(1000); for j=1:1000 for i=1:1000 a(i,j)=1; end end 如果我有三个或更多for循环,最有效的编码方式是什么? 例如: a=zeros(100,100,100); for j=1:100 for i=1:100 for k=1:100 a(i,j,k)=1; end end end

3
在Matlab中使用ODE选择步长
嘿,谢谢您抽出宝贵时间看我的问题。这是我先前在physics.stackexchange.com中发布的问题的更新版本 我目前正在研究2D激子旋量玻色-爱因斯坦凝聚物,并对这个系统的基态感到好奇。达到基态的数学方法称为虚时法。 其中在量子力学时间由假想一个替换方法是非常简单的 这种取代导致在我的系统的高能量粒子衰减比低能量更快。在计算的每个步骤中重新归一化粒子数,我们最终得到了一个最低能量的粒子系统。基态。t=−iτt=−iτ t = -i \tau 所讨论的方程是非线性的,称为非线性薛定ding方程,有时也称为Gross-Pitaevskii方程。为了解决该问题,我使用了Matlabs ode45,它可以使系统及时向前发展,并最终达到基态。 注意!非线性薛定ding方程包含拉普拉斯方程和空间中的其他一些微分项。这些都是使用快速傅立叶变换解决的。最后,我们只有一个时间ODE。* 我的问题和疑问:计算从到t f。ode45置于for循环中,因此它不会同时计算巨型向量[ t 0,… ,t f ]。第一轮将以ode45(odefun,[ t 0,t 0 + Δ / 2 ,t 0 + Δ ] ,y ,…)开始,然后从t 0 + Δ开始进行t0t0t_0tftft_f[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \Delta。在这里,时间步长是我的问题。时间步长的不同选择为我提供了不同的基态解决方案,并且我不知道如何确定哪个时间步长为我提供了“最”正确的基态!ΔΔ\Delta 我的尝试:我意识到在此方案中,较大的时间步长将导致大量粒子在重新归一化为原始数量的粒子之前衰减,而较小的时间步长将导致更少量的粒子在重新归一化之前衰减。我最初的想法是,较小的时间步长应该提供更准确的解决方案,但这似乎是相反的。 我不是数值专家,因此ode45的选择完全是任意的。ode113给了我同样的事情。:( 有没有人对此事有任何想法。让我知道是否需要其他详细信息。 谢谢。 更新1: 我一直在研究假想时间方法和ODE。看来,如果时间步长不够小,整个事情就会变得不稳定。这使我想知道我的非线性方程是否僵硬,这使我理解的事情变得更加困难。我会及时通知你的。 更新2: 修复:问题的确是在ODE之外进行了标准化。如果规范化保持在odefun内,则ODE将为“外部”时间步长的不同选择返回相同的结果。我的同事给我看了旧的代码,我只是在我的odefun中添加了一行。 function …

5
使用相同的,不同的重复求解
我正在使用MATLAB解决一个涉及解决,其中每个时间步随着时间变化。现在,我正在使用MATLAB的:bAx=bAx=b\mathbf{A} \mathbf{x}=\mathbf{b}bb\mathbf{b}mldivide x = A\b 我可以灵活地进行所需的预计算,因此我想知道是否有比更快和/或更准确的方法mldivide。通常在这里做什么?谢谢大家!

2
Matlab [Q,R,E] = qr(A)后面对应的LAPACK函数是什么?
我目前试图廉价地为矩阵计算一个好的秩估计。因此,我使用计算了一个columnt枢轴QR分解AAA [Q,R,E]=qr(A) 在Matlab中。我估计军衔使用AAA tol = size(A,n)*eps*norm(A,'fro'); r = sum(abs(diag(R))>tol) 这可以正常工作,并且在R的所有对角线条目上绘制图如下所示: RRR 这两个实验的输入矩阵完全相同。 我的问题现在是Matlab旋转QR分解的列依赖哪个LAPACK函数? 感谢您的帮助,Grisu 编辑: DGEQPF给出相同的错误结果。 编辑2: AAAE+sign(E,F)E+sign(E,F)E+sign(E,F) AAA RRR 我将LAPACK 3.4.0与OpenBlas / GotoBLAS(64位)一起使用 Matlab 7,2007b,2010b Linux 32位 Edit3:-使用GDB,我发现Matlab 2010b从/usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../中在dgeqp3_()中调用DGEQP3:#3 0xaa46ce2f。 ./bin/glnx86/mllapack.so为什么使用LAPACK会得到错误的结果(3.4.0包括工作说明176中提到的修复程序)?
12 matlab  lapack 

3
最小二乘近似问题
我正在上一门有关科学计算的课程,而我们仅研究了最小二乘近似。我的问题特别是关于使用多项式近似。我知道,如果您有n + 1个数据点,则可以找到描述所有这些点的唯一的次数为n的多项式。但我也可以看到为什么这并不总是理想的。通过这种方法,您可能会在数据点之间产生大量噪声。我想得到一个低阶多项式可以很好地估计您的数据是很好的。 我的问题是:您如何在实践中决定要使用的多项式阶数?有经验法则还是仅取决于眼前的问题?在决定或多或少的学位之间时,我们是否必须考虑各种折衷?还是我误会了这里的东西? 提前致谢。

4
产生可发布图像的良好(免费)软件?
我现在正在使用Matlab生成1d和2d图像,以比较给定模型的准确性。我需要将我的方法与标准高斯.wfn模型进行比较,然后通过分析分子和拉普拉斯算子的密度来做到这一点。 我对产生近似于.wfn近似的二维图像(可能通过轮廓图?)感兴趣,并且对沿着键路径和两个原子之间的直线的性质(密度,拉普拉斯等)感兴趣。 如前所述,我目前正在使用Matlab生成图像,尽管这些图像主要用于我和我的同事。它们似乎不是我在论文和其他出版物中经常看到的图像类型。 我应该使用(或他人使用)哪种软件来生成具有出版物质量的图形和图像?

1
给定一组有限的生成器,如何计算矩阵李代数的基础?
给定任意一组(数字)平方复矩阵,我对计算生成的实矩阵李代数感兴趣,称之为。也就是说,我想作为 其中递归定义为和表示。甲大号甲大号甲 = 小号p 一个Ñ ř { 乙:乙∈ ∪ ∞ ķ = 1 c ^ ķ } Ç ķ c ^ 1 = 甲ç ķ + 1 = { [ X ,ÿ ] :X ,ÿ ∈ ∪一种= { A1个,一2,⋯ ,A米}A={A1,A2,⋯,Am}\mathcal{A}=\{A_1,A_2,\cdots,A_m\}一种A\mathcal{A}大号一种LA\mathcal{L_\mathcal{A}}大号一种= s p a n[R{ 乙:乙∈ ∪∞k = 1Cķ}LA=spanR{B:B∈∪k=1∞Ck} \mathcal{L_\mathcal{A}} = …

1
在Matlab中实现最佳运输翘曲
我正在实施“ 注册和翘曲的最佳大众运输 ”一文,我的目标是将其联机,因为我只是在网上找不到任何欧拉大众运输代码,这至少对于图像处理领域的研究界很有意义。 论文可以总结如下: - 使用沿x和y坐标的一维直方图匹配找到初始图 求解,其中u ^ \ perp代表逆时针旋转90度,\ triangle ^ {-1}表示具有Dirichlet边界条件(= 0)的泊松方程的解,和都是雅可比矩阵的行列式。 -保证了时间步长dt &lt;\ min | \ frac {1} {\ mu_0} \ nabla ^ \ perp \ triangle ^ {-1} div(u ^ \ perp)|的稳定性。uuuut=1μ0Du∇⊥△−1div(u⊥)ut=1μ0Du∇⊥△−1div(u⊥)u_t = \frac{1}{\mu_0} Du \nabla^\perp\triangle^{-1}div(u^\perp)u⊥u⊥u^\perp△−1△−1\triangle^{-1}DuDuDudt&lt;min|1μ0∇⊥△−1div(u⊥)|dt&lt;min|1μ0∇⊥△−1div(u⊥)|dt<\min|\frac{1}{\mu_0}\nabla^\perp\triangle^{-1}div(u^\perp)| 对于数值模拟(在常规网格上执行),他们表示使用matlab的poicalc求解泊松方程,他们使用空间有限导数的中心有限差分,但使用逆风方案计算的Du除外DuDuDu。 使用我的代码,映射的能量函数和卷曲适当减小了几次迭代(取决于时间步长,从几十到几千)。但是在那之后,模拟爆炸:能量增加,只需很少的迭代即可达到NAN。我尝试了几个阶数的微分和积分(可以在这里找到cumptrapz的高阶替换项)以及不同的插值方案,但是我总是遇到相同的问题(即使在非常平滑的图像上,各处也不为零等)。 有人会对我所面对的代码和/或理论问题感兴趣吗?代码很短。 具有调试功能的代码 登记功能 测试代码,前提是您要注册两张相同大小的图像 只是必要的功能,没有测试内容(&lt;100行) 请在最后用gradient()替换gradient2()。这是一个高阶梯度,但也不能解决问题。 我现在只对本文的最佳运输部分感兴趣,而不对附加的正则化术语感兴趣。 谢谢 …

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.