Advertisement
Guest User

Untitled

a guest
Mar 30th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 2.52 KB | None | 0 0
  1. ```scilab
  2. clear
  3. xdel(winsid())
  4. /******************************
  5. DANE WSADOWE DO ZADANIA Z LINA
  6. * H - wysokosc
  7. * L - dlugosc liny
  8. * (pamietaj, ze H/L > 1)
  9. * amp - amplituda drgan w rad
  10. * TOL - zadany przedzial
  11.   tolerancji, domyslnie 10E-7
  12. * N0 - maksymalna ilosc iteracji,
  13.   po przekroczeniu ktorej
  14.   program przerywa obliczenia;
  15.   domyslnie 50
  16. ******************************/
  17. H = 10
  18. L = 5
  19. amp = %pi/3
  20. TOL = 10E-7
  21. N0 = 50
  22.  
  23. //funkcja rysujaca wykres funkcji wraz z naniesionym x=pierwiastek
  24. function drawRoot(startRange, endRange, rootVal)
  25.     //dane wsadowe
  26.     xArgs = linspace(startRange, endRange, 10E3)
  27.     yArgs = f(xArgs)
  28.     rootArgs = linspace(rootVal, rootVal, 10E3)
  29.     rootArgsy = linspace(min(yArgs), max(yArgs), 10E3)
  30.    
  31.     da=gda()
  32.     da.x_location = "origin"
  33.     da.y_location = "left"
  34.    
  35.     plot2d(xArgs, yArgs, style = 2)
  36.     plot2d(rootArgs, rootArgsy, style = 3)
  37.     xtitle('Wykres f(x) wraz z pierwiastkiem')
  38.     legends(['f(x)', 'pierwiastek'], [2, 3], 4)
  39. endfunction
  40.  
  41. //funkcja obliczajaca wartosc zadanej funkcji f, parametrem jest x
  42. function f = f(x)
  43.     //f = real(L * sin(x) + 2 * L * (cos(x) - cos(amp)) .* cos(x) .* (sin(x) + sqrt(sin(x)^2 + (H / L - cos(x))/(cos(x) - cos(amp)))) - L)
  44.     //testowa funkcja
  45.     f = x^101-x^99+33*x^3-32
  46. endfunction
  47.  
  48. //wlasciwa funkcja liczaca regula falsi
  49. function falsi(x0, x1)
  50.     i = 1
  51.    
  52.     //tworzy naglowek tabelki
  53.     printf("%-20s %-20s %-20s %-20s %-20s \n","Iteracja","x0","x1","root","f(root)")
  54.    
  55.     while (i <= N0)
  56.         root = x0 - f(x0) * (x0 - x1) / (f(x0) - f(x1))
  57.        
  58.         //drukuje wartosci tabelki
  59.         printf("%-20g %-20f %-20f %-20f %-20f\n", i, x0, x1, root, f(root))
  60.        
  61.         /***************************************************************
  62.         * pierwszy warunek - zakoczenie petli w przypadku zbieznosci
  63.         * drugi warunek - sprawdza znaki funkcji znalezionego punktu i x1
  64.           jezeli sa takie same, to je obiera do dalszej iteracji
  65.           w przeciwnym razie bierze drugi punkt do kolejnej iteracji
  66.          **************************************************************/
  67.         if(f(root) == 0 | abs(f(root)) < TOL) then
  68.             break
  69.         elseif (f(root) * f(x1) < 0) then
  70.             x0 = x1
  71.             x1 = root
  72.         else
  73.             x1 = x0
  74.             x0 = root
  75.         end
  76.          i = i + 1
  77.     end
  78.  
  79.     //wartosc bledu
  80.     err = abs((x1 - x0) / f(x1) - f(x0)) * abs(f(root))
  81.     printf('Znaleziono pierwiastek x = %f +- %f', root, err```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement