Bonjour,
J'ai une subroutine développer sur fortran que je cherche a convertir to matlab code, j'ai essayé de la convertir via f2matlab mais j'ai eu des errors
Je vous demande svp de m'aider a convertir cette subroutine
Cdlt
Bonjour,
J'ai une subroutine développer sur fortran que je cherche a convertir to matlab code, j'ai essayé de la convertir via f2matlab mais j'ai eu des errors
Je vous demande svp de m'aider a convertir cette subroutine
Cdlt
Il faudrait que nous donne plus de détails sur les erreurs que obtiens.
De ce que j'en sais, la fonction f2matlab fonctionne avec du fortran 90. Ensuite cette fonction ne permet que la conversion d'instructions simples.
Après une lecture rapide de ton script, tes instructions ne sont pas si basique que ça. Par exemple, je ne crois pas que la fonction f2matlab gère l'instruction GO TO.
A priori tu vas devoir mettre les doigts dans les rouages de ton code et le traduire en matlab instruction par instruction.
j'avais eu à faire une conversion fortran vers matlab il y a quelques temps
j'ai du la faire à la main, f2matlab n'ayant pas fonctionner
et les go to, si y en a beaucoup, c'est vraiment chiant
courage
sinon tu peux aussi executer ta routine fortran compilée depuis matlab via les fichiers mex
Bonjour,
Je vous remercie d'abord pour vos réponses,
Beltharion; ci-joint le fichier que j'ai pu convertir via f2matlab v4.0
le feb; je ne connais pas assez fortran pour convertir se code vers matlab vue que j'ai fait tous mon program sur Matlab
je vous demande vivement si quelqu'un pourra m'aider pour convertir cette subroutine pour résoudre une équation non linéaire. Comme mentionné avant j'ai pu obtenir un resultat de conversion mais ça reste toujours non exploitable .
Merci d'avance pour vos réponses
Pour commencer tu devrais copier le fichier converti dans ton éditeur matlab.
Tu vas t'apercevoir que ton est rempli d'erreurs.
Tu vas devoir inspecter ligne par ligne et corriger les erreurs. Il faut que tu remettes en forme tes boucles, enlever toute les déclarations de variable type fortran (ex : double x,y,z ...).
Il faut que tu vérifies toute les fonctions et instructions utilisées, comme writeFmt ou GO TO et que tu les transcrives en matlab. Si tu ne comprends pas les fonctions tu peux toujours aller faire un tours sur dans la section fortran.
voilà le début
et ça donne
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 function [n,x,f,ajinv,dstep]=ns01a(n,x,f,ajinv,dstep(varargin),; persistent l m w ; format_86=['1']; format_8=[ '\n ' , '\n ' ,'%4x','I','%7x','X(I)','%12x','F(I)', '\n ' , '\n ' ,repmat(['%5u',repmat('%17.8f',1,2)] ,1,1)]; format_9=[ '\n ' ,'%5x','LA SOMME DES CARRES EST','%17.8f']; format_26=[ '\n ' , '\n ' , '\n ' ,'%5x','AT THE','%5u','TH CALL OF CALFUN WE HAVE']; format_710=['%2x','%16.8f','%2x','%16.8f','%2x','%16.8f','%2x','%16.8f']; format_720=['%2x','%16.8f', '\n ' ]; format_903=['%4x','MATRICE IDENTITE']; rig=[];tnl=[];ma=[];y=[];imp=[];r=[];a=[];d=[]; 1dmax,acc,maxfun,iprint,w,imp,y,ma,rig,tnl,maxc,r,fsq); if isempty(w), w=zeros(1,1); end; 1,ajinv(5,5),bjinv(5,5),cjinv(5,5); 1,rig(6,6),tnl(6,6,6,6),ma(6,6),d,a(900); if isempty(l), l=zeros(1,5); end; if isempty(m), m=zeros(1,5); end; maxc=0; nt=n+4; ntest=nt; dtest=(n+n)-0.5; nx=n.*n; nf=nx+n; nw=nf+n; mw=nw+n; ndc=mw+n; nd=ndc+n; fmin=0.0d0; dd=0.0d0; dss=dstep.*dstep; dm=dmax.*dmax; dmm=4..*dm;
Ça va être long et fastidieux, bon courage.
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
43
44
45
46 % function [n,x,f,ajinv,dstep]=ns01a(n,x,f,ajinv,dstep(varargin)); function [n,x,f,ajinv,dstep]=ns01a(n,x,f,ajinv,dstep) persistent l m w ; %% la syntaxe entre les lignes 5 et 11 n'est pas reconnu par matlab; %% S'il s'agit d'un affichage utilise la fonction disp % format_86='1'; % format_8=[ '\n ' , '\n ' ,'%4x','I','%7x','X(I)','%12x','F(I)', '\n ' , '\n ' ,repmat(['%5u',repmat('%17.8f',1,2)] ,1,1)]; % format_9=[ '\n ' ,'%5x','LA SOMME DES CARRES EST','%17.8f']; % format_26=[ '\n ' , '\n ' , '\n ' ,'%5x','AT THE','%5u','TH CALL OF CALFUN WE HAVE']; % format_710=['%2x','%16.8f','%2x','%16.8f','%2x','%16.8f','%2x','%16.8f']; % format_720=['%2x','%16.8f', '\n ' ]; % format_903=['%4x','MATRICE IDENTITE']; rig=[];tnl=[];ma=[];y=[];imp=[];r=[];a=[];d=[]; % 1dmax,acc,maxfun,iprint,w,imp,y,ma,rig,tnl,maxc,r,fsq); if isempty(w) w=zeros(1,1); end % Les deux lignes suivantes doivent etre explicitees autrement % exemple : Ajinv=ajinv(5,5); % 1,ajinv(5,5),bjinv(5,5),cjinv(5,5); % 1,rig(6,6),tnl(6,6,6,6),ma(6,6),d,a(900); if isempty(l) l=zeros(1,5); end if isempty(m) m=zeros(1,5); end; maxc=0; nt=n+4; ntest=nt; dtest=(n+n)-0.5; nx=n.*n; nf=nx+n; nw=nf+n; mw=nw+n; ndc=mw+n; nd=ndc+n; % fmin=0.0d0; fmin=0; % dd=0.0d0; dd=0; dss=dstep.*dstep; dm=dmax.*dmax; % dmm=4..*dm; dmm=4.*dm;
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Bonjour tout le monde,
Merci beaucoup Beltharion si j'ai bien compris, je dois convertir boucle par boucle via f2matlab mais le souci c’est que je connais pas trop fortran, c’est pour ça j’ai essayé un convertisseur comme f2matlab
merci pour votre aide
Tu dois pouvoir trouver des cours de fortran sur internet sans soucis.
Dans ta routine fortran tu as quelques fonctions que le compilateur ne peut pas traduire. Pour ces fonctions tu devras faire une petite recherche sur google. Certaine de ces fonctions nécessiterons très certainement de remanier un peu le code.
Avant de faire ça tu devrais essayer les fichiers mex comme t'a proposé le fab. Ça te prendra beaucoup moins de temps que de réécrire ta routine.
est ce que tu peux m'expliquer comment ça fonctionne les fichiers mex merci
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