chain.m

来自「很多matlab的源代码」· M 代码 · 共 46 行

M
46
字号
function [nn,dd] = chain(num,den,n)
%CHAIN 	Derivative of polynomial using chain rule
%	[N,D]=CHAIN(P,Q,M) returns Mth derivative (as N/D) of polynomial P/Q
%	Defaults: M=1, Q=1
%	N=CHAIN(U) returns the derivative of the polynomial P
%
%       CHAIN (with no input arguments) invokes the following example:
%
%        % Evaluate the 2nd derivative of s/(s*s+4) 
%        >>[a,b]=chain([1 0],[1 0 4],2)


% ADSP Toolbox: Version 2.0 
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998


if nargin==0,help chain,disp('Strike a key to see results of the example')
pause,[a,b]=chain([1 0],[1 0 4],2),return,end

if nargin<3,n=1;end
if n<0,error('n must be an integer >=0');return,end
if nargin<2, den=1;end  %polynomial case
num=num(:).';den=den(:).';
if n==0,nn=num;dd=den;return,end
while num(1)==0,num(1)=[];end
while den(1)==0,den(1)=[];end
ln=length(num);ld=length(den);
nn=num;dd=den;
%p=polyder(den);%Replace
if ld<2,pd=0;else,pd=den(1:ld-1).*(ld-1:-1:1);end %Derivative
for i=1:n
if ln<2,pn=0;else,pn=nn(1:ln-1).*(ln-1:-1:1);end %Derivative
n1=-i*conv(nn,pd);l1=length(n1);
n2=conv(den,pn);l2=length(n2);
nn=[zeros(1,l2-l1) n1]+[zeros(1,l1-l2) n2];ln=length(nn);
dd=conv(dd,den);
end
while nn(1)==0,nn(1)=[];end
while dd(1)==0,dd(1)=[];end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?