帮助解决从dll中导入函数的问题 - 页 9 12345678910 新评论 Сергей 2009.09.08 21:23 #81 М...是啊...真遗憾...与C++编程在Bilder...伙计,又有很多错误:'-( :-)这个svd分解已经消耗了我很多时间,而且看起来没有尽头。 对不起,我问了一个不谦虚的问题,但你能不能以N次的费用来完成这项工作? 说实话,我已经厌倦了与之斗争......。我从9月2日开始在这个论坛上,在这之前,我有多么的挣扎...呜呜... 当然,我将来会学习C++,但这需要一些时间。 真的希望得到你的帮助。 Андрей 2009.09.08 21:51 #82 这就是klot的奇异变换函数。 在https://www.mql5.com/ru/code/7359 >> void fastsingular( double X[],int n,int l,int s,double &Y[]) 我不太明白你想做什么样的计算 与二维矩阵。 . 试着描述一下问题。 如果我觉得有道理,我就会帮助你。 . 我需要一步一步地看。 用这个填写一个3乘3的矩阵,把它送到那个地方。 我们应该得到一些东西。 要转移到更大的矩阵是一个技术问题。 Андрей 2009.09.08 21:52 #83 对不起,我问了一个不谦虚的问题,但你能不能以N次的费用来完成这项工作?<br / translate="no"> 好问题 :-)。 Сергей 2009.09.08 22:56 #84 好吧,让我试着解释一下......。 我在看klot的MQL代码。起初,当我找到这个链接时,我非常高兴,但在理解了代码并思考了我想要的东西后,我意识到这并不完全是我想要的... 这是一个基于二分法的eigennumbers的搜索。在阅读了一些文献后,我了解到,当我们只找到所有可能的特征值的一部分时,这种算法是好的。 但如果一个正方形矩阵相当大,比如说1000x1000,通过二分法寻找所有的特征值是低效的,这就是现代算法的奇异分解原理发挥作用的地方--将一个矩阵引向二对角形式,然后通过QR算法 将其对角化。这是我从网站http://alglib.sources.ru/,带来的文字。此外,还有以下一句话:这个简单的方案是相当可操作的,但它可以通过增加一个明显提高程序速度的内容而得到改进。下面描述的改进算法的方案几乎完全借用了LAPACK包(xGESVD子程序)。算法的完整描述:http://alglib.sources.ru/matrixops/general/svd.php 也就是说,对于我的任务,我需要一个快速的算法,处理1000x1000甚至更多的大矩阵......而且我需要准确的所有奇异值和向量,即完全分解。这就是为什么我选择了http://alglib.sources.ru/ 图书馆。特别是,因为里面已经有一些现成的C++代码。那里有一个300行的算法,但它比3000行的代码要慢。起初,我试图学习如何使用dll,以便我可以编译我自己的dll,但这并不奏效。然后我试图把它从C++改写成MQL,但对我来说,要弄清算法并把它翻译成另一种语言也显得相当困难。之后,我决定通过论坛回到dll,向专业人士寻求帮助,因为这个版本似乎更具有普遍性,你认为呢?此外,据我所知,MQL5即将发布。目前还不知道与MQL4的兼容性如何。因此,通过dll来实现这个想法可能会更好。我想知道你对这件事的看法。 由于正方形矩阵的维度在输入时是未知的,我建议将二维矩阵实现为一维矩阵,一旦知道了维度,就用ArrayResize函数来填充它。而这将是投入。然后将其转换为ap::real_2d_array,输入到rmatrixsvd。那里有一个方法。 void setbounds(int iLow1,int iHigh1,int iLow2,int iHigh2) 为阵列分配内存。这将删除旧的数组内容并释放为其分配的内存,然后分配一个新的、独立的内存区域,其大小为(iHigh1-iLow1+1)*(iHigh2-iLow2+1)元素。 新数组中第一维元素的编号从iLow1开始,以iHigh1结束,第二维也是如此。 新数组的内容是未定义的。 也就是说,在我看来,当数组的大小不被一维或二维事先知道时,这是一个非常方便的方法。 然后应该计算rmatrixsvd函数本身,它输出并给出二维矩阵中的奇异数和奇异向量,这些奇异数和奇异向量也被转换为一维矩阵,并已经输出到MQL中进行进一步处理。 这似乎就是全部。我想我没有忘记什么。 Андрей 2009.09.08 23:08 #85 很明显,你真的想用一个复杂的变体来工作。 . 你说你有一个测试案例。 在其中,你需要填写一个3乘3的矩阵。 而你知道结果是什么。 . 现在你要告诉我什么是应该去的 到函数rmatrixsvd,以及它应该输出什么。 . 我想要具体的数字。 Сергей 2009.09.08 23:40 #86 实例 尽管用第二个例子来检查可能更好。在第一种情况下,要计算eigennumbers。但原则上,从逻辑上讲,如果我们把一个3x3矩阵放在那里,我们应该在对角线上得到电子数的根,即奇异值,按降序排列 附加的文件: jgdwni.rar 18 kb Сергей 2009.09.08 23:44 #87 原则上,你可以寻找其他的例子来检查...如果这些例子不能让你满意,我再去找其他的例子。这样我们就能确定该算法工作正常... Сергей 2009.09.08 23:47 #88 来自svd.cpp的描述。 输出参数。 W - 包含按降序排列的奇异值。 U - 如果UNeeded=0,不改变。左侧奇异向量 不作计算。 如果UNeeded=1,则包含左奇异向量(第一个 min(M,N)矩阵U的列)。一个有编号元素的数组 [0...M-1, 0...Min(M,N)-1]。 如果UNeeded=2,包含完整的矩阵U。一个有编号元素的数组[0。 编号为[0...M-1, 0...M-1]的元素阵列。 VT - 如果 VTNeeded=0,则不改变。右边的奇异向量 不作计算。 如果VTNeeded=1,它包含右奇异向量 (矩阵V^T的第一个min(M,N)行)。有编号的数组 的元素[0...min(M,N)-1, 0...N-1]。 如果VTNeeded=2,包含完整的矩阵V^T。 阵列与 通过对元素[0...N-1, 0...N-1]进行编号。 Сергей 2009.09.08 23:58 #89 你看看所有的材料、描述、代码......。工作范围...以及你的工作最终定价是多少,我们将与你讨论。我希望除了完成的工作dll外,还能得到源代码...... Сергей 2009.09.08 23:59 #90 我对你寄予厚望! 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
М...是啊...真遗憾...与C++编程在Bilder...伙计,又有很多错误:'-(
:-)这个svd分解已经消耗了我很多时间,而且看起来没有尽头。
对不起,我问了一个不谦虚的问题,但你能不能以N次的费用来完成这项工作?
说实话,我已经厌倦了与之斗争......。我从9月2日开始在这个论坛上,在这之前,我有多么的挣扎...呜呜...
当然,我将来会学习C++,但这需要一些时间。
真的希望得到你的帮助。
这就是klot的奇异变换函数。
在https://www.mql5.com/ru/code/7359
>> void fastsingular( double X[],int n,int l,int s,double &Y[])
我不太明白你想做什么样的计算
与二维矩阵。
.
试着描述一下问题。
如果我觉得有道理,我就会帮助你。
.
我需要一步一步地看。
用这个填写一个3乘3的矩阵,把它送到那个地方。
我们应该得到一些东西。
要转移到更大的矩阵是一个技术问题。
好问题 :-)。
好吧,让我试着解释一下......。
我在看klot的MQL代码。起初,当我找到这个链接时,我非常高兴,但在理解了代码并思考了我想要的东西后,我意识到这并不完全是我想要的...
这是一个基于二分法的eigennumbers的搜索。在阅读了一些文献后,我了解到,当我们只找到所有可能的特征值的一部分时,这种算法是好的。
但如果一个正方形矩阵相当大,比如说1000x1000,通过二分法寻找所有的特征值是低效的,这就是现代算法的奇异分解原理发挥作用的地方--将一个矩阵引向二对角形式,然后通过QR算法 将其对角化。这是我从网站http://alglib.sources.ru/,带来的文字。此外,还有以下一句话:这个简单的方案是相当可操作的,但它可以通过增加一个明显提高程序速度的内容而得到改进。下面描述的改进算法的方案几乎完全借用了LAPACK包(xGESVD子程序)。算法的完整描述:http://alglib.sources.ru/matrixops/general/svd.php
也就是说,对于我的任务,我需要一个快速的算法,处理1000x1000甚至更多的大矩阵......而且我需要准确的所有奇异值和向量,即完全分解。这就是为什么我选择了http://alglib.sources.ru/ 图书馆。特别是,因为里面已经有一些现成的C++代码。那里有一个300行的算法,但它比3000行的代码要慢。起初,我试图学习如何使用dll,以便我可以编译我自己的dll,但这并不奏效。然后我试图把它从C++改写成MQL,但对我来说,要弄清算法并把它翻译成另一种语言也显得相当困难。之后,我决定通过论坛回到dll,向专业人士寻求帮助,因为这个版本似乎更具有普遍性,你认为呢?此外,据我所知,MQL5即将发布。目前还不知道与MQL4的兼容性如何。因此,通过dll来实现这个想法可能会更好。我想知道你对这件事的看法。
由于正方形矩阵的维度在输入时是未知的,我建议将二维矩阵实现为一维矩阵,一旦知道了维度,就用ArrayResize函数来填充它。而这将是投入。然后将其转换为ap::real_2d_array,输入到rmatrixsvd。那里有一个方法。
void setbounds(int iLow1,int iHigh1,int iLow2,int iHigh2)
为阵列分配内存。这将删除旧的数组内容并释放为其分配的内存,然后分配一个新的、独立的内存区域,其大小为(iHigh1-iLow1+1)*(iHigh2-iLow2+1)元素。
新数组中第一维元素的编号从iLow1开始,以iHigh1结束,第二维也是如此。
新数组的内容是未定义的。
也就是说,在我看来,当数组的大小不被一维或二维事先知道时,这是一个非常方便的方法。
然后应该计算rmatrixsvd函数本身,它输出并给出二维矩阵中的奇异数和奇异向量,这些奇异数和奇异向量也被转换为一维矩阵,并已经输出到MQL中进行进一步处理。
这似乎就是全部。我想我没有忘记什么。
很明显,你真的想用一个复杂的变体来工作。
.
你说你有一个测试案例。
在其中,你需要填写一个3乘3的矩阵。
而你知道结果是什么。
.
现在你要告诉我什么是应该去的
到函数rmatrixsvd,以及它应该输出什么。
.
我想要具体的数字。
实例
尽管用第二个例子来检查可能更好。在第一种情况下,要计算eigennumbers。但原则上,从逻辑上讲,如果我们把一个3x3矩阵放在那里,我们应该在对角线上得到电子数的根,即奇异值,按降序排列
原则上,你可以寻找其他的例子来检查...如果这些例子不能让你满意,我再去找其他的例子。这样我们就能确定该算法工作正常...
来自svd.cpp的描述。
输出参数。
W - 包含按降序排列的奇异值。
U - 如果UNeeded=0,不改变。左侧奇异向量
不作计算。
如果UNeeded=1,则包含左奇异向量(第一个
min(M,N)矩阵U的列)。一个有编号元素的数组
[0...M-1, 0...Min(M,N)-1]。
如果UNeeded=2,包含完整的矩阵U。一个有编号元素的数组[0。
编号为[0...M-1, 0...M-1]的元素阵列。
VT - 如果 VTNeeded=0,则不改变。右边的奇异向量
不作计算。
如果VTNeeded=1,它包含右奇异向量
(矩阵V^T的第一个min(M,N)行)。有编号的数组
的元素[0...min(M,N)-1, 0...N-1]。
如果VTNeeded=2,包含完整的矩阵V^T。 阵列与
通过对元素[0...N-1, 0...N-1]进行编号。