mathelot a écrit:Enfin, cette dernière équation est à variable séparée et se résoud avec logarithme et arctangente
La première equation aussi est à variable séparée, nul besoin de chercher une solution constante. C'est pas parce qu'il y a un +10 dans l'equation initiale qu'il faut à tout pris le virer.
Bon pour revenir à l'equation elle-même. Elle est à variable séparée car elle ne fait pas apparaitre le t, toute les solutions seront des décalage temporelle d'une d'entre elle.
Je dirais que suivant les valeurs des coefficients et le domaine sur lequel tu evalue la fonction, il est normal que tu obtienne une solution quasi linéaire. Imagine que dans ce domaine la dérivée soit tres proche d'une constante.
x0=0 ; y0=0 ; x=0:1:5000;
y=ode("rk", y0 , x0 , x , f );
pour la définition du pas de subdivision, t'y va un peu trop à la légère. des pas de 1 vont sans doute t'introduire des tonnes d'erreurs. puis de 0 à 5000 je vois pas l'utilité, à mon avis tu voulais calculer pour x de 0 à 1 avec 5000 points :
0:1/4999:1 ou mieux linspace(0, 1, 5000)
pourquoi ne pas utiliser l'integration explicite, ensuite tu trace juste ta fonction. Dans mon premier poste il ya la démarche à suivre. tu suit la même méthode en appliquant tes valeurs numérique, et c'est finis. tu peut même traiter le cas générale, comme ça tu paramètre tes fonctions avec les coefficients.
function [z]=f(x,y,a)
z = a(1)*y+a(2)+a(3)./(y-a(4))
endfunction
alors plus besoin de tout changer à chaque modification des parametres. Dans les procédures qui attendent une fonction il faut alors donner :
list(f, a) comme parametre à la place de f tout seule.
sinon tu peut utiliser des paramètres globaux, mais il faut faire attention à ne pas les modifier accidentellement :
a=...; b=...; c=...; d=...;
function [z] = f(x,y)
z = a*y+b+c./(h-d)
endfunction