三次样条求导函数
function ppd=ppder(pp)
% pp=spline(x0,y0)
[breaks,coefs,l]=unmkpp(pp);
% breaks 是节点横坐标,coefs是每一段上的三次多项式的系数,l 是分的段
数
for n=1:l
coefs1(n,:)=polyder(coefs(n,:));
end
ppd=mkpp(breaks,coefs1,1);
%ppd 是一个类似pp 的结构体数据,计算这样的分段多项式的值可以用
ppval(ppd,x)
举例:
>> pp=spline(linspace(0,2*pi,50),sin(linspace(0,2*pi,50)))
pp =
form: 'pp'
breaks: [1x50 double]
coefs: [49x4 double]
pieces: 49
order: 4
dim: 1
[breaks,coefs,l]=unmkpp(pp)
breaks =
Columns 1 through 12
0 0.1282 0.2565 0.3847 0.5129 0.6411 0.7694 …
…..
Columns 49 through 50
6.1550 6.2832
coefs =
-0.1643 -0.0007 1.0000 0
-0.1643 -0.0639 0.9918 0.1279
-0.1581 -0.1270 0.9673 0.2537
…….
0.1453 -0.2731 -0.8381 0.5455
0.1546 -0.2172 -0.9010 0.4339
……
-0.1503 0.2457 0.8713 -0.4907 -0.1581 0.1879 0.9269 -0.3753 -0.1643 0.1270 0.9673 -0.2537 -0.1643 0.0639 0.9918 -0.1279 l =
49
>> pp1=mkpp(breaks,coefs,1)
pp1 =
form: 'pp'
breaks: [1x50 double]
coefs: [49x4 double]
pieces: 49
order: 4
dim: 1
>>ppd=ppder(pp)
ppd =
form: 'pp'
breaks: [1x50 double]
coefs: [49x3 double]
pieces: 49
order: 3
dim: 1
>>ppval(pp,3)
ans =
0.1411
>> sin(3)
ans =
0.1411
>> ppval(ppd,3)
ans =
-0.9900
>> cos(3)
ans =
-0.9900
注意函数inline的使用
下例是当函数要求输入变量是’函数名’,而且函数较简单且不常用,没有必要为了做积分再建一个函数M文件,就可以用inline来建一个临时的可调用的函数F = inline('1./(x.^3-2*x-5)');
Q = quadl(F,0,2);
注:1、看起来F因该是一个表示函数的字符串,其实
>> F = inline('1./(x.^3-2*x-5)')
F =
Inline function:
F(x) = 1./(x.^3-2*x-5)
>> whos
Name Size Bytes Class
F 1x1 846 inline object
Grand total is 48 elements using 846 bytes.
2、function y = myfun(x)
y = 1./(x.^3-2*x-5)
-------------------------------------------------------------------------------------
Q = quadl(@myfun,0,2)或者Q = quadl('myfun',0,2)
或者Q = quadl('1./(x.^3-2*x-5)',0,2)
这几个形式都是quadl在编写过程中通过定义允许使用的形式,也就是说与
quadl的编写有关。