拉格朗日插值 C++ 和 Matlab实现
来源:互联网 发布:淘宝客服服务流程图 编辑:程序博客网 时间:2024/05/01 18:47
拉格朗日插值 C++ 和 Matlab实现
拉格朗日插值法
概述
利用 n 个变量
xi 与函数值yi 构造插值函数Ln的方法
构造关键
构造多项式lk
xk−1
另lk(x)=(x−xk−1)(x−xk+1)(xk−xk−1)(xk−xk+1)
lk 满足lk(xk)=1,lk(xi)=0,i=1,...,n,i!=k
解出ln(x)=yi×∑k=0nlx(xi),i=1,...,n
注 : 上述公式是我用mathjax写的,如有错误请联系我修正
敬请指正
详解
点此查看百科 拉格朗日插值法
代码
C++实现
结果和输入格式在注释中
/*///////////////////////////////////////////////////////////////// 结果 /////////////////////////////////////////////////////////////////输入需要插值的数目 : 6Xi : 0.4 0.55 0.65 0.8 0.9 1.05Yi : 0.41075 0.57815 0.69675 0.88811 1.02652 1.25382输入需要插值的x :0.596y : 0.631917/////////////////////////////////////////////////////////////////tips : 运行环境 DevC++ 5.9.2 Copyright 2017 Gy tips : Gy是高玉的标志,可见logo/////////////////////////////////////////////////////////////////*/ #include<iostream> #include<iomanip>#include<cstring>#define maxn 100int n;double x[maxn];double y[maxn];double ln[maxn];using namespace std;int main(){ double xi,res; res = 0; memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); cout << "输入需要插值的数目 : " ; cin >> n; if(n > maxn) { cout << "超出上限" <<endl; cout << "请修改 maxn 再运行" <<endl; return 0; } cout << "Xi : "; for(int i = 0;i < n;i++) cin >> x[i]; cout << "Yi : "; for(int i = 0;i < n;i++) cin >> y[i]; cout << "输入需要插值的x : " << endl; cin >> xi; for(int i = 0;i < n;i++) { ln[i] = 1; for(int j = 0;j < n;j++) { if(i == j) continue; ln[i] *= ((xi - x[j]) / (x[i] - x[j])); } res += (y[i] * ln[i]); } cout << "y : " << res << endl;}
Matlab 实现
将该函数存为m文件
function res= Lagrange(x,y,xi) xl = length(x); yl = length(y); if(xl ~= yl) disp('向量长度不等') return end res = 0; for i = 1:xl ln = 1; for j = 1:yl if i == j continue; end ln = ln * ((xi - x(j))/(x(i) - x(j))); end res = res + (y(i) * ln); endend
调用下面语句测试函数
x = [0.4,0.55,0.65,0.8,0.9,1.05]y = [0.41075,0.57815,0.69675,0.88811,1.02652,1.25382]xi = 0.596Lagrange(x,y,xi)
阅读全文
0 0
- 拉格朗日插值 C++ 和 Matlab实现
- FFT快速傅立叶变换-Matlab和c语言实现
- matlab和C混合编程实现脉冲压缩
- matlab和C混合编程实现脉冲压缩
- matlab IIr C语言实现
- C/C++实现模糊控制,借助MATLAB辅助设计和fis.c文件
- 一个日历问题的C语言,C++(boost),python,Javascript,Java和Matlab的实现
- matlab和C如何混编
- Matlab和C联合编程
- Matlab和C混合编程
- c和matlab混合编程
- C和MATLAB混合编程
- matlab和C如何混编
- 区域生长和matlab实现
- 拉格朗日插值算法Matlab实现
- BP算法-别人用C写的和用Matlab实现的
- MATLAB和C/C++混合编程实现图像处理(一)
- MATLAB和C/C++混合编程实现图像处理(一)
- js实现数组去重4种方法总结
- Java(Android)注解学习摘记
- Linux重定向和管道
- Tomcat7.0.42源码研读之网络连接器Connector(三)
- vue element iframe 自适应窗口大小
- 拉格朗日插值 C++ 和 Matlab实现
- 21. Merge Two Sorted Lists
- 点击后的cell为自定义颜色
- 数据结构-堆小结
- 002 如何保持插入光标处在末尾?
- XML入门
- 【喜讯】广源兴荣膺“国家级高新技术企业称号”
- (DeepLab-resnet) + 深度学习部份层 小笔记。
- Tomcat文件夹解析