Itération Du Point Fixe
Je suis nouveau sur Matlab et je dois utiliser itération du point fixe de trouver le x
de la valeur pour l'intersection entre y = x
et y = sqrt(10/x+4)
, qui, après des graphiques, semble être autour de 1.4. Je suis à l'aide d'une estimation initiale de x1 = 0
. C'est mon code Matlab:
f = @(x)sqrt(10./(x+4));
x1 = 0;
xArray(10) = [];
for i = 1:10
x2 = f(x1);
xArray(i) = x2;
x1 = x1 + 1;
end
plot(xArray);
fprintf('%15.8e\n',xArray);
Maintenant, quand je l'exécute il semble que ma x
est proche de 0,8. Quelqu'un peut-il me dire ce que je fais de mal?
Vous devez vous connecter pour publier un commentaire.
Bien fait. Vous avez fait un début décent à ce.
Permet de regarder la solution graphique. BTW, c'est la façon dont je l'ai fait la partie graphique:
Ou je pourrait soustraire les deux fonctions, puis la recherche d'un zéro de la différence, donc, où il croise l'axe des x.
C'est ce que le point fixe d'itération n'est de toute façon, en essayant de résoudre pour x, tels que
Alors, comment aurais-je modifier votre code pour corriger ce problème? Tout d'abord, je voudrais utiliser des noms plus descriptifs pour les variables. Vous n'avez pas facturés par le personnage, et de rendre votre code plus facile à lire & suivre va payer considérablement dans l'avenir pour vous.
Il y avait un couple de problèmes de code. Pour initialiser un vecteur, utiliser une forme comme l'un de ces:
Noter que si xArray était DÉJÀ défini, parce que vous avez travaillé sur ce problème, la dernière forme ne à zéro, de ce seul élément. Donc, la première forme est le meilleur par une grande marge. Il affirmative crée un tableau, ou remplace un tableau existant, si elle est déjà présente dans votre espace de travail.
Enfin, je tiens à initialiser un tableau comme ça avec quelque chose de spécial, plutôt que de zéro, de sorte que nous pouvons voir quand un élément a été remplacé. NaNs sont bons pour cela.
Prochaine, il n'y avait pas besoin d'en ajouter un de x1 dans votre code. Encore une fois, j'avais suggèrent fortement l'utilisation de meilleurs noms de variables. C'est aussi une bonne idée pour utiliser les commentaires. Être libéral.
Je suggère l'idée d'une convergence de la tolérance. Vous pouvez également avoir un compteur d'itération.
Quel a été le résultat?
Pour un peu plus de précision, afin de voir comment nous avons fait...
Par la voie, c'est une bonne idée de savoir pourquoi la boucle terminée. Il l'a fait arrêter pour insuffisance d'itérations?
Le point de mon intervention ici n'était PAS de faire vos devoirs, puisque vous étiez proches de son droit de toute façon. Le point est de montrer quelques considérations sur la façon dont vous pourriez améliorer votre code de travail pour l'avenir.
Il n'est pas nécessaire d'ajouter de 1 à
x1
. votre sortie de chaque itération est entrée pour la prochaine itération. Donc,x2
de sortie def(x1)
devrait être le nouveaux1
. Le code corrigé seraitf(x)x^3+4*x^2-10
dans[1,2]
trouver une approximation de la racine