Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. punkty = {{1, 10}, {2, 20}, {3, 30}, {4,
  2. 20}}; (*punkty tworzące naszą łamane, x'y muszą być różne*)
  3. h = 1;(* odlegosc miedzy x'ami*)
  4. wymiary = Dimensions[punkty]; (*pobieranie wymiarwow zmiennej punkty*)
  5.  
  6.  
  7. iloscWielomianow =
  8. wymiary[[1]]; (*ilosc wierszy/ilosc punktow lamanej*)
  9. macierzPierwsza =
  10. RandomReal[{0, 0}, {iloscWielomianow - 2,
  11. iloscWielomianow -
  12. 2}]; (*tworzenie macierzy wypelnionej zerami, obcinamy M0 i MN*)
  13.  
  14.  
  15. Do[macierzPierwsza[[i, i]] = 4, {i,
  16. iloscWielomianow - 2}]; (*wypelniamy przekatna 4kami*)
  17. Do[macierzPierwsza[[i, i + 1]] = 1, {i, iloscWielomianow - 3}];
  18. Do[macierzPierwsza[[i + 1, i]] = 1, {i,
  19. iloscWielomianow - 3}]; (*jedynkami*)
  20. macierzDruga =
  21. RandomReal[{0, 0}, {iloscWielomianow - 2,
  22. 1}]; (*Macierz wyniku czyli Ygrekow*)
  23. Do[macierzDruga[[i - 1, 1]] =
  24. punkty[[i - 1, 2]] - 2*punkty[[i, 2]] + punkty[[i + 1, 2]], {i, 2,
  25. iloscWielomianow - 1, 1}]; (*wprowadzam wartosci wyrazen y z pdf*)
  26.  
  27. macierzDruga = (6.0 / h*h) *
  28. macierzDruga; (*mnozenie wedle wzoru pdf *)
  29.  
  30. m = macierzPierwsza;
  31. v = macierzDruga;
  32.  
  33. Mi = LinearSolve[m,
  34. v]; (* potrzebne jest do wyliczenia macierzy z M'ami*)
  35. Mii = RandomReal[{0, 0}, {iloscWielomianow ,
  36. 1}]; (*pierwszy i ostatni element macierzy jest rowny zero*)
  37. Do[Mii[[i, 1]] = Mi[[i - 1, 1]], {i, 2, iloscWielomianow - 1,
  38. 1}]; (*przepisanie macierzy Mi do Mii*)
  39. abcd = RandomReal[{0, 0}, {iloscWielomianow - 1,
  40. 4}]; (*tworzy macierz ktora ma 4 kolumny i tyle wierszy ile jest \
  41. wielomianow,kazda kolumna to wspolczynnnik danego wielomianu a,b,c,d*)
  42.  
  43.  
  44. Do[abcd[[i, 1]] = (Mii[[i + 1, 1]] - Mii[[i, 1]]) / (6.0 * h), {i,
  45. iloscWielomianow - 1}];
  46. Do[abcd[[i, 2]] = (Mii[[i, 1]]) / (2.0), {i, iloscWielomianow - 1}];
  47. Do[abcd[[i,
  48. 3]] = (punkty[[i + 1, 2]] -
  49. punkty[[i, 2]]) / (h) - ((Mii[[i + 1, 1]] + 2*Mii[[i, 1]]) /
  50. 6.0)*h, {i, iloscWielomianow - 1}];
  51. Do[abcd[[i, 4]] = (punkty[[i, 2]]), {i,
  52. iloscWielomianow - 1}]; (*liczenie wedle wzoru*)
  53.  
  54. wielomianyDoRysowania = RandomReal[{0, 0}, {iloscWielomianow - 1, 2}];
  55.  
  56. Do[wielomianyDoRysowania[[i, 1]] =
  57. Function[
  58. abcd[[i, 1]]*(# - h*i)^3 + abcd[[i, 2]]*(# - h*i)^2 +
  59. abcd[[i, 3]] * (# - h*i) + abcd[[i, 4]]][x], {i,
  60. iloscWielomianow -
  61. 1}]; (*definiowanie funkcji ktora zostanie narysowana, poniewaz \
  62. one zakladaja ze beda rysowane na przedziale od 0 do h*)
  63.  
  64. Do[wielomianyDoRysowania[[i, 2]] = x >= h*i && x < (i + 1)*h, {i,
  65. iloscWielomianow -
  66. 1}]; (*okreslanie przedzialu na ktorym jest rysowany wielomian*)
  67.  
  68. wielomianyDoRysowania
  69.  
  70. Plot[Piecewise[wielomianyDoRysowania], {x, punkty[[1, 1]],
  71. punkty[[1, 1]] + (iloscWielomianow - 1) *
  72. h}] (*wyswietlanie krzywej ktora przybliza lamana*)
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79. {{10. + 8.66667 (-1 + x) + 1.33333 (-1 + x)^3,
  80. x >= 1 && x < 2}, {20 + 12.6667 (-2 + x) + 4. (-2 + x)^2 -
  81. 6.66667 (-2 + x)^3,
  82. x >= 2 && x < 3}, {30 + 0.666667 (-3 + x) - 16. (-3 + x)^2 +
  83. 5.33333 (-3 + x)^3, x >= 3 && x < 4}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement