Bonjour,

je suis actuellement en train de travailler sur un projet pour lequel je dois tirer les coefficients de pression d'un logiciel de simulation (Xflr5), les importer sur Matlab et leur faire subir une interpolation afin d'en tirer un modèle mathématique analytique qui colle au mieux au profil de ces données.

Pour cela, j’ai utilisé la fonction spline de matlab qui permet d’interpoler les données discrètes qu’on lui rentre en paramètre par des splines cubiques (d’ordre 3). En appelant x et Cpv mes données « x » et « y », le code permettant d’obtenir la fonction analytique issue de l’interpolation est :

Je souhaite ensuite l’intégrer entre 2 bornes en écrivant le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Int = integral(@(x)ppval(cs,x),0,1) ;
qui me renvoie bien la valeur que je souhaite, @(x)ppval(cs,x) étant une « handle function » créée à partir de la fonction analytique issue de l’interpolation précédente.

Je veux ensuite dériver ce modèle analytique en écrivant le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Cs_derivee = fnder(Cs,1)   % « 1 » correspond à une dérivation d’ordre 1
Puis utiliser cette dérivée de manière analytique en utilisant le code : @(x)ppval(Cs_derivee,x) pour pouvoir l’intégrer entre autre.
Donc jusqu’ici tout va bien ! Mon problème est de pouvoir utiliser ce modèle analytique issu de « ppval » pour résoudre l’équation d’inconnue x :

(Cpv(x)/A)*sqrt(x*(dCpv/dx)(x)) = B où A et B sont 2 constantes connues

J’ai donc essayé de résoudre quelque chose de simple à partir de mes données comme :

(dCpv/dx)(x) = B

en écrivant le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
eq = @(x)ppval(Cs_derivee,x) = B ;
a = solve(eq,x) ;
A = double(a) ;  %pour récupérer les solutions 
L’erreur de matlab a lieu au niveau de « a = solve(eq,x) ; » :

Error using message
In 'symbolic:solve:errmsg1', data type supplied is incorrect for parameter {1}.
Error in solve>processString (line 354)
      error(message('symbolic:solve:errmsg1', v))
Error in solve>getEqns (line 284)
      eqns = processString(eqns, v, vc);
Error in solve (line 160)
[eqns,vars,options] = getEqns(varargin{:});
Pourquoi ne peut-on pas appliquer cette séquence de code ? Et en particulier pourquoi ne peut-on pas utiliser la fonction « solve » en lui rentrant en argument une « handle_function » ?

J’ai aussi essayé de définir une variable symbolique locale z comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
syms z
eq = ppval(Cs_derivee,z) = B ;
a = solve (eq,z) ;
A = double(a);
Cette fois le problème vient de la definition de l’équation à résoudre “eq”. Matlab me sort l’erreur :

Error using histc
First Input must be a real non-sparse numeric array.
Error in ppval (line 67)
if lx, [~,index] = histc(xs,[-inf,b(2:l),inf]);
J’ai épuisé mes idées pour résoudre une equation à partir de ppval. Quelqu’un peut-il m’aider ? Ca me débloqquerait radicalement !!
Merci beaucoup !!