تسجيل الدخول

مشاهدة النسخة كاملة : comment résoudre ce probleme dans matlab


khawla MI
2012-05-09, 15:21
السلام عليكم
encore une fois un probleme dans le temps de calcule
le programme qui va etre décrit per la suite prendre plus de 35 seconds pour s'executer je veut minimiser ce temps à 0.08 s est ce que ça est fesaible et s'il est le cas comment je peut le minimiser
voila le programme
global nx
global ny
global dx
global dy
global PD
I=imread('lena.jpg');
I=rgb2gray(I);%I est une image
[X Y]=size(I);
J= zeros(X,Y); %Image interpolée
dx = 26;dy = 26;
Tdx = 0:dx:X-1;Tdx = [dx , Tdx, X-1, X-1+dx];
Tdy = 0:dy:Y-1;Tdy = [dy , Tdy, Y-1, Y-1+dy];
nx = length(Tdx);ny = length(Tdy);
PD = zeros(nx*ny,2);
k=1;
for i=1:length(Tdx)
for j=1:length(Tdy)
PD(k,1)=round(Tdx(i)); PD(k,2)=round(Tdy(j));
k=k+1;
end
end
for x=1:X,
for y=1:Y,
T=Interpolation(x-1,y-1) + 1 ;
x1 = max(round(x),1); x1=min(x1,X);
y1 = max(round(y),1); y1=min(y1,Y);
J(x,y) = I(x1,y1);
end
end

Où Interpolation est une fonction définit comme:
function Inter = Interpolation(x,y)
global nx
global ny
global dx
global dy
global PD
i = floor(x/dx)-1; j = floor(y/dy)-1;
u=(x/dx)-floor(x/dx); v=(y/dy)-floor(y/dy);
Inter =[0,0];
for l=0:3
for m=0:3
k = (i+l+1)*nx + (j+m+2);

Inter = Inter + Auxiliaire(u,l)*Auxiliaire(v,m).*PD(k,:);
end
end

de meme la fonction Auxiliaire est definit par:
function A = Auxiliare(x,i)
switch i
case 0
A=((1-x).*(1-x).*(1-x))/6;
case 1
A=(3*x.*x.*x - 6*x.*x + 4)/6;
case 2
A=(-3*x.*x.*x + 3*x.*x + 3*x +1)/6;
case 3
A=x.*x.*x/6;
otherwise
disp('entré non valide.')
end

la fonction qui prend beaucoup de temps est la fonction Interpolation je veut la minimiser parce que je doit faire appelle de cette fonction dans des autres fonctions et pour un nombre important de fois et ça ne m'aide pas avec un temps de calcule égale à 30 seconds est ce que vous pouver m'aider

merci d'avance

khawla MI
2012-05-12, 11:03
قيل لي أن ال mex file يمكنها أن تحل مشكل بطء تنفيذ أي برنامج في الماتلاب هل هذا صحيح؟ و إن كان كذلك كيف بإمكاني استخدامها؟ أرجو منكم يا أهل الاختصاص التكرم علي ولو بفكرة ربما تأتي بفائدة
أشكركم
تقبلو تحياتي

djamel123
2012-05-13, 20:08
السلام عليكم
-أنا عندما جربت تنفيذ البرنامج استغرق تقريبا 4 ثواني فقط بدون أن أغير شئ، ربما عندك الجهاز ثقيل.
- بالنسبة لـ mex file فهي فعلا تنقص الوقت لكن ليس بدرجة كبيرة جدا واذا أردتي استعمالها فيجب كتابة الدالة Interpolation و Auxilare بلغة c ثم تحويلها عن طريق كتابة مايلي:
mex Interpolation.c
mex Auxilare.c
ثم تنفيذ البرنامج.
و هنا (http://www.ricou.eu.org/matlab/cours3/node9.html)مثال عن كتابة دالة mex واذا أحتجتي مساعدة اظافية نحن حاضرون.

khawla MI
2012-05-14, 20:13
السلام عليكم

في الحقيقة لم أفكر في إمكانية أن يكون المشكل في الجهاز أعدت تنفيذه للتو حيث استخدمت ال alprofiler ولم يتغير معي شيء لكن بما أنه نفذ عندك بهدا الوقت سوف أنظر في هدا المشكل
ال mex function هي الأخرى حل مثالي
أشكرك أخي الكريم على المعلومة و على مساعدتي في كل مرة
شكرا

fayssal22
2012-05-29, 11:04
vous pouvez utiliser les mex files ils minimisent considérablement le temps de calcul jusqu'à 75% notamment si ton code comporte plusieurs boucles, il est a noter que les tu peux mexer le fortron ou C.
la 2 solution est la pré-al******** de mémoire si vous utiliser des vecteurs ou des matrices.....etc

khawla MI
2012-06-22, 16:30
السلام عليكم

اود تعلم كيفية ادراج الmex function الى برنامج ماتلاب ادا كان ممكن يا أخي جمال و يا أخي فيصل و يا كل من لديه معلومة امدادي بمثال سهل يمككني فهمه
مثلا مادا افعل لو اردت كتابة هادا الكود و مناداته في الماتلاب عن طريق ال mex file

function k = Interpoler(I,x,y,q)
[X,Y]=size(I);
switch q
case 1
[m,n] = size(I);
x1 = round(x); x1 = max(x1,1); x1=min(x1,m);
y1 = round(y); y1 = max(y1,1); y1=min(y1,n);
k = I(x1,y1);
case 2
n=floor(x);n=max(n,1);n=min(n,X-1);
m=floor(y);m=max(m,1);m=min(m,Y-1);
sigma_x=x-n;
sigma_y=y-m;
k=(1-sigma_x)*(1-sigma_y)*I(n,m)+sigma_x*(1-sigma_y)*I(n+1,m)+(1-sigma_x)*sigma_y*I(n,m+1)+sigma_x*sigma_y*I(n+1,m+ 1);

otherwise
disp('invalide data');
end

c'est un programme qui fait l'interpolation d'une image
a titre d'exemple

merci d'avance

hark
2012-06-22, 22:28
عمل رائع بارك الله فيك

fayssal22
2012-06-25, 23:48
السلام عليكم

اود تعلم كيفية ادراج الmex function الى برنامج ماتلاب ادا كان ممكن يا أخي جمال و يا أخي فيصل و يا كل من لديه معلومة امدادي بمثال سهل يمككني فهمه
مثلا مادا افعل لو اردت كتابة هادا الكود و مناداته في الماتلاب عن طريق ال mex file

function k = Interpoler(I,x,y,q)
[X,Y]=size(I);
switch q
case 1
[m,n] = size(I);
x1 = round(x); x1 = max(x1,1); x1=min(x1,m);
y1 = round(y); y1 = max(y1,1); y1=min(y1,n);
k = I(x1,y1);
case 2
n=floor(x);n=max(n,1);n=min(n,X-1);
m=floor(y);m=max(m,1);m=min(m,Y-1);
sigma_x=x-n;
sigma_y=y-m;
k=(1-sigma_x)*(1-sigma_y)*I(n,m)+sigma_x*(1-sigma_y)*I(n+1,m)+(1-sigma_x)*sigma_y*I(n,m+1)+sigma_x*sigma_y*I(n+1,m+ 1);

otherwise
disp('invalide data');
end
c'est un programme qui fait l'interpolation d'une image
a titre d'exemple

merci d'avance


عذرا على التاخير لانني ظننت ان الموضوع فقد اهميته
شوفي



les mex files ce sont des fichiers ecrits en C ou fortran avec une syntaxe légèrement différente au langage c ou fortran standard
par exemple votre fonction interpoler.c
tapez la commande mex interpoler.c ,dans command window, et vous aurez une nouvelle fonction sous forme .dll (selon la version du matlab et le système d'exploitation) dans votre cas interpoler.dll
il suffit d'appeler cette fonction dans le programme principal

a l’égard des exemples il y en a beaucoup sur le net............

si il y a quoi que ce soit n'hésitez pas a demander

khawla MI
2012-06-26, 15:57
où peut je trouve le fichier interpoler.c compiler j'ai fait tous ce que vous avez disez j'ai compiler mon fichier dans la commande windows et aprés ?? qu'est ce que je doit faire ??
merci pour votre réponse merci pour votre aide

fayssal22
2012-06-26, 19:25
où peut je trouve le fichier interpoler.c compiler j'ai fait tous ce que vous avez disez j'ai compiler mon fichier dans la commande windows et aprés ?? qu'est ce que je doit faire ??
merci pour votre réponse merci pour votre aide


tu dois l’écrire toi même en langage C (ce n'est pas une simple conversion de l’extension .m vers .c) .....etc
je te conseille de lire ce livre avant de commencer la programmation des mex files
il s'appelle

MATLAB C/C++ Book c'est un excellent ouvrage avec plusieurs exercices résolus

sinon je le ferais moi même, il suffit de poser l’énoncé du problème d'une façon bien détaillée

khawla MI
2012-07-02, 21:39
Machkour akhi fayssal barak allaho fikom wa wafakakomlima yohibo wa yarda

solaimane
2012-07-06, 17:50
شكرااا جزيلا اخي العزيز