Logo Futura-Sciences





Archives du sujet :

Méthode de quasi-newton avec matlab



Venez poser vos question sur le forum "Mathématiques du supérieur"


rogeg
14/12/2006, 11h28
Bonjour j'ai essayé de résoudre cette équation : f(X)=X^3-0.7 avec Xo=-2 à l'aide de la methode de Newton sur le logiciel matlab.
mais comme la dérivée passe par zéro impossible de résoudre avec ce programme

méthode de Newton
clear all
close all
%INTERVALLE DE RECHERCHE
Xmin=-2;
Xmax=5;
Ymin=Hx(Xmin);%"appel du sous-programme HX"
Ymax=Hx(Xmax);%"qui calule f(x)/f'(x)"
Niter=20; %"nombre d'itérations"
r=zeros(Niter,1);
r(1)=Xmin;
for iter=2:Niter
r(iter)=r(iter-1)-Hx(r(iter-1));
if (abs(r(iter)-r(iter-1))<=10^-6)
racine=r(iter)
break
end
end
disp(['la racine vaut ' num2str(racine)])
disp(['la valeur de f(racine) vaut ' num2str(Fx(racine))])
disp(['le nombre d itérations ' num2str(iter)])
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

%Calcul de la fonction Hx
% défini par f(x)/f'(x)
function H=Hx(x)
H=(x^3-0.7)/(3x^2);
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

On ma conseillé d'utiliser la méthode de quasi-newton que je ne connai pas, quelqu'un peut il m'aider?
merci d'avance



Mecano
12/01/2007, 20h12
Bonjour.

Tu peux essayer avec la méthode de newton mais il faut supposer que la solution puisse être un nombre complexe de la forme :

En vba sur excel

Sub Bouton1_QuandClic()
Dim A, B, C, N, Pi As Double
Dim F1, F2 As Double
Dim Rho, Teta As Double
Dim AA(2, 2), X(2), Eps0, Eps As Double, Iter, Iter0 As Integer

Pi = 4 * Atn(1)
Eps0 = 0.0000000000001
Iter0 = 10000

'Initialisation des constantes
Sheets("Feuil1").Select
A = Range("B1").Value
B = Range("B2").Value
C = Range("B3").Value
N = Range("B4").Value

' Initialisation des solutions
Rho = Range("B8").Value
Teta = Pi / 4

Iter = 0
Continue:
Iter = Iter + 1

' Evaluation de l'écart des solutions
F1 = A * (Rho ^ N) * Cos(N * Teta) + B * Rho * Cos(Teta) + C
F2 = A * (Rho ^ N) * Sin(N * Teta) + B * Rho * Sin(Teta)

AA(1, 1) = N * A * (Rho ^ (N - 1)) * Cos(N * Teta) + B * Cos(Teta)
AA(1, 2) = -(N * A * (Rho ^ N) * Sin(N * Teta) + B * Rho * Sin(Teta))
AA(2, 1) = N * A * (Rho ^ (N - 1)) * Sin(N * Teta) + B * Sin(Teta)
AA(2, 2) = N * A * (Rho ^ N) * Cos(N * Teta) + B * Rho * Cos(Teta)

X(2) = (F1 / AA(1, 1) - F2 / AA(2, 1)) / (AA(1, 2) / AA(1, 1) - AA(2, 2) / AA(2, 1))
X(1) = (F1 / AA(1, 2) - F2 / AA(2, 2)) / (AA(1, 1) / AA(1, 2) - AA(2, 1) / AA(2, 2))

' Meilleure approximation des solutions
Rho = Abs(Rho - X(1))
Teta = Teta - X(2)

Eps = Sqr(X(1) * X(1) + X(2) * X(2))
If Iter > Iter0 Then
MsgBox "Pas de convergence aprés " & Iter & " itérations" & Chr(13) & Chr(13) & "H=" & H & " N=" & N & " Eps=" & Eps
Exit Sub
End If
If Eps > Eps0 Then GoTo Continue
MsgBox "Rho=" & Rho & " Teta/pi=" & Teta / Pi
MsgBox "Partie réelle=" & Int(Rho * Cos(Teta) / Eps + 0.5) * Eps & " Partie imaginaire=" & Int(Rho * Sin(Teta) / Eps + 0.5) * Eps & Chr(13) & Chr(13) & " Eps=" & Eps & " Iter=" & Iter

Range("B5") = Int(Rho * Cos(Teta) / Eps + 0.5) * Eps
Range("B6") = Int( * Sin(Teta) / Eps + 0.5) * Eps
End Sub

Après avoir réajusté Rho à 0.1 (>0 proche du premier résultat)

Résultat de ta fonction : x=0,887904001742601

Bonne chance


Précisez votre recherche :














Index des rubriques : Actualité - Dossier - Définition - Fond d'écran - Musée - Entreprises | Revue de presse - Guide High-Tech
En ce moment : En ce moment : Bonne année - Terre vue du ciel - Carte de Noël - Poêle à bois - Google Sky
Index des ressources : A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Forums : Habitat, chauffage et isolation - Dépannage - Electronique - Internet - Logiciel - Santé - Orientation
Tags : A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z