拉格朗日插值算法
拉格朗日插值算法
- 1. Python實現
- 2. Java實現
- 3. 源碼
拉格朗日線性差值,如果原始只有倆個點,那就是估計的一條直線,計算x對應的值y。
1. Python實現
這篇講的淺顯易懂,我反正看懂了,尤其是線性差值,很直觀哦
https://www.jianshu.com/p/2238ef6f3a59
- Python庫已經實現了這個算法:
from scipy.interpolate import lagrange #導入拉格朗日插值函數直接用就ok了
https://zhuanlan.zhihu.com/p/136375783
-
python 源碼Lagrange.py
-
缺失值處理之拉格朗日插值法
2. Java實現
- https://blog.csdn.net/weixin_30624825/article/details/98612983
3. 源碼
import lombok.extern.slf4j.Slf4j;@Slf4j
public class LagrangeUtil {private static double[] Lag(double x[], double y[], double x0[]) {int m = x.length;int n = x0.length;double y0[] = new double[n];for (int ia = 0; ia < n; ia++) {double j = 0;for (int ib = 0; ib < m; ib++) {double k = 1;for (int ic = 0; ic < m; ic++) {if (ib != ic) {k = k * (x0[ia] - x[ic]) / (x[ib] - x[ic]);}}k = k * y[ib];j = j + k;}y0[ia] = j;}return y0;}public static double[] lagDouble(long x[], double y[], long x0[]) {int m = x.length;int n = x0.length;double y0[] = new double[n];for (int ia = 0; ia < n; ia++) {double j = 0;for (int ib = 0; ib < m; ib++) {double k = 1;for (int ic = 0; ic < m; ic++) {if (ib != ic) {k = k * (x0[ia] - x[ic]) / (x[ib] - x[ic]);}}k = k * y[ib];j = j + k;}y0[ia] = j;}return y0;}public static void main(String[] args) {long[] gpsTimeArr = new long[]{1607395389600L, 1607395389640L};long[] gpsTimeExpectArr = new long[]{1607395389600L, 1607395389640L, 1607395389633L};double[] lonArr = new double[]{22.5433462d, 22.5433463d};double[] lonRes = LagrangeUtil.lagDouble(gpsTimeArr, lonArr, gpsTimeExpectArr);log.info("原始數據:");for (int i = 0; i < gpsTimeArr.length; i++) {log.info("x0: {},y0: {}", gpsTimeArr[i], lonArr[i]);}log.info("運用拉格朗日插值法求解得:");for (int i = 0; i < gpsTimeExpectArr.length; i++) {log.info("x0: {},y0: {}", gpsTimeExpectArr[i], lonRes[i]);log.info("x0: {},y0: {}", gpsTimeExpectArr[i], Double.parseDouble(String.format("%.7f", lonRes[i])));}}
}
總結
- 上一篇: 使用Python制作酷炫的二维码
- 下一篇: 使用Python判断俩张图像相同或以某种