Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- punkty = {{1, 10}, {2, 20}, {3, 30}, {4,
- 20}}; (*punkty tworzące naszą łamane, x'y muszą być różne*)
- h = 1;(* odlegosc miedzy x'ami*)
- wymiary = Dimensions[punkty]; (*pobieranie wymiarwow zmiennej punkty*)
- iloscWielomianow =
- wymiary[[1]]; (*ilosc wierszy/ilosc punktow lamanej*)
- macierzPierwsza =
- RandomReal[{0, 0}, {iloscWielomianow - 2,
- iloscWielomianow -
- 2}]; (*tworzenie macierzy wypelnionej zerami, obcinamy M0 i MN*)
- Do[macierzPierwsza[[i, i]] = 4, {i,
- iloscWielomianow - 2}]; (*wypelniamy przekatna 4kami*)
- Do[macierzPierwsza[[i, i + 1]] = 1, {i, iloscWielomianow - 3}];
- Do[macierzPierwsza[[i + 1, i]] = 1, {i,
- iloscWielomianow - 3}]; (*jedynkami*)
- macierzDruga =
- RandomReal[{0, 0}, {iloscWielomianow - 2,
- 1}]; (*Macierz wyniku czyli Ygrekow*)
- Do[macierzDruga[[i - 1, 1]] =
- punkty[[i - 1, 2]] - 2*punkty[[i, 2]] + punkty[[i + 1, 2]], {i, 2,
- iloscWielomianow - 1, 1}]; (*wprowadzam wartosci wyrazen y z pdf*)
- macierzDruga = (6.0 / h*h) *
- macierzDruga; (*mnozenie wedle wzoru pdf *)
- m = macierzPierwsza;
- v = macierzDruga;
- Mi = LinearSolve[m,
- v]; (* potrzebne jest do wyliczenia macierzy z M'ami*)
- Mii = RandomReal[{0, 0}, {iloscWielomianow ,
- 1}]; (*pierwszy i ostatni element macierzy jest rowny zero*)
- Do[Mii[[i, 1]] = Mi[[i - 1, 1]], {i, 2, iloscWielomianow - 1,
- 1}]; (*przepisanie macierzy Mi do Mii*)
- abcd = RandomReal[{0, 0}, {iloscWielomianow - 1,
- 4}]; (*tworzy macierz ktora ma 4 kolumny i tyle wierszy ile jest \
- wielomianow,kazda kolumna to wspolczynnnik danego wielomianu a,b,c,d*)
- Do[abcd[[i, 1]] = (Mii[[i + 1, 1]] - Mii[[i, 1]]) / (6.0 * h), {i,
- iloscWielomianow - 1}];
- Do[abcd[[i, 2]] = (Mii[[i, 1]]) / (2.0), {i, iloscWielomianow - 1}];
- Do[abcd[[i,
- 3]] = (punkty[[i + 1, 2]] -
- punkty[[i, 2]]) / (h) - ((Mii[[i + 1, 1]] + 2*Mii[[i, 1]]) /
- 6.0)*h, {i, iloscWielomianow - 1}];
- Do[abcd[[i, 4]] = (punkty[[i, 2]]), {i,
- iloscWielomianow - 1}]; (*liczenie wedle wzoru*)
- wielomianyDoRysowania = RandomReal[{0, 0}, {iloscWielomianow - 1, 2}];
- Do[wielomianyDoRysowania[[i, 1]] =
- Function[
- abcd[[i, 1]]*(# - h*i)^3 + abcd[[i, 2]]*(# - h*i)^2 +
- abcd[[i, 3]] * (# - h*i) + abcd[[i, 4]]][x], {i,
- iloscWielomianow -
- 1}]; (*definiowanie funkcji ktora zostanie narysowana, poniewaz \
- one zakladaja ze beda rysowane na przedziale od 0 do h*)
- Do[wielomianyDoRysowania[[i, 2]] = x >= h*i && x < (i + 1)*h, {i,
- iloscWielomianow -
- 1}]; (*okreslanie przedzialu na ktorym jest rysowany wielomian*)
- wielomianyDoRysowania
- Plot[Piecewise[wielomianyDoRysowania], {x, punkty[[1, 1]],
- punkty[[1, 1]] + (iloscWielomianow - 1) *
- h}] (*wyswietlanie krzywej ktora przybliza lamana*)
- {{10. + 8.66667 (-1 + x) + 1.33333 (-1 + x)^3,
- x >= 1 && x < 2}, {20 + 12.6667 (-2 + x) + 4. (-2 + x)^2 -
- 6.66667 (-2 + x)^3,
- x >= 2 && x < 3}, {30 + 0.666667 (-3 + x) - 16. (-3 + x)^2 +
- 5.33333 (-3 + x)^3, x >= 3 && x < 4}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement