Bonjour à tous je suis nouvelle et ne maitrise pas vraiment Qt, je souhaiterai savoir si il est possible de convertir un code écrit sous Matlab vers Qt . Merci
Bonjour à tous je suis nouvelle et ne maitrise pas vraiment Qt, je souhaiterai savoir si il est possible de convertir un code écrit sous Matlab vers Qt . Merci
Si tu cherches un compilateur qui va produire un joli code utilisant Qt, non. Par contre, tu as des compilateurs vers du C++ (regarde du côté de MATLAB Compiler) ; avec le code généré, il doit être possible d'interfacer une GUI, ce que tu souhaites probablement. Si tu le fais à la main, c'est évidemment à 300 % faisable.
Merci dourouc05 donc en gros il faut que je réécrive tout le code Matlab sous Qt? le problème c'est que je ne sais pas comment faire
Ce que tu dis n'a pas grand sens. Tu peux réécrire ton code MATLAB en C++ puis l'utiliser avec Qt, ce pour quoi des outils peuvent t'aider.
Si tu n'as pas le compilateur, alors il faudra tout réécrire : tu pars d'une fonction, tu la codes en C++, tu vérifies que ça fonctionne (avec l'écriture de tests, si le cœur t'en dit : QtTest), puis tu pars sur une autre fonction. Tente de d'abord t'occuper de fonctions qui n'ont pas de dépendance, c'est beaucoup plus simple de détecter les erreurs (tu ne dois pas attendre d'avoir tout porté avant de remarquer qu'il y a un truc qui foire). Si tu utilises des fonctions de MATLAB (genre ode45), il faudra les réimplémenter toi-même ou utiliser une bibliothèque qui le fait (NT2, par exemple).
D'accord je vais essayer de faire ce que tu me proposes et je te dirai ce que ça donne
Bonjour dourouc05, j'ai essayé de codé en c++ la fonction Matlab et je ne comprend pas les erreurs.
Je t'explique, dans le cadre d'un projet je dois retranscrire un code Matlab ( que je n'ai pas codé et que je ne comprend pas) sous Qt.
Je n'ai pas de Matlab compiler, j'ai donc comme tu me l'avais recommandé, codé en c++. Le problème c'est que je ne comprend pas mes erreurs, et pourtant je sais que c'est un truc tout simple. Si tu peux m'aider stp voici les codes:
ce que j'ai fait en c++:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 function J=chirpfunction6(n,m,z,lambda) %chirpfunction:fonction à variation linéaire de fréquence %[n,m]:taille de l'image de départ %z:scalaire,distance à l'image %lambda:scalaire,longueur d'onde taillen=n; taillem=m; pas=1e-5;%taille d'un pixel for xi=1:n; for eta=1:m; IIz(xi,eta)=exp(i*pi*(((xi-taillen/2)*pas)^2+((eta-taillem/2)*pas)^2)/(lambda*z)); end end J(:,:)=IIz(:,:); end
En fait ça c'est une fonction en fonction de ce que tu vas modifier je pourrai l'appliquer aux autres fonction. Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #include <iostream> #include <math.h> using namespace std; double ** chirpfonction(void){ double z; double lambda; int pi=3,14; double pas=1e-5; //taille d'un pixel int tailleLig; int tailleCol; double **tab=new double*[tailleLig]; for (int i=0; i<tailleLig; i++) tab[i]=new double [tailleCol]; for( int i=0 ; i < tailleLig ; i++ ) for( int j=0 ; j < tailleCol ; j++) tab[i][j]=exp(i*pi*(((i-tailleLig/2)*pas)^2+((j-tailleCol/2)*pas)^2)/(lambda*z)); int i, j; for (int i=0; i<tailleLig; i++) delete tab[i]; delete tab; return tab[i][j] ; } int main(){ }
Première étape : indenter le code.
Deuxième étape : réfléchir un peu. Un problème m'est vite apparu : tu supprimes tab... puis tu veux y accéder ! Vu le code MATLAB, autant retourner le tableau ainsi créé.
En C++, tu n'incluras pas les en-têtes C (ce sera plus <cmath> que <math.h>, à moins d'avoir une bibliothèque standard des années 1990). Tu n'as pas non plus d'opérateur d'exposant (tu calcules un XOR), il faut utiliser pow (toujours dans cmath).
Il pourrait rester des erreurs, mais je n'ai pas mis ton code dans un compilateur (n'oublie pas de copier-coller les messages d'erreur, sinon c'est chercher une aiguille dans une meule de foin..).
J'ai fait ce que tu m'as dit et pour l'instant je n'ai plus d'erreurs merci encore
Bonsoir,
Quelques remarques sur le code MATLAB :
- Pense à pré-allouer la mémoire de la variable IIz.
- Cette ligne J(:,:)=IIz(:,:); peut se simplifier en J = IIz. Mais cette copie est inutile : tu peux directement retourner IIz.
@dourou05 : le MATLAB Compiler sert à créer un exécutable du code MATLAB. C'est la toolbox MATLAB Coder (versions 2011a et +) qui permet cela.
Pour ce qui est du code C++, outre les remarques déjà faites, je rajouterais la ligne int pi=3,14; : le séparateur décimal est le point, et il serait plus judicieux de le déclarer de type double ainsi que de rajouter quelques décimales.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager