Problèmes aux limites

Download Report

Transcript Problèmes aux limites

Problèmes aux limites
Généralités
Les problèmes aux limites sont des problèmes différentiels sur des parties de Rd pour
lesquelles les valeurs de la fonction inconnue sont fixés sur les limites (les bords) de
ces parties. Ces valeurs sont appelées valeurs aux limites.
Ce chapitre est restreint aux problèmes de dimension d=1*. Il s’agit donc d’EDO mais
ce ne sont pas des problèmes de Cauchy. Un exemple est l’équation suivante (y est la
fonction inconnue, f est donnée):
La résolution de tels problèmes se réalise par approximation
i) par différences finies ou,
ii) par éléments finis (méthode étudiée au Semestre 6).
Dans ce chapitre nous verrons la méthode par différences finies dite du « shooting ».
*Les
problèmes avec d>1 sont appelés équations aux dérivées partielles.
Problèmes aux limites
Méthode du « shooting »
La méthode du shooting cherche à résoudre le problème comme un problème à
conditions initiales en faisant varier ces dernières jusqu’à ce que les conditions aux
limites (CL) soient remplies. Exemple:
Soit us(t) la solution numérique
trouvée en utilisant la condition
initiale s. On cherche la valeur s qui
minimise la « distance » appelée
résidu: r(s) = |us(5)-40|.
r(50)
CL à t=5: y(5)=40
Problèmes aux limites
Méthode du « shooting »: exemple
On pose w1=y et w2=y’ qui donne le système: w’1=w2; w’2=-w1 pour lequel il faut 2
conditions initiales : w1(0)=0.5 et w2(0)=s. Cette dernière devra être ajustée pour
satisfaire le problème aux limites.
0.5
On programme:
>> f=@(t,w) [w(2); -w(1)];
>> s=0;
>> [tsol, wsol]=ode45(f, [0, 10], [0.5, s]);
>> plot(tsol, wsol(:, 1))
0
-0.5
0
résidu
2
4
6
8
10
1.5
On essaie s=-1…
1
0.5
>> s=-1;
>> [tsol, wsol]=ode45(f, [0, 10], [0.5, s]);
>> plot(tsol, wsol(:, 1))
…pour ajuster le tir
résidu
0
-0.5
-1
-1.5
0
2
4
6
8
10
Problèmes aux limites
Types de fonctions, portée des variables
Afin d’automatiser la recherche de la condition initiale « optimale » il faut utiliser des
fonctions « d’optimisation » fournie par Matlab. On utilisera fminsearch. Définissons
tout d’abord quelques propriétés des fonctions et la portée de leurs variables.
• fonctions principales:
function y=fp(x)
….
% - Elle présente en général des commentaires expliquant les détails nécessaire à sa maintenance
z= …* x +… % - Elle n’accède qu’aux paramètres d’entrée (ici x) et aux variables prédéfinie dans Matlab
….
% telles que pi, inf, eps, …
y=…
% - Elle peut posséder des variables « locales » (ici z) qui restent inconnues à l’extérieur de la fonction
….
% - Elle calcule les paramètres de sortie (ici y)
end
% - Elle peut faire appel à des fonctions extérieures et leur passer des paramètres
• fonction principale (FP) et sous-fonctions (SF):
function y=fp(x)
…. z=sf1(x)
…y=…
end
function z=sf1(x)
….z=…
end
function u=sf2(x)
….u=…
end
% Ces 3 fonctions sont sauvées dans un même fichier « fp.m »
% La FP peut appeler une de ses SF
% La FP peut être appelée de l’extérieur qui pourra récupérer y
% Les SF ne peuvent être appelées que de la FP ou d’autres SF
% Les SF ne connaissent que les variables passées (ici x) et les prédéfinies: pi, inf, …
% L’intérêt des SF est de ne sauver qu’un seul fichier qui peut contenir de nombreuse SF
Problèmes aux limites
Fonctions nichées, fminsearch
• fonction principale (FP) et fonctions nichées (FN):
function y=fp(x)
% cette fonction est sauvée dans un fichier « fp.m »
…. z=fn(x)
….a=…
function z=fn(x)
% - Cette fonction est « nichée » dans fp. Elle accède aux variables qu’on lui
….z=…+a +u…
% passe (ici x) ET aux variables locales de fp (ici a, z, u, …)
end
% -L’intérêt des FN est justement qu’elle accède à des variables sans qu’il soit
….u=…
% nécessaire de les lui passer en paramètres d’entrée
…y=…
% - La FN ne peut pas être appelée de l’extérieur de la FP
end
La fonction fminsearch possède 2 entrées et une sortie: x = fminsearch(fun, x0) avec :
fun: la poignée de la fonction dont on cherche l’abscisse pour laquelle fun présente un
minimum. ATTENTION la fonction dont fun est la poignée ne peut avoir qu’un seul
argument d’entrée et un seul de sortie: elle doit donc être de la forme y=f(x).
x0: une valeur initiale d’une méthode du type itératif
x: la valeur pour laquelle f(x) est minimale
Un troisième paramètre d’entrée peut être utilisé en conjonction avec optimset comme
pour fzero, il s’agit des options.
Pour notre méthode de « shooting » il nous faut minimiser le résidu…
Problèmes aux limites
Exercice: shooting
Résoudre, si possible, les problèmes suivants. Les CL devront être remplies à 0.1 prés.
Problèmes aux limites
Exercice: fminsearch
1/ Représenter y= (1-x.^2).*sin(1-x) dans le domaine [-10, 10]. Chercher les abscisses
des minimas de y en utilisant fminsearch avec différentes valeurs initiales. fminsearch
trouve t’elle l’abscisse du minimum absolu dans tous les cas ?
2/ Soit la fonction paramétrée « myfun »:
function y=myfun(p, x)
y=-(1-x.^2).*sin(1-p*x);
end
Que font les lignes de code suivantes:
>> p=0;
>> f=@(x) myfun(p, x);
>> ezplot(f, [-10,10])
>> xmin=fminsearch(f, 5)
>> hold on
>> p=1;
>> f=@(x) myfun(p, x);
>> ezplot(f, [-10,10])
>> xmin=fminsearch(f, 5)
Pourquoi avoir créé une fonction anonyme f à chaque fois ?
Problèmes aux limites
Exercice: shooting
Les lignes de code ci-dessous résolvent un problème aux limites par la méthode du
shooting. Commenter ce programme. Proposer une amélioration pour par exemple
résoudre les problèmes de la diapo précédente.
function [tsol, wsol, s]=shooting
tspan=[0,10];
alpha=0;
beta=4;
f=@(t,w) [w(2); sqrt(t)-0.1*w(1).^2-0.2*w(2)];
function residu=distance(ci)
[t, w]=ode45(f, tspan, [alpha;ci]);
residu=abs(beta-w(end,1));
end
s = fminsearch(@distance,-1.5);
[tsol,wsol]=ode45(f,tspan,[alpha;s]);
end