Bonjour.

Je suis actuellement en stage et une partie de mon sujet de stage est de simuler un phénomène physique sur matlab. L'équation différentielle à utiliser est de la forme suivante: a*D4u-b*D2u=f(u) avec f(u)=c*((u+d)^-5+(u+d)^-11).
Avec pour conditions aux limites: u(0)=0 u(l)=O D2u(0)=0 D2u(l)=0
N'ayant jamais utilisé matlab auparavant, j'ai un peu tout essayé.
J'ai commencé par utiliser la méthode avec ODE45, mais celle ci fonctionne uniquement avec des conditions initiales et non des conditions aux limites. Puis je me suis tournée vers la méthode utilisant bvp4c.

pour l'instant mon programme est de la forme:

document deflection.m:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
function yprime=deflection(x,y)
yprime= [y(2);y(3);y(4);(b/a)y(3)+(c/a)*((y(1)+d)^-5+(y(1)+d)^-11)]
correspond à la décomposition de l'équation d'ordre 4 en 4 équations d'ordre 1, dans cette partie je déclare aussi la valeur de toutes les constantes

document bc.m

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
function res=bc(y0,yl)
res=(y0(1);yl(1);y0(3);yl(3))
ici je déclare toutes mes conditions aux limites, mais j'ai plusieurs interrogations. Ai-je le droit de déclarer ces 4 conditions et est-ce que je dois déclarer 4 variables dans res=bc(yo,yl,.,.)?

Enfin dans mon programme principale j'ai:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
solinit=bvpinit(linspace(0,l,25),[0 1])
sol=bvp4c(@deflection;@bc;solinit)
ici mon problème est le bvpinit. j'ai beau lire tous les tutoriels je ne comprends pas ce qu'est ce bvpinit. Je comprends la partie linspace(0,l,25) qui correspond à un maillage, mais je ne comprends pas la partie entre crochets. Dans les tutoriels ils parlent de guess?!

Enfin j'ai essayé de résoudre cette équation en utilisant dsolve, mais à nouveau je ne sais pas si je peux déclarer 4 conditions aux limites.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
>> eq = '1,19*D4y+0,2*D2y=2*PI*(38,177^2)*(3,859*(10^-9)*((y+0,31)^-11)+2,43*(10^-6)*((y+0,31)^-5))'
>> init = 'y(0)=0,y(5,7)=0,D2y(0)=0,D2y(5,7)=0'
>> y=dsolve('eq','init','x')
réponse de matlab:
??? Error using ==> mupadmex
Error in MuPAD command: Unknowns must be functions [ode::new]

Je sais que j'en demande beaucoup, mais je me sens coincée car après avoir lu tous les tutoriels possibles je ne comprends toujours pas.
Je pense qu'il me manque quelques notions de base en programmation.

Merci de m'aider. =)

Djules