Aide à résoudre un problème d'importation d'une fonction depuis une dll - page 10

 

Le résultat est exactement comme décrit dans la documentation !

La fonction rmatrixsvd est "honnête" !

La question de savoir comment le vérifier n'est plus pertinente - je l'ai vérifié, il fonctionne.

En réalité, la vérification consiste à comparer la matrice source

avec le produit U x S x Vt.

.

J'ai également vérifié les matrices diagonales, toutes les tailles de lignes possibles 3...10 - tailles de colonnes 3...10.

J'ai mis un contrôle assez strict sur la différence entre la matrice originale et la matrice reconstruite :

double delta = arr(row, col) - usRvt(row, col) ;
if(delta > 0.00000000001) { throw "Bad everything" ; }

Cette condition n'a jamais fonctionné pour moi.

.

Envoyez-moi un messagedans un messageprivé.

 

Super ! !!

Il m'a envoyé un messagedans mon e-mailpersonnel.

 
boysn >> :

OK, laissez-moi essayer d'expliquer...


Si une matrice carrée est assez grande, disons 1000x1000, la recherche de toutes les valeurs propres par bissection est inefficace et c'est ici qu'intervient le principe des algorithmes modernes de décomposition singulière : réduction de la matrice à une forme bidiagonale suivie d'une diagonalisation par l'algorithme QR. C'est le texte que j'apporte du site http://alglib.sources.ru/. En outre, il y a la phrase suivante : "Ce schéma simple est tout à fait opérationnel, mais il peut être amélioré en faisant un ajout qui augmentera sensiblement la vitesse du programme. Le schéma de l'algorithme amélioré décrit ci-dessous est presque entièrement emprunté au paquet LAPACK (sous-routine xGESVD). Une description complète de l'algorithme : http://alglib.sources.ru/matrixops/general/svd.php

Je veux dire que pour mes tâches, j'ai besoin d'un algorithme rapide, travaillant avec de grandes matrices de 1000x1000 ou même plus... et j'ai besoin exactement de TOUTES les valeurs singulières avec les vecteurs, c'est-à-dire une expansion complète. C'est pourquoi j'ai choisi la bibliothèque http://alglib.sources.ru/. D'autant plus qu'il contient déjà du code C++ tout fait. Il existe un algorithme pour 300 lignes de code, mais il est plus lent que pour 3000 lignes de code.

Êtes-vous sûr d'avoir une matrice 1000x1000 non singulière (et non dénuée de sens) ?

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

Le fait est que les données réelles non aléatoires avec un million d'échantillons, c'est-à-dire 1000x1000, montrent souvent et clairement une dépendance linéaire entre les données et la matrice perd son sens. Je connais personnellement plusieurs algorithmes réels à plusieurs étapes, par exemple d'optimisation des nombres entiers, où une matrice de cette taille est créée spécifiquement pour résoudre un problème parce que le problème ne peut être résolu autrement, c'est-à-dire que le problème est résolu en augmentant sa dimensionnalité. Une matrice aussi grande est créée artificiellement, ses segments représentent en fait différentes variantes de problèmes, c'est-à-dire qu'ils sont à peine linéairement dépendants.

Avant de réaliser un programme, vous devez répondre à la question suivante : êtes-vous sûr que votre matrice 1000x1000 n'est pas dégénérée ?

 
AlexEro писал(а) >>

Êtes-vous sûr d'avoir une matrice 1000x1000 non étroite (non dénuée de sens) ?

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

Le fait est que les données réelles non aléatoires avec un million d'échantillons, c'est-à-dire 1000x1000, montrent souvent et clairement une relation linéaire entre les données et la matrice devient sans signification. Je connais personnellement plusieurs algorithmes réels à plusieurs étapes, par exemple d'optimisation des nombres entiers, où une matrice de cette taille est créée spécifiquement pour résoudre un problème parce que le problème ne peut être résolu autrement, c'est-à-dire que le problème est résolu en augmentant sa dimensionnalité. Une matrice aussi vaste est créée artificiellement ; ses segments représentent en fait différentes variantes de problèmes, c'est-à-dire qu'ils sont à peine linéairement dépendants.

Avant de réaliser un programme, vous devez répondre à la question suivante : êtes-vous sûr que votre matrice de 1000x1000 n'est pas dégénérée ?

On verra, on verra...

 
jartmailru писал(а) >>

Je vous ai envoyé un message dans un message privé.

Super ! !!

>>Je vous ai envoyé un message privé.

 

Impossible d'importer la DLL. (((

En MS Visual C++, j'ai écrit une 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

BIBLIOTHEQUE "MyDll

EXPORTATION Retour1 @1

Après la compilation, j'ai obtenu MyDll.dll et MyDll.lib.

J'ai également écrit une microprogrammation en C++ en utilisant DLL. MyDll.lib a été spécifié dans les paramètres du projet. Il fonctionne bien avec DLL.

J'ai ensuite essayé d'importer la DLL de MT4 en plaçant le fichier MyDll.dll dans le répertoire experts\libraries. Je n'ai rien trouvé sur *.lib dans la documentation, donc je ne l'ai pas mis là.
//ImportDll.mqh (dans le répertoire experts\include)
#import "MaDll.dll"

int Return1() ;

//ImportDll.mq4 (dans le répertoire experts\indicateurs)
#include <ImportDll.mqh>
int init()

{

Print("Return1="+Return1() ;

return("0) ;
}

Lorsque vous exécutez ImportDll.ex4, le message suivant s'affiche : les appels de dll ne sont pas autorisés ; 'MyDll.dll' - 'Return1'
HELP .... Je me suis déjà cassé le cerveau ((((((((((((((((((((((((( Mon ICQ : 573794562, e-mail : AKalashnikov84@mail.ru