?? 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 + -