Advertisement
Voldemord

[Matlab] MiejsceZeroweMetodaNewtona

Mar 27th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.21 KB | None | 0 0
  1. function [ m ] = msc_zero( wzor, x0 )
  2. % wykorzystanie wzoru naszej funkcji (przekazywanie jako ciag znakow)
  3. % funkcja('x^3+x^2-1', -1, 5);  // funkcja( wzor, a, b )
  4.  
  5. % zeby obliczyc pochodna, trzeba przejsc na zmienna symboliczna
  6. % 1. zadeklaruj zmienna symboliczna  syms x
  7. % 2. tworzymy wyr. symb. f = eval(wzor)
  8. % od teraz mozna uzywac funkcji typu diff
  9. % 3. zeby policzyc uzywamy subs(df, a)  // (funkcja, punkt)
  10.  
  11. % PRZYKLAD metody 1
  12. % f = eval(wzor)
  13. % df = diff(f)
  14. % subs(df, a)
  15. % subs(df, b)
  16.  
  17. % METODA 2 z uzyciem Funkcji Anonimowych
  18. %g = @(x) eval(wzor)
  19. %dg = @(x) eval(df)
  20. % dg(a)
  21. % dg(b)
  22.     syms x;
  23.     f = eval(wzor);
  24.     fp = diff(f);
  25.     E = 0.001;
  26.     x1 = x0 - 1;
  27.     f0 = subs(f,x0);
  28.  
  29.     for i = 64:-1:0
  30.        if abs(x1-x0) > E
  31.            if abs(f0) > E
  32.                f1 = subs(fp,x0);
  33.                if abs(f1) < E
  34.                   disp('Zly punkt start');
  35.                   break;
  36.                else
  37.                    x1 = x0;
  38.                    x0 = x0 - f0/f1;
  39.                    f0 = subs(f,x0);
  40.                end
  41.            else
  42.                m = x0
  43.                break;
  44.            end
  45.        else
  46.            m = x0
  47.            break;
  48.        end
  49.     end
  50. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement