📄 xdifferential.m
字号:
function xDifferential
% 分别用有限差分法、多项式拟合方法和三次样条插值方法对离散数据进行数值微分
%
% 有限差分法:用差分函数diff()近似计算导数,即dy=diff(y)./diff(x)%
%
% 多项式拟合方法:先用polyfit()根据离散数据拟合得到多项式插值函数p,
% 再用polyder()计算p的导数pp,然后用polyval()计算pp在x的导数值
%
% 三次样条插值方法:先用csapi()根据离散数据生成三次样条插值函数cs,
% 再用fnder()计算cs的导数pp,然后用fnval()计算pp在xi的导数值
%
% Author: HUANG Huajiang
% Copyright 2003 UNILAB Research Center,
% East China University of Science and Technology, Shanghai, PRC
% $Revision: 1.0 $ $Date: 2003/02/9 $
clear all
clc
% 用函数y = cos(x)生成离散数据
x = [0:pi/20:pi];
y = cos(x);
dy = -sin(x) % 准确值
% 有限差分法
dy1 = diff(y)./diff(x)
x1 = x(1:length(x)-1);
% 多项式拟合方法
p = polyfit(x,y,5); % 进行多项式拟合,得到多项式p
pp = polyder(p); % 对拟合得到的多项式求导,得到导函数pp
dy2 = polyval(pp,x) % 计算导函数pp在x的导数值
% 三次样条插值方法
cs = csapi(x,y); % 生成三次样条插值函数cs
pp = fnder(cs); % 计算三次样条插值函数cs的导函数pp
dy3 = fnval(pp,x) % 计算导函数pp在x的导数值
% 多项式拟合方法和三次样条插值方法的结果与准确值之差
disp('多项式拟合方法和三次样条插值方法的结果与准确值之差[dy-dy2;dy-dy3]:')
disp([dy-dy2; dy-dy3])
% 绘制几种方法的导函数曲线
plot(x,dy,'ko',x1,dy1,'k.-',x,dy2,'b-',x,dy3,'k--')
xlabel('x')
ylabel('y')
title('函数cos(x)的导函数曲线')
legend('准确值','有限差分法','多项式拟合方法','三次样条插值方法')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -