Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication1
  8. {
  9. public class Interpolacja_funkcje_sklejane
  10. {
  11.  
  12. private static double eps = 1e-10;
  13. private static double[] xi = { -4, -2, 0, 2, 4 };
  14.  
  15. public double pkt(double xx, double[] x)
  16. {
  17. int lp = 0;
  18. double w = 0;
  19. for (int i = 0; i < xi.Length - 1; i++)
  20. {
  21. if (xx >= xi[i] && xx < xi[i + 1])
  22. {
  23. lp = i + 1;
  24. }
  25. }
  26.  
  27. for (int i = 0; i < 4; i++)
  28. {
  29. w += x[i] * Math.Pow(xx, i);
  30. }
  31. for (int j = 4; j < 4 + lp - 1; j++)
  32. {
  33. w += x[j] * Math.Pow((xx - xi[j - 3]), 3);
  34. }
  35. return w;
  36. }
  37.  
  38. public double[] gauss(double[][] tabA, double[] tabB)
  39. {
  40. int N = tabB.Length;
  41.  
  42. for (int p = 0; p < N; p++)
  43. {
  44.  
  45.  
  46. int max = p;
  47. for (int i = p + 1; i < N; i++)
  48. {
  49. if (Math.Abs(tabA[i][p]) > Math.Abs(tabA[max][p]))
  50. {
  51. max = i;
  52. }
  53. }
  54. double[] temp = tabA[p];
  55. tabA[p] = tabA[max];
  56. tabA[max] = temp;
  57.  
  58. double t = tabB[p];
  59. tabB[p] = tabB[max];
  60. tabB[max] = t;
  61.  
  62.  
  63.  
  64. for (int i = p + 1; i < N; i++)
  65. {
  66. double alpha = tabA[i][p] / tabA[p][p];
  67. tabB[i] -= alpha * tabB[p];
  68. for (int j = p; j < N; j++)
  69. {
  70. tabA[i][j] -= alpha * tabA[p][j];
  71. }
  72. }
  73. }
  74.  
  75.  
  76. double[] x = new double[N];
  77. for (int i = N - 1; i >= 0; i--)
  78. {
  79. double sum = 0.0;
  80. for (int j = i + 1; j < N; j++)
  81. {
  82. sum += tabA[i][j] * x[j];
  83. }
  84. x[i] = (tabB[i] - sum) / tabA[i][i];
  85. }
  86. return x;
  87. }
  88. }
  89.  
  90.  
  91.  
  92.  
  93.  
  94. class Program
  95. {
  96. static void Main(string[] args)
  97. {
  98. double[] xi = { -4, -2, 0, 2, 4 };
  99. double[] xii = { -332, -24, 4, -8, -204, 312, -216 };
  100. double pochodna1 = -4;
  101. double pochodna2 = 4;
  102. double wynik = 0;
  103. int n = xi.Length;
  104. double[][] S = new double [(n + 2)][n + 2];
  105. int i, j;
  106. Interpolacja_funkcje_sklejane funkcyjka = new Interpolacja_funkcje_sklejane();
  107. for (i = 0; i < n; i++)
  108. {
  109. for (j = 0; j < n - 1; j++)
  110. {
  111. S[i][j] = Math.Pow(xi[i], j);
  112.  
  113. }
  114. }
  115.  
  116. for (i = 5; i < S.Length - 1; i++)
  117. {
  118.  
  119. for (j = 0; j < S.Length - 3; j++)
  120.  
  121. {
  122.  
  123. S[i][j] = j * (Math.Pow(pochodna1, j - 1));
  124.  
  125. }
  126.  
  127. }
  128.  
  129. for (i = 2; i < S.Length - 2; i++)
  130. {
  131. double xx;
  132. xx = xi[i];
  133.  
  134.  
  135. for (j = 4; j < S.Length; j++)
  136.  
  137. {
  138. S[i][j] = Math.Pow(xx - xi[j - 3], 3);
  139.  
  140. }
  141.  
  142.  
  143.  
  144. }
  145.  
  146. for (i = 5; i < S.Length - 1; i++)
  147. {
  148.  
  149. for (j = 0; j < S.Length - 3; j++)
  150.  
  151. {
  152.  
  153. S[i][j] = j * (Math.Pow(pochodna1, j - 1));
  154. }
  155.  
  156. }
  157.  
  158.  
  159. for (i = 6; i < S.Length; i++)
  160. {
  161.  
  162. for (j = 0; j < S.Length - 2; j++)
  163.  
  164. {
  165.  
  166. S[i][j] = j * (Math.Pow(pochodna2, j - 1));
  167.  
  168. }
  169.  
  170. }
  171.  
  172.  
  173. for (i = 6; i < S.Length; i++)
  174. {
  175.  
  176. for (j = 4; j < S.Length; j++)
  177. {
  178. S[i][j] = (3 * Math.Pow((pochodna2 - xi[j - 3]), 2));
  179.  
  180. }
  181.  
  182. }
  183.  
  184. for (i = 0; i < S.Length; i++)
  185. {
  186. for (j = 0; j < S.Length; j++)
  187. {
  188. S[2][6] = 0;
  189. Console.Write(" " + S[i][j]);
  190. }
  191. Console.WriteLine(" ");
  192. }
  193. double[] x = funkcyjka.gauss(S[][], xii);
  194. Console.WriteLine("-------------------");
  195. for (i = 0; i < S.Length; i++)
  196. {
  197. for (j = 0; j < S.Length; j++)
  198. {
  199.  
  200. Console.Write(" " + S[i][j]);
  201. }
  202. Console.WriteLine(" ");
  203. }
  204.  
  205. double podajx = 3;
  206. for (i = 0; i < x.Length; i++)
  207. {
  208. wynik += x[i] * Math.Pow(podajx, i);
  209. }
  210. wynik = funkcyjka.pkt(podajx, x);
  211.  
  212. Console.WriteLine("wynik: " + wynik);
  213. }
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement