帮助解决从dll中导入函数的问题 - 页 10

 

结果和文件中描述的一模一样!

函数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"; }

这种情况对我来说从来都是无效的。

.

在私人 信息中给我发了 一条信息。

 

太好了!!!。

我已经在私信中给你发了 一条信息。

 
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矩阵不是退化的吗?

 
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的矩阵不是退化的吗?

让我们看看,我们会看到...

 
jartmailru писал(а)>>

我已经在私信中给你发了一条信息。

太好了!!!。

>>给你发了一条私人信息。

 

不能导入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