您现在的位置:首页 >> ★免费资源 >> 源码下载 >> 内容

【MATLAB代做|FPGA代做】Hermite插值的实现及各段系数的提取

时间:2018-4-14 22:36:48 点击:

  核心提示:【MATLAB代做|FPGA代做】Hermite插值的实现及各段系数的提取 ...

在Matlab中,我们可以使用pwch()函数来实现

p=pwch(x,y,s)返回插值系数,我们可以使用ppval(p,x0)来计算某一点的插值结果

但是请记住pwch返回的不是每一段的直接多项式的系数,例如下面的表达错误的

>> x = 1:10;
>> y = sin( x );
>> s = cos( x ); % slopes
>> pp = pwch( x, y, s ) ;%interpolation
>>polyval(pp.coefs(1,:),x(1))%这个用法是错误的

而实际上pwch返回的pp.coefs的第i行,是下面多项式的系数

f=coefs(i,1)*(X-breaks(i))^3 +coefs(i,2)*(X-breaks(i))^2 +coefs(i,3)*(X-breaks(i)) + coefs(i,4)

其中,i取从1到length(x)-1

Matlab只提供了怎么计算X对应插值的函数ppval(),没有提供直接多项式系数提取函数。也就是说,你要计算某些点的对应插值时,只需ppval(pp,xx),这里pp是pwch函数的输出pp形式,必须照写,xx可以是标量或矩阵

而你是想得到形如c(i,1)*(X)^3 +c(i,2)*(X)^2 +c(i,3)*X + co(i,4)的各段上的多项式系数,就要把最上面的多项式 f 展开后,提取系数,而对此matlab没有提供直接可用的函数

下面的代码可以得到你需要的系数:

%by dsj6700417

%see also 
%all rights reserved by www.matlabsky.cn
x = 1:10;
y = sin( x );
s = cos( x ); % slopes
pp = pwch( x, y, s ) ;
[breaks,coefs,l,k,d] = unmkpp(pp);
syms X,
c=zeros(9,4);
for i=1length(x)-1)
f=coefs(i,1)*(X-breaks(i))^3 +coefs(i,2)*(X-breaks(i))^2 ...
+coefs(i,3)*(X-breaks(i)) + coefs(i,4);
c(i,:) = sym2poly(f);
end
c %展开后的插值多项式的系数

注:如果你要计算x=1时,插值多项式的值,用polyval(pp.coefs(1,:),x(1))是不正确的
按照上面的程序,可以用下面两个办法得到:

>> ppval(pp,1)
ans =
0.8415
>> polyval(c(1,:),1)
ans =
0.8415

再注:下面的代码更直接的得到了你想要的系数:

%by dsj6700417
%all rights reserved by www.matlabsky.cn
x = 1:10;
y = sin( x );
z = cos( x );
pp=zeros(length(x)-1,4);
for i=1length(x)-1)
b=[y(i) y(i+1) z(i) z(i+1)]';
A1=[x(i)^3 x(i)^2 x(i) 1];
A2=[x(i+1)^3 x(i+1)^2 x(i+1) 1];
A3=[3*x(i)^2 2*x(i) 1 0];
A4=[3*x(i+1)^2 2*x(i+1) 1 0]; 
A=[A1; A2; A3; A4];
pp(i,:)=inv(A)*b;
end
pp  %展开后的插值多项式的系数

作者:不详 来源:网络
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2018 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment