Lagrange_base.cpp 765 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // 函数功能: 关于插值点point的拉格朗日插值函数在当前点x的值。
  2. // 输入: point:n * 2维矩阵,n为节点数目。
  3. // x为当前点。
  4. // 输出: 对应于插值点point,x为输入条件下下的输出值
  5. // 方法: 无
  6. // 编写: 李兆亭,2019/12/23修改程序说明
  7. // PS: 支持X为向量输入。
  8. #include "GPM.h"
  9. int Lagrange_base(mat* point, vec* x, vec* f) {
  10. // 初始化
  11. int row_len = (size(*point))(0);
  12. int x_len = (size(*x))(0);
  13. *f = vec(x_len, fill::zeros);
  14. double xj, yj, xi;
  15. vec a;
  16. // 计算
  17. for (int j = 0; j < row_len; j++ ) {
  18. xj = (*point)(j, 0);
  19. yj = (*point)(j, 1);
  20. a = vec(x_len, fill::ones);
  21. for (int i = 0; i < row_len; i++) {
  22. if (i == j) {
  23. }
  24. else {
  25. xi = (*point)(i, 0);
  26. a = a%(*x - xi)*(1.0/(xj - xi));
  27. }
  28. }
  29. *f = *f + a*yj;
  30. }
  31. return 1;
  32. }