?? xdifferential.m
字號:
function xDifferential
% 分別用有限差分法、多項式擬合方法和三次樣條插值方法對離散數(shù)據(jù)進行數(shù)值微分
%
% 有限差分法:用差分函數(shù)diff()近似計算導(dǎo)數(shù),即dy=diff(y)./diff(x)%
%
% 多項式擬合方法:先用polyfit()根據(jù)離散數(shù)據(jù)擬合得到多項式插值函數(shù)p,
% 再用polyder()計算p的導(dǎo)數(shù)pp,然后用polyval()計算pp在x的導(dǎo)數(shù)值
%
% 三次樣條插值方法:先用csapi()根據(jù)離散數(shù)據(jù)生成三次樣條插值函數(shù)cs,
% 再用fnder()計算cs的導(dǎo)數(shù)pp,然后用fnval()計算pp在xi的導(dǎo)數(shù)值
%
% 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
% 用函數(shù)y = cos(x)生成離散數(shù)據(jù)
x = [0:pi/20:pi];
y = cos(x);
dy = -sin(x) % 準(zhǔn)確值
% 有限差分法
dy1 = diff(y)./diff(x)
x1 = x(1:length(x)-1);
% 多項式擬合方法
p = polyfit(x,y,5); % 進行多項式擬合,得到多項式p
pp = polyder(p); % 對擬合得到的多項式求導(dǎo),得到導(dǎo)函數(shù)pp
dy2 = polyval(pp,x) % 計算導(dǎo)函數(shù)pp在x的導(dǎo)數(shù)值
% 三次樣條插值方法
cs = csapi(x,y); % 生成三次樣條插值函數(shù)cs
pp = fnder(cs); % 計算三次樣條插值函數(shù)cs的導(dǎo)函數(shù)pp
dy3 = fnval(pp,x) % 計算導(dǎo)函數(shù)pp在x的導(dǎo)數(shù)值
% 多項式擬合方法和三次樣條插值方法的結(jié)果與準(zhǔn)確值之差
disp('多項式擬合方法和三次樣條插值方法的結(jié)果與準(zhǔn)確值之差[dy-dy2;dy-dy3]:')
disp([dy-dy2; dy-dy3])
% 繪制幾種方法的導(dǎo)函數(shù)曲線
plot(x,dy,'ko',x1,dy1,'k.-',x,dy2,'b-',x,dy3,'k--')
xlabel('x')
ylabel('y')
title('函數(shù)cos(x)的導(dǎo)函數(shù)曲線')
legend('準(zhǔn)確值','有限差分法','多項式擬合方法','三次樣條插值方法')
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -