Comment trouver toutes les racines de léquation dans Matlab?

Comment trouver toutes les racines dune équation dans Matlab? Jai essayé et cela ne ma donné quune des racines.

Par exemple: mon équation est $ F (x) = 0 $ où

 F(x) = (cos(7*x)).*exp(-2*x.^2).*(1-2*(x.^2)) 

Commentaires

  • Veuillez vérifier votre équation – Je ne ' Je pense que la syntaxe Matlab est valide (point isolé).
  • Quoi avez-vous essayé dans MATLAB?

Réponse

Avant dessayer de trouver tout des racines de cette fonction dans MATLAB Je pense quil « vaut la peine de comprendre que il a une infinité de racines en raison du inclusion du terme $ \ cos () $. De plus, il est facile de trouver analytiquement les racines de la fonction dans ce cas:

Les racines sont définies par $$ \ cos (7x) \ cdot \ exp (-2x ^ 2) \ cdot (1-2x ^ 2) = 0. $$ Nous avons donc $$ \ cos (7x) = 0 \ text {ou} \ exp (-2x ^ 2) = 0 \ text {ou} (1-2x ^ 2) = 0, $$ ce qui donne $$ x = \ left \ {\ left (n + \ frac {1} {2} \ right) \ dfrac {\ pi} {7}: n \ in \ mathbb {Z} \ right \} \ cup \ emptyset \ cup \ left \ {\ pm \ sqrt {1/2} \ right \}. $$

Pour répondre à votre question dans dun sens plus général, un moyen simple de rechercher plus dune racine dans MATLAB serait dutiliser la fonction fzero avec de nombreuses hypothèses de départ différentes sur une plage prédéfinie. Il nest pas garanti que tous les zéros soient trouvés, mais en passant un intervalle à fzero, vous pouvez au moins garantir que vous trouverez des zéros là où la fonction change de signe sur cet intervalle. En choisissant des intervalles suffisamment petits, vous pouvez obtenir de très bons résultats.

Par exemple, le code suivant trouvera toutes les racines de votre fonction sur lintervalle [-10,10]. Si des racines sont manquées, vous pouvez augmenter N pour utiliser plus dintervalles de départ (plus petits) pour fzero. Notez que cela ne trouvera que les racines où le signe change.

F = @(x) cos(7*x).*exp(-2*x.^2).*(1-2*x.^2); interval = [-10, 10]; N = 500; start_pts = linspace(interval(1),interval(2),N); found_roots = []; for i=1:numel(start_pts)-1 try found_roots(end+1) = fzero(F,[start_pts(i),start_pts(i+1)]); end end % Plot results: figure, hold on fplot(F,interval,1e-4) plot(found_roots,zeros(size(found_roots)),"rx") 

* Notez que cette méthode (et la plupart des méthodes numériques) ne fonctionnera pas pour $ | x | $ supérieur à ~ 19,3 pour cette fonction. En effet, $ \ exp (-2 (19,4) ^ 2) $ est égal à 0 avec des nombres à double précision.

Answer

syms x eq=cos(7*x)*exp(-2*x^2)*(1-2*x^2); solve(eq==0,x) 

ans =

 pi/14 2^(1/2)/2 -2^(1/2)/2 

Ou si votre version de Matlab est récente, vous pouvez faire

evalin(symengine,"solve(cos(7*x)*exp(-2*x^2)*(1-2*x^2)=0,x)") {-2^(1/2)/2, 2^(1/2)/2} union Dom::ImageSet(pi/14 + (pi*k)/7, k, Z_) 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *