Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```scilab
- clear
- xdel(winsid())
- /******************************
- DANE WSADOWE DO ZADANIA Z LINA
- * H - wysokosc
- * L - dlugosc liny
- * (pamietaj, ze H/L > 1)
- * amp - amplituda drgan w rad
- * TOL - zadany przedzial
- tolerancji, domyslnie 10E-7
- * N0 - maksymalna ilosc iteracji,
- po przekroczeniu ktorej
- program przerywa obliczenia;
- domyslnie 50
- ******************************/
- H = 10
- L = 5
- amp = %pi/3
- TOL = 10E-7
- N0 = 50
- //funkcja rysujaca wykres funkcji wraz z naniesionym x=pierwiastek
- function drawRoot(startRange, endRange, rootVal)
- //dane wsadowe
- xArgs = linspace(startRange, endRange, 10E3)
- yArgs = f(xArgs)
- rootArgs = linspace(rootVal, rootVal, 10E3)
- rootArgsy = linspace(min(yArgs), max(yArgs), 10E3)
- da=gda()
- da.x_location = "origin"
- da.y_location = "left"
- plot2d(xArgs, yArgs, style = 2)
- plot2d(rootArgs, rootArgsy, style = 3)
- xtitle('Wykres f(x) wraz z pierwiastkiem')
- legends(['f(x)', 'pierwiastek'], [2, 3], 4)
- endfunction
- //funkcja obliczajaca wartosc zadanej funkcji f, parametrem jest x
- function f = f(x)
- //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)
- //testowa funkcja
- f = x^101-x^99+33*x^3-32
- endfunction
- //wlasciwa funkcja liczaca regula falsi
- function falsi(x0, x1)
- i = 1
- //tworzy naglowek tabelki
- printf("%-20s %-20s %-20s %-20s %-20s \n","Iteracja","x0","x1","root","f(root)")
- while (i <= N0)
- root = x0 - f(x0) * (x0 - x1) / (f(x0) - f(x1))
- //drukuje wartosci tabelki
- printf("%-20g %-20f %-20f %-20f %-20f\n", i, x0, x1, root, f(root))
- /***************************************************************
- * pierwszy warunek - zakoczenie petli w przypadku zbieznosci
- * drugi warunek - sprawdza znaki funkcji znalezionego punktu i x1
- jezeli sa takie same, to je obiera do dalszej iteracji
- w przeciwnym razie bierze drugi punkt do kolejnej iteracji
- **************************************************************/
- if(f(root) == 0 | abs(f(root)) < TOL) then
- break
- elseif (f(root) * f(x1) < 0) then
- x0 = x1
- x1 = root
- else
- x1 = x0
- x0 = root
- end
- i = i + 1
- end
- //wartosc bledu
- err = abs((x1 - x0) / f(x1) - f(x0)) * abs(f(root))
- printf('Znaleziono pierwiastek x = %f +- %f', root, err```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement