-
matlab 三次插值函数图像,如何用MATLAB实现三次样条插值函数模拟车门曲线
2021-04-22 11:28:56用三次样条函数 去模拟汽车门的曲线,车门曲线的型值点数据如下0 1 2 3 4 5 6 7 8 9 102.51 3.30 4.04 4.70 5.22 5.54 5.78 ...用三次样条函数 去模拟汽车门的曲线,车门曲线的型值点数据如下
0 1 2 3 4 5 6 7 8 9 10
2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80
>> x=0:1:10;
y=[2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80];
dy0=0.8;
dy10=0.2;
xx=0:.01:10;
hh=h(x);
uu=u(hh);
dd=d(hh,y);
d0=6.0/hh(1)*((y(2)-y(1))/hh(1)-dy0);
d10=6.0/hh(10)*(dy10-(y(11)-y(10))/hh(10));
a=[uu 1];
b=[2 2 2 2 2 2 2 2 2 2 2];
c=[1 1-uu];
d=[d0 dd d10];
f1=m(a,b,c,d,x);
for i=1:1001
yy(i)=s(x,y,hh,f1,xx(i));
end
plot(x,y,'bo-',xx,yy,'r')
??? Undefined function or method 'h' for input arguments of type 'double'.
>> function hh=h(x)
n=length(x)-1;
for i=1:n
hh(i)=x(i+1)-x(i);
end
??? function hh=h(x)
|
Error: Function definitions are not permitted in this context.
>> function uu=u(x)
n=length(x)-1;
for i=1:n
uu(i)=x(i)/(x(i)+x(i+1));
end
??? function uu=u(x)
|
Error: Function definitions are not permitted in this context.
>> function dd=d(hh,y)
n=length(hh)-1;
for i=1:n
dd(i)=6.0/(hh(i)+hh(i+1))*((y(i+2)-y(i+1))/hh(i+1)-(y(i+1)-y(i))/hh(i));
end
??? function dd=d(hh,y)
|
Error: Function definitions are not permitted in this context.
>> function f=m(a,b,c,d,x)
n=length(x)-1;
for i=2:n
r=a(i-1)/b(i-1);
b(i)=b(i)-r*c(i-1);
d(i)=d(i)-r*d(i-1);
end
d(n+1)=d(n+1)/b(n+1);
for i=n:-1:1
d(i)=(d(i)-c(i)*d(i+1)/b(i+1))/b(i);
end
f=d;
??? function f=m(a,b,c,d,x)
|
Error: Function definitions are not permitted in this context.
>> function an=s(x,y,h,f,x0)
n=length(x)-1;
for i=1:n
if x0>=x(i)&x0<=x(i+1)
an=f(i)*(x(i+1)-x0)^3/(6*h(i))+f(i+1)*(x0-x(i))^3/(6*h(i))+(y(i)-f(i)*h(i)^2/6)*(x(i+1)-x0)/h(i)+(y(i+1)-f(i+1)*h(i)^2/6)*(x0-x(i))/h(i);
end
end
??? function an=s(x,y,h,f,x0)
|
Error: Function definitions are not permitted in this context.
-
Matlab程序三次样条插值函数x_matlab三次样条插值法
2020-11-17 21:06:35已知一组数据点 编写一程序求解三次样 条插值函数 满足 并针对下面一组具体实验数据 0.25 0.3 0.39 0.45 0.53 0.5000 0.5477 0.6245 0.6708 0.7280 求解其中边界条件为 . 解 Matlab 计算程序为 clear clc x=[0.25 ... -
MATLAB实现拉格朗日插值(线性插值、二次插值、三次插值······)
2019-03-18 00:37:21已知 sin(0.32)=0.314567,sin(0.34)=0.333487,sin(0.36)=0.352274, sin(0.38)=0.370920。 请采用线性插值、二次插值、三次插值分别计算 sin(0.35)的值。 -
Matlab三次样条插值
2019-07-08 10:20:50MATLAB中有自带的三次样条插值函数 插值函数:spline,调用方法: yk =spline(x,y,xk) 例子: % 读取插值数据 a = load('data.txt'); x = a(:,1); y = a(:,2); xx = linspace(max(x),min(x),100); yy = spline(x,y,...MATLAB中有自带的三次样条插值函数
- 插值函数:spline,调用方法: yk =
spline
(x,y,xk)
例子:
% 读取插值数据 a = load('data.txt'); x = a(:,1); y = a(:,2); xx = linspace(max(x),min(x),100); yy = spline(x,y,xx); %三次样条插值 % 保存插值结果 fileID = fopen('result.txt','w+'); fprintf(fileID,'%4s %12s\r\n','xx','yy'); fprintf(fileID,'%6.2f %12.8f\n',xx,yy); fclose(fileID) %画图 plot(x,y,'o',xx,yy,'-r') legend('true','cubicSpline') saveas(gcf,'out.jpg')
data.txt
1 93 30 96 60 84 90 84 120 48 150 38 180 51 210 57 240 40 270 45 300 50 330 75 360 80 390 60 420 72 450 67 480 71 510 7 540 74 570 63 600 69
计算结果
- 插值函数:spline,调用方法: yk =
-
matlab自带的插值函数interp1的四种插值方法
2015-09-10 15:00:08分段线性插值,临近插值,球面插值,三次多项式插值!!x=0:2*pi; y=sin(x); xx=0:0.5:2*pi; %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx); figure plot(x,y,'o',xx,y1,'r') title('分段线性插值') %临近插值 y2=interp1(x,y,xx,'nearest'); figure plot(x,y,'o',xx,y2,'r'); title('临近插值') %球面线性插值 y3=interp1(x,y,xx,'spline'); figure plot(x,y,'o',xx,y3,'r') title('球面插值') %三次多项式插值法 y4=interp1(x,y,xx,'cubic'); figure plot(x,y,'o',xx,y4,'r'); title('三次多项式插值')
(1) Nearest方法速度最快,占用内存最小,但一般来说误差最大,插值结果最不光滑。
(2) Spline三次样条插值是所有插值方法中运行耗时最长的,插值函数及其一二阶导函数都连续,是最光滑的插值方法。占用内存比cubic方法小,但是已知数据分布不均匀的时候可能出现异常结果。
(3) Cubic三次多项式插值法中,插值函数及其一阶导数都是连续的,所以插值结果比较光滑,速度比Spline快,但是占用内存最多。
语法形式
说明
y=interp1(x,Y,xi)
由已知点集(x,Y)插值计算xi上的函数值
y=interp1(x,Y,xi)
相当于x=1:length(Y)的interp(x,Y,xi)
y=interp1(x,Y,xi,method)
用指定插值方法计算插值点xi上的函数值
y=interp1(x,Y,xi,method,’extrap’)
对xi中超出已知点集的插值点用指定插值方法计算函数值
y=interp1(x,Y,xi,method,’extrap’,extrapval)
用指定方法插值xi上的函数值,超出已知点集处函数值取extrapval
y=interp1(x,Y,xi,method,’pp’)
用指定方法插值,但返回结果为分段多项式
Method
方法描述
‘nearest’
最邻近插值:插值点处函数值与插值点最邻近的已知点函数值相等
‘liner’
分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函数预测。Matlab中interp1的默认方法。
‘spline’
样条插值:默认为三次样条插值。可用spline函数替代
‘pchip’
三次Hermite多项式插值,可用pchip函数替代
‘cubic’
同’pchip’,三次Hermite多项式插值
更新日志2020-11-3
有个小老弟问我,怎么把这个插值函数获取到,后续调用,然后去看了一眼官方文档,有一句话
pp = interp1(x,v,method,'pp')
分段多项式,以可传递到
ppval
函数进行计算的结构体的形式返回。也就是说这个插值函数可以使用上述代码获取到函数,然后使用ppval执行这个函数在某个特定位置的插值结果,比如
%test interpolate clear;clc;close all N=1200; x = 1:0.5:6; y = sin(x); pp = interp1(x,y,'pchip','pp'); xq= 1:0.1:6; result = ppval(pp,xq); plot(x,y,'o',xq,result,'-.')
上述代码就是将函数以`pp`变量返回,然后使用ppval调用此函数,获取在xq处的值
-
MATLAB三次样条插值算法
2010-06-18 15:46:17MATLAB三次样条插值算法,MATLAB雷克萨斯资源 -
matlab三次样条插值
2010-01-02 12:55:07实现了基于matlab的三次样条插值,很好很强大哦~~ -
MATLAB 三次埃尔米特插值、三次样条插值、插值算法人口预测
2020-03-19 12:29:34分段三次埃尔米特插值 % 分段三次埃尔米特插值 x = -pi:pi; %导入数据 y = sin(x); new_x = -pi:0.1:pi; p = pchip(x,y,new_x); figure(1);%同一脚本文件,想要画多个图,给每个图编号 plot(x,y,'o',new_x,p,'r-') ...分段三次埃尔米特插值
% 分段三次埃尔米特插值 x = -pi:pi; %导入数据 y = sin(x); new_x = -pi:0.1:pi; p = pchip(x,y,new_x); figure(1);%同一脚本文件,想要画多个图,给每个图编号 plot(x,y,'o',new_x,p,'r-')
% plot函数用法: % plot(x1,y1, x2, y2) %线方式: -实线 :点线 -.虚点线 - -波折线 %点方式: .圆点 +加号 *星号 x X形 o小圆 %颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青
三次样条插值
%三次样条插值和分段三次埃尔米特插值的对比 x = -pi:pi; %导入数据 y = sin(x); new_x = -pi:0.1:pi; p1 = pchip(x,y,new_x); %分段三次埃尔米特插值 p2 = spline(x,y,new_x); % 三次样条插值 figure(2); plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-') legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast');
插值算法人口预测
人口数据:
预测2019到2021年人口:%插值算法人口预测 population=[133126, 133770, 134413, 135069, 135738, 136427, 137122,137866,138639,139538]; year = 2009:2018; p1 = pchip (year, population, 2019:2021); %分段三次埃尔米特插值预测 p2 = spline (year, population, 2019:2021); %三次祥条插值预测 figure(3); plot (year, population,'o' , 2019: 2021,p1,' r*-' ,2019:2021 ,p2,'bx-'); legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast');
-
MATLAB程序分享三次样条插值法求信号的包络线源程序-MATLAB三次样条插值法 求信号的包络线源程序代码.rar
2019-08-12 21:48:19MATLAB程序分享三次样条插值法求信号的包络线源程序-MATLAB三次样条插值法 求信号的包络线源程序代码.rar -
MATLAB三次样条插值函数构造
2019-12-19 09:19:16本程序为matlab程序,用于对于给定点构造三次样条插值函数,能够输出每段函数的表达式,同时绘制了样条函数的图形。附件包含文档和程序。 -
MATLAB三次样条插值法
2018-04-24 21:55:48%三次样条插值法,求信号的包络线 clear all;close all;clc fs=30; %采样频率 t=0:1/fs:5; %采样时间 x=sin(2*pi*2*t)+sin(2*pi*4*t); %信号 %三次样条插值,求信号的包络线 d=diff(x); %对信号求导 n=length(d); ... -
matlab三次样条插值代码
2019-01-26 11:36:00matlab三次样条插值代码 function y=yangtiao() x0=[2010 2011 2012 2013 2014 2015 2016 2017]; y0=[41462 28969 32251 47694 32265 27819 33539 36994 ];%VA % x=2010:1:2017; % y2=interp1(x0,y0,x) % y3=... -
Python三次样条插值与MATLAB三次样条插值简单案例
2019-07-01 13:22:241 三次样条插值 早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿木条画下曲线,成为样条曲线。 设函数S(x)∈C2[a,b] ,且在每个小区间[xj, xj+1]上是三次... -
Matlab三次样条插值函数
2008-12-28 19:39:00自己编写的Matlab三次样条插值函数,与spline函数对照,所得图形一致。 -
matlab 三弯矩方程_MATLAB三次样条插值之三弯矩法
2020-12-23 13:48:46MATLAB三次样条插值之三弯矩法首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶法程序,没有针对节点数在三个以下的情况进行分类讨论。希望能有朋友给出更好的方法。首先,通过函数... -
MATLAB 三次样条插值源码
2018-12-17 18:55:14函数功能:三次样条插值法; 输入: x:已知点横坐标; y:已知点纵坐标; xx:插值点; 输出: yy:插值点的函数值; 示例: clear; clc; x = 0 : 0.2 : 2; y = sin(x); xx = 0 : 0.05 : 2; yy= ... -
MATLAB lagrange插值 三次样条插值
2019-09-04 15:15:38% 习题 对实验数据进行 lagrange 插值、三次样条插值 % 绘制出实验数据散点图,lagrange插值函数图,三次样条插值图 % -----------------------------------------------------------------------------------------... -
matlab双三次插值放缩代码
2018-01-06 17:14:16对一副彩色图或者灰度图直接imread后就可以传入该双三次放缩函数了,函数的第二个参数和第三个参数为放缩后的h和w。函数返回放缩后的图像,可以直接imshow看结果。 -
三次样条插值的Matlab实现(自然边界和第一边界条件)x_matlab三次样条插值法
2020-12-07 03:11:34PAGE PAGE #/ 4 第一边界条件源代码 function y=yt1(x0,y0,f_0,f_n,x) (1) %第一类边界条件下三次样条插值 %xi 所求点 %yi 所求点函数值 %x已知插值点 %y已知插值点函数值 %f_0 左端点一次导数值 %f_n 右端点一次导... -
数学建模 | MATLAB学习 | 插值 一维插值函数、三次样条插值
2018-02-03 14:32:061.一维插值函数Matlab中有现成的一维插值函数interp1,语法为 y=interp1(x0,y0,x,'method')x0,y0是已知的数据向量,其中x应以升序或者降序排列(所有的插值方法要求x0是单调的),x1是插值点的自变量坐标向量;... -
MATLAB三次样条插值之三转角法.docx
2020-11-19 14:58:45这里的sanzhj函数和intersanzhj作用相当于前面的sanwanj和intersanwj,追赶法程序通用,代码如下 % function [newu,w,newv,d]=sanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边... -
matlab_牛顿插值法_三次样条插值法
2012-06-07 15:07:12本题在算法上需要解决的问题主要是:求出第二问中的Newton插值多项式 和三次样条插值多项式 。如此,则第三、四问则迎刃而解。计算两种插值多项式的算法如下 -
matlab三弯矩法,MATLAB三次样条插值之三弯矩法
2021-04-23 10:02:0624.构造三次样条函数s(x)去模拟一只飞鸟外形的上部,测得的数据如下:x=[0.9,1.3,1.9,2.1,2.6,3.0,3.9,4.4,4.7,5.0,6.0,7.0,8.0,9.2,10.5,1 1.3,11.6,12.0,12.6,13.0,13.3];y=[1.2,1.5,1.85,2.1,2.6,2.7,2.4,2.15,...