matlab如何画流量图,求问怎么读取这个excel数据并用findpeaks绘制河流流量的峰值图...

想问问大家这个程序怎么run通??

x=xlsread('2006-2016日均数据.xlsx','Sheet1','A1:T365');

function [k,v]=findpeak(x,m,w)

if nargin<2

m='10 ';

end

nx=length(x);

if any(m=='v')

x=-x('A1:T365');        % invert x if searching for valleys

else

x=x(:);        % force to be a column vector

end

dx=x(2:end)-x(1:end-1);

r=find(dx>0);

f=find(dx<0);

if ~isempty(r) && ~isempty(f)    % we must have at least one rise and one fall

dr=r;

dr(2:end)=r(2:end)-r(1:end-1);

rc=ones(nx,1);

rc(r+1)=1-dr;

rc(1)=0;

rs=cumsum(rc); % = time since the last rise

df=f;

df(2:end)=f(2:end)-f(1:end-1);

fc=ones(nx,1);

fc(f+1)=1-df;

fc(1)=0;

fs=cumsum(fc); % = time since the last fall

rp=repmat(-1,nx,1);

rp([1; r+1])=[dr-1; nx-r(end)-1];

rq=cumsum(rp);  % = time to the next rise

fp=repmat(-1,nx,1);

fp([1; f+1])=[df-1; nx-f(end)-1];

fq=cumsum(fp); % = time to the next fall

k=find((rs

v=x(k);

if any(m=='q')         % do quadratic interpolation

b=0.5*(x(k+1)-x(k-1));

a=x(k)-b-x(k-1);

j=(a>0);            % j=0 on a plateau

v(j)=x(k(j))+0.25*b(j).^2./a(j);

k(j)=k(j)+0.5*b(j)./a(j);

k(~j)=k(~j)+(fq(k(~j))-rs(k(~j)))/2;    % add 0.5 to k if plateau has an even width

end

% now purge nearby peaks

if nargin>2

j=find(k(2:end)-k(1:end-1)<=w);

while any(j)

j=j+(v(j)>=v(j+1));

k(j)=[];

v(j)=[];

j=find(k(2:end)-k(1:end-1)<=w);

end

end

else

k=[];

v=[];

end

if any(m=='v')

v=-v;    % invert peaks if searching for valleys

end

if ~nargout

if any(m=='v')

x=-x;    % re-invert x if searching for valleys

ch='v';

else

ch='^';

end

plot(1:nx,x,'-',k,v,ch);

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值