Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. public class Approximation
  2. {
  3. public ApproximationFunction GetApproximation(int degree, double[] arguments, double[] values)
  4. {
  5. var sVector = new double[2 * degree + 1];
  6.  
  7. for (var i = 0; i < arguments.Length; i++)
  8. {
  9. for (var j = 0; j < 2 * degree + 1; j++)
  10. {
  11. sVector[j] += Math.Pow(arguments[i], j);
  12. }
  13. }
  14.  
  15. var tVector = new double[2 * degree + 1];
  16.  
  17. for (var i = 0; i < arguments.Length; i++)
  18. {
  19. for (var j = 0; j < degree + 1; j++)
  20. {
  21. tVector[j] += values[i] * Math.Pow(arguments[i], j);
  22. }
  23. }
  24.  
  25. var A = new double[degree + 1, degree + 1];
  26. var B = new double[degree + 1];
  27.  
  28. for (var i = 0; i < degree + 1; i++)
  29. {
  30. for (var j = 0; j < degree + 1; j++)
  31. {
  32. A[i, j] = sVector[j + i];
  33. }
  34.  
  35. B[i] = tVector[i];
  36. }
  37.  
  38. Matrix<double> matrixA = Matrix<double>.Build.DenseOfArray(A);
  39. Vector<double> vectorB = Vector<double>.Build.DenseOfArray(B);
  40. double[] solution = matrixA.Solve(vectorB).ToArray();
  41.  
  42. return new ApproximationFunction(solution);
  43. }
  44.  
  45. public ApproximationFunction getLinearRegression(double[] arguments, double[] values)
  46. {
  47. double sumX = 0;
  48. double sumPowX = 0;
  49. double sumFx = 0;
  50. double sumXFx = 0;
  51. double a0;
  52. double a1;
  53.  
  54. for(int i = 0; i < arguments.Length; i++)
  55. {
  56. sumX += arguments[i];
  57. sumPowX += Math.Pow(arguments[i], 2);
  58. sumFx += values[i];
  59. sumXFx += arguments[i] * values[i];
  60. }
  61.  
  62. a0 = (sumPowX * sumFx - sumX * sumXFx) / (arguments.Length * sumPowX - Math.Pow(sumX, 2));
  63. a1 = (arguments.Length * sumXFx - sumX * sumFx) / (arguments.Length * sumPowX - Math.Pow(sumX, 2));
  64.  
  65. double[] solution = { a0, a1 };
  66.  
  67. return new ApproximationFunction(solution);
  68.  
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement