mls_poly.c 910 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include "header.h"
  5. double dot_prod(double* v1,double* v2, double* p ,int n,int power1,int power2) {
  6. double ans = 0;
  7. for (int i = 0;i < n;i++) {
  8. ans += p[i]*pow(v1[i], power1) * pow(v2[i], power2);
  9. }
  10. return ans;
  11. }
  12. double* MLS_coef(double* xh, double* yh, double* p, int m, int n) {
  13. double** slae = malloc(sizeof(double*) * m);
  14. double* left_v = malloc(sizeof(double) * m);
  15. double* coefs;
  16. for (int i = 0;i < m;i++) {
  17. slae[i] = malloc(sizeof(double) * m);
  18. for (int j = 0;j < m;j++) {
  19. slae[i][j] = dot_prod(xh,xh,p, n, i, j);
  20. }
  21. left_v[i] = dot_prod(yh, xh, p,n,1, i);
  22. }
  23. coefs = LDR_sol(slae,left_v,m);
  24. free(slae);
  25. free(left_v);
  26. return coefs;
  27. }
  28. double MLS(double x, double* coefs, int m) {
  29. double ans = 0;
  30. for (int i = 0;i < m;i++) {
  31. ans += pow(x, i) * coefs[i];
  32. }
  33. return ans;
  34. }