Advertisement
makispaiktis

My fsolve

Mar 8th, 2021 (edited)
1,013
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.55 KB | None | 0 0
  1. % Θα ελαχιστοποιήσω την συνάρτηση απολύτου της f
  2. % Ως γνωστόν, η min τιμή της εντοπίζεται στο 0, οπότε αν εφαρμο΄σω κάποιον
  3. % αλγόριθμο τοπικής βελτιστοποίησης, θα βρω σε ποιο σημείο γίνεται 0
  4. % Αν δεν γίνει ποτέ 0, τότε η συνάρτηση μας δεν έχει ρίζα, άρα η εξίσωση,
  5. % στην οποία αντιστοιχεί δεν έχει λύση. Επιλέγω να εφαρμόσω τον αλγόριθμο
  6. % τοπ.βελτ. στην απόλυτη τιμή, γιατί αν τον εφήρμοζα στην κανονική-αυθεντική
  7. % συνάρτηση f, θα μου έδινε το σημείο που ελαχιστοποείται, όχι εκεί που
  8. % είναι 0, γιατί πολύ απλά το min value μπορεί να είναι το -5 π.χ.
  9. clc
  10. clear all
  11.  
  12. syms x
  13. % display('**************************************************');
  14. % display('**************************************************');
  15. f = x - sin(x) + exp(2*x)
  16. F = matlabFunction(f);
  17. absF = abs(f);
  18. dAbsF = diff(absF, 'x');
  19. DF = matlabFunction(dAbsF);
  20.  
  21. % Αρχική υπόθεση ότι η ύση ανήκει εντός του -100 ως 100 π.χ.
  22. % Ακρίβεια έστω 0.01
  23. akro1 = -110;    akro2 = 100;   l = 0.0001;
  24. counter = 0;
  25. xmin = -1000;
  26.  
  27. while akro2 - akro1 > l
  28.     counter = counter + 1;
  29.     kentro = (akro1 + akro2) / 2;
  30.     paragwgos = DF(kentro);
  31.     if paragwgos > 0
  32.         akro2 = kentro;
  33.     elseif paragwgos < 0
  34.         akro1 = kentro;
  35.     else
  36.         solution = kentro;
  37.         % break
  38.     end
  39.    
  40.     if akro2 - akro1 < l
  41.         % Αυτό σημαίνει ότι έχουμε λύση μέσα σε αυτό το range
  42.         xmin = (akro1 + akro2) / 2;
  43.    
  44.     else
  45.         % Σε αυτό το case μπαίνουμε, μόνο αν ο αλγόριθμος τερματίσει
  46.         % πρόωρα και έχουμε βγει από το while, μέσω της brea ή με άλλα
  47.         % λόγια όταν έχουμε πετύχει στην μεταβλητή "kentro" την ακριβή λύση
  48.     end
  49. end
  50. display('**************************************************');
  51. display('*************** My algorithm found ***************')
  52. xmin
  53. f_xmin = F(xmin)
  54. display('**************************************************');
  55. display('************* fsolve function found **************')
  56. eqn = f == 0;
  57. xmin2 = solve(eqn, x)
  58.  
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement