帮助解决从dll中导入函数的问题 - 页 10 1...345678910 新评论 Андрей 2009.09.09 03:00 #91 结果和文件中描述的一模一样! 函数rmatrixsvd是 "诚实的"! 如何检查它本身的问题已经不重要了--我检查过了,它是有效的。 实际上,该检查包括比较源矩阵 与积U x S x Vt。 . 也检查了对角线矩阵,所有可能的行大小为3...10 - 列大小为3...10。 我对原始矩阵和重建的矩阵之间的差异进行了相当严格的检查。 double delta = arr(row, col) - usRvt(row, col); if(delta > 0.00000000001) { throw "Bad everything"; } 这种情况对我来说从来都是无效的。 . 在私人 信息中给我发了 一条信息。 Help solve a problem 矩阵实用工具,扩展矩阵和向量的标准库功能 神经网络变得轻松(第五十四部分):利用随机编码器(RE3)进行高效研究 Сергей 2009.09.09 08:26 #92 太好了!!!。 我已经在私信中给你发了 一条信息。 [删除] 2009.09.09 08:35 #93 boysn >> : 好吧,让我试着解释一下......。 如果一个正方形矩阵足够大,比如1000x1000,那么通过二分法寻找所有的特征值是低效的,在这里,现代奇异分解算法的原理就发挥作用了:将矩阵还原为二对角线形式,然后通过QR算法进行对角化。这是我从网站http://alglib.sources.ru/,带来的文字。此外,还有以下一句话:这个简单的方案是相当可操作的,但它可以通过增加一个明显提高程序速度的内容而得到改进。下面描述的改进算法的方案几乎完全借用了LAPACK包(xGESVD子程序)。对该算法的完整描述:http://alglib.sources.ru/matrixops/general/svd.php 也就是说,对于我的任务,我需要一个快速的算法,处理1000x1000甚至更多的大矩阵......而且我需要准确的所有奇异值和向量,即完全扩展。这就是为什么我选择了http://alglib.sources.ru/ 图书馆。特别是,因为里面已经有一些现成的C++代码。有一种300行代码的算法,但它比3000行代码的速度要慢。 你确定你会有一个1000x1000的矩阵非星形的(不是无意义的)吗? https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0 问题是,真正的非随机数据有一百万个样本,即1000x1000,经常清楚地显示出数据之间的线性依赖,矩阵就失去了意义。我个人知道几个真正的多阶段算法,例如,整数优化的算法,这样的大矩阵是专门为解决一个问题而创建的,因为这个问题不能以其他方式解决,也就是说,问题是通过增加维度来解决的。这样一个大矩阵是人为制造的,它的各段实际上代表了问题的不同变体,也就是说,它们几乎没有线性关系。 在你做程序之前,你应该回答这个问题:你确定你的1000x1000矩阵不是退化的吗? Сергей 2009.09.09 08:56 #94 AlexEro писал(а)>> 你确定你会有一个1000x1000的矩阵是不窄的(不是无意义的)? https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0 问题是,真正的非随机数据有一百万个样本,即1000x1000,经常清楚地显示数据之间的线性关系,矩阵变得毫无意义。我个人知道几个真正的多阶段算法,例如,整数优化的算法,这样的大矩阵是专门为解决一个问题而创建的,因为这个问题不能以其他方式解决,也就是说,问题是通过增加维度来解决的。这么大的矩阵是人为制造的;它的各段实际上代表了问题的不同变体,也就是说,它们几乎没有线性关系。 在你做程序之前,你应该回答这个问题:你确定你的1000x1000的矩阵不是退化的吗? 让我们看看,我们会看到... Сергей 2009.09.09 10:48 #95 jartmailru писал(а)>> 我已经在私信中给你发了一条信息。 太好了!!!。 >>给你发了一条私人信息。 Andrew84 2009.10.14 08:02 #96 不能导入DLL。((( 在MS Visual C++中,我写了一个DLL: //MyDll.h #define MY_EXPORT extern "C" __declspec ( dllexport ) MY_EXPORT int CALLBACK Return1(); //MyDll.cpp MY_EXPORT int CALLBACK Return1() { return 1; } //MyDll.def LIBRARY "MyDll" 出口 返回1 @1 编译后,我得到了MyDll.dll和MyDll.lib。 还用C++编写了一个使用DLL的微型程序。在项目设置中指定了MyDll.lib。它在DLL中运行良好。 然后我尝试从MT4导入DLL,把MyDll.dll文件放在experts/libraries目录下。我在文档中没有发现关于*.lib的内容,所以我没有把它放在那里。 //ImportDll.mqh(在 experts/include 目录中) #import "MyDll.dll" int Return1(); //ImportDll.mq4 (in experts\indicators directory) #include <ImportDll.mqh> int init() { Print("Return1="+Return1(); return("0); } 当运行ImportDll.ex4时,它说:不允许调用dll;'MyDll.dll' - 'Return1' HELP ....我已经打破了我的大脑 ((((((((((((((((((((((((( 我的ICQ:573794562,电子邮件:AKalashnikov84@mail.ru Help solve a problem DLL error 126 DLL导入问题 1...345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
结果和文件中描述的一模一样!
函数rmatrixsvd是 "诚实的"!
如何检查它本身的问题已经不重要了--我检查过了,它是有效的。
实际上,该检查包括比较源矩阵
与积U x S x Vt。
.
也检查了对角线矩阵,所有可能的行大小为3...10 - 列大小为3...10。
我对原始矩阵和重建的矩阵之间的差异进行了相当严格的检查。
double delta = arr(row, col) - usRvt(row, col);
if(delta > 0.00000000001) { throw "Bad everything"; }
这种情况对我来说从来都是无效的。
.
在私人 信息中给我发了 一条信息。
太好了!!!。
我已经在私信中给你发了 一条信息。
好吧,让我试着解释一下......。
如果一个正方形矩阵足够大,比如1000x1000,那么通过二分法寻找所有的特征值是低效的,在这里,现代奇异分解算法的原理就发挥作用了:将矩阵还原为二对角线形式,然后通过QR算法进行对角化。这是我从网站http://alglib.sources.ru/,带来的文字。此外,还有以下一句话:这个简单的方案是相当可操作的,但它可以通过增加一个明显提高程序速度的内容而得到改进。下面描述的改进算法的方案几乎完全借用了LAPACK包(xGESVD子程序)。对该算法的完整描述:http://alglib.sources.ru/matrixops/general/svd.php
也就是说,对于我的任务,我需要一个快速的算法,处理1000x1000甚至更多的大矩阵......而且我需要准确的所有奇异值和向量,即完全扩展。这就是为什么我选择了http://alglib.sources.ru/ 图书馆。特别是,因为里面已经有一些现成的C++代码。有一种300行代码的算法,但它比3000行代码的速度要慢。
你确定你会有一个1000x1000的矩阵非星形的(不是无意义的)吗?
https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0
问题是,真正的非随机数据有一百万个样本,即1000x1000,经常清楚地显示出数据之间的线性依赖,矩阵就失去了意义。我个人知道几个真正的多阶段算法,例如,整数优化的算法,这样的大矩阵是专门为解决一个问题而创建的,因为这个问题不能以其他方式解决,也就是说,问题是通过增加维度来解决的。这样一个大矩阵是人为制造的,它的各段实际上代表了问题的不同变体,也就是说,它们几乎没有线性关系。
在你做程序之前,你应该回答这个问题:你确定你的1000x1000矩阵不是退化的吗?
你确定你会有一个1000x1000的矩阵是不窄的(不是无意义的)?
https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0
问题是,真正的非随机数据有一百万个样本,即1000x1000,经常清楚地显示数据之间的线性关系,矩阵变得毫无意义。我个人知道几个真正的多阶段算法,例如,整数优化的算法,这样的大矩阵是专门为解决一个问题而创建的,因为这个问题不能以其他方式解决,也就是说,问题是通过增加维度来解决的。这么大的矩阵是人为制造的;它的各段实际上代表了问题的不同变体,也就是说,它们几乎没有线性关系。
在你做程序之前,你应该回答这个问题:你确定你的1000x1000的矩阵不是退化的吗?
让我们看看,我们会看到...
我已经在私信中给你发了一条信息。
太好了!!!。
>>给你发了一条私人信息。
不能导入DLL。(((
在MS Visual C++中,我写了一个DLL:
//MyDll.h
#define MY_EXPORT extern "C" __declspec ( dllexport )
MY_EXPORT int CALLBACK Return1();
//MyDll.cpp
MY_EXPORT int CALLBACK Return1() { return 1; }
//MyDll.def
LIBRARY "MyDll"
出口 返回1 @1
编译后,我得到了MyDll.dll和MyDll.lib。
还用C++编写了一个使用DLL的微型程序。在项目设置中指定了MyDll.lib。它在DLL中运行良好。
然后我尝试从MT4导入DLL,把MyDll.dll文件放在experts/libraries目录下。我在文档中没有发现关于*.lib的内容,所以我没有把它放在那里。
//ImportDll.mqh(在 experts/include 目录中)
#import "MyDll.dll"
int Return1();
//ImportDll.mq4 (in experts\indicators directory)
#include <ImportDll.mqh>
int init()
{
Print("Return1="+Return1();
return("0);
}
当运行ImportDll.ex4时,它说:不允许调用dll;'MyDll.dll' - 'Return1'
HELP ....我已经打破了我的大脑 ((((((((((((((((((((((((( 我的ICQ:573794562,电子邮件:AKalashnikov84@mail.ru