拉格朗日插值和牛顿插值 matlab
1. 已知函数在下列各点的值为
0.2 |
0.4 |
0.6 |
0.8 |
1.0 |
|
0.98 |
0.92 |
0.81 |
0.64 |
0.38 |
用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式在点的值。
程序:
x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
x0=[0.2 0.28 0.44 0.76 1 1.08];
[f,f0]=Lagrange(x,y,x0)
function [f,f0] = Lagrange(x,y,x0)
%求已知数据点的Lagrange插值多项式f,并计算插值多项式f在数据点x0的函数值f0
syms t;
n = length(x);
f = 0.0;
for i = 1:n
l = y(i);
for j = 1:i-1
l = l*(t-x(j))/(x(i)-x(j));
end;
for j = i+1:n
l = l*(t-x(j))/(x(i)-x(j));
end;
f = f + l;
simplify(f);
if(i==n)
f0 = subs(f,'t',x0);
f = collect(f);
f = vpa(f,6);
end
end
结果:
>> Untitled3
f =
- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98
f0 =
[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]
牛顿:
%y为对应x的值,A为差商表,C为多项式系数,L为多项式
%X为给定节点,Y为节点值,x为待求节点
function[y,A,C,L] = newton(X,Y,x,M)
n = length(X);
m = length(x);
for t = 1 : m
z = x(t);
A = zeros(n,n);
A(:,1) = Y';
s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;
for j = 2 : n
for i = j : n
A(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));
end
q1 = abs(q1*(z-X(j-1)));
c1 = c1 * j;
end
C = A(n, n); q1 = abs(q1*(z-X(n)));
for k = (n-1):-1:1
C = conv(C, poly(X(k)));
d = length(C);
C(d) = C(d) + A(k,k);
end
y(t) = polyval(C,z);
end
L = poly2sym(C);
x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
x0=[0.2 0.28 0.44 0.76 1 1.08];
m=1;
[y,A,C,L]=newton(x,y,x0,m)
结果:
y =
0.9800 0.9622 0.9020 0.6800 0.3800 0.2403
A =
0.9800 0 0 0 0
0.9200 -0.3000 0 0 0
0.8100 -0.5500 -0.6250 0 0
0.6400 -0.8500 -0.7500 -0.2083 0
0.3800 -1.3000 -1.1250 -0.6250 -0.5208
C =
-0.5208 0.8333 -1.1042 0.1917 0.9800
L =
- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/50
2. 在区间上分别取,用两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。
程序:
x=-1:0.2:1;
y=1./(1+25*x.^2);
x0=-1:0.01:1;
[f,f0]=Lagrange(x,y,x0)
plot(x0,f0)
结果:
f =
- 220.942*t^10 + 494.91*t^8 - 381.434*t^6 + 123.36*t^4 - 16.8552*t^2 + 1.0
3.下列数据点的插值
0.01 |
1 |
4 |
9 |
16 |
25 |
36 |
49 |
64 |
|
0.1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
可以得到平方根函数的近似多项式, 要求用上述9个点作8次插值多项式,并在区间画出的曲线。
程序:
x=[0.01 1 4 9 16 25 36 49 64];
y=[0.1 1 2 3 4 5 6 7 8];
x0=0.01:0.1:64;;
[f,f0]=Lagrange(x,y,x0)
plot(x0,f0)
xlim([0 64]);
结果:
f =
- 2.73858e-10*t^8 + 5.6069e-8*t^7 - 0.00000453906*t^6 + 0.000186698*t^5 - 0.00418177*t^4 + 0.0510128*t^3 - 0.32628*t^2 + 1.19115*t + 0.0881211
拉格朗日插值和牛顿插值 matlab的更多相关文章
- 多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]
全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见“计算基本理论”. 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值使用的Horner嵌 ...
- Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法
本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...
- MATLAB二维插值和三维插值
插值问题描述:已知一个函数上的若干点,但函数具体表达式未知,现在要利用已知的若干点求在其他点处的函数值,这个过程就是插值的过程. 1.一维插值 一维插值就是给出y=f(x)上的点(x1,y1),(x2 ...
- CPP,MATLAB实现牛顿插值
牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...
- 插值代码17个---MATLAB
函数名 功能Language 求已知数据点的拉格朗日插值多项式Atken 求已知数据点的艾特肯插值多项式Newton 求已知数据点的均差形式的牛顿插值多项式Newtonforward 求已知数据点的前 ...
- [Python] 牛顿插值
插值公式为: 差商递归公式为: # -*- coding: utf-8 -*- #Program 0.4 Newton Interpolation import numpy as np import ...
- 拟牛顿 DFP matlab
function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x( ...
- 数据质量、特征分析及一些MATLAB函数
MATLAB数据分析工具箱 MATLAB工具箱主要含有的类别有: 数学类.统计与优化类.信号处理与通信类.控制系统设计与分析类.图像处理类.测试与测量类.计算金融类.计算生物类.并行计算类.数据库访问 ...
- 高斯混合聚类及EM实现
一.引言 我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 G ...
随机推荐
- 第一次项目上Linux服务器(六:Nginx安装及相关命令(转))
1.下载nginx 方法一 wget http://nginx.org/download/nginx-1.11.6.tar.gz 方法二 http://nginx.org/en/download.ht ...
- Django models 的常用字段类型和字段参数
<1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符 ...
- 对于dll(动态链接库)的理解
之前,尝试过写过dll,但是对于dll的理解还是不够深刻吧.今天,又加深了对于dll的理解程度,故记下以免以后忘记. 无论是c还是c++,我们通常先将源文件编译成中间代码,在Windows下是&quo ...
- Spring基础(1) : 自动装配
1.自动装配 1.1 byType 1.1.1根据类型自动匹配,若当前没有类型可以注入或者存在多个类型可以注入,则失败.必须要有对于的setter方法 public class Person{ pub ...
- Weex 实现文件的下载
需求:在使用weex框架时,我们使用vue文件写页面,在native端加载服务器端的js页面时由于网络状态的不确定性,我们需要在第一次加载的时候对js页面进行本地存储.也就是说我们需要把js文件下载到 ...
- Oracle面试的基本题
事务 事务的概念 事务就是对数据操作的一系列指令集合. 事务的四个特性 原子性 事务的操作要么全部成功,要么全部失败,如果有一个指令失败,那么事务回滚到初始状态. 一致性 事务的执行不能破坏数据的完整 ...
- Java Spring学习笔记----Bean的依赖注入(设值注入方式)1
Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 ...
- html前端学习
html : 1.相当于没有穿衣服的人,一套浏览器认识的规则, 2.开发者: 学习html规则 开发后台程序: -写html文件(充当模板) -数据库获取数据,然后替换到html文件的指定位置(web ...
- Git冲突与解决方法
1.git冲突的场景 情景一:多个分支代码合并到一个分支时: 情景二:多个分支向同一个远端分支推送代码时: 实际上,push操作即是将本地代码merge到远端库分支上. 关于push和pull其实就分 ...
- 单表(SSM、SpringBoot、SpringCloud、Freemaker、BootStrap等)
山门也有门门道道, 开发.测试.安卓...... 小子被纳入MIS小山峰,虽不及BOP势力庞大,高手如云, 仅寥寥七人, 却也于入小山峰之事乐趣至极. 前几日峰主布下一道新手任务, 制作一张单表并运行 ...