Skip to content

Instantly share code, notes, and snippets.

@pikipity
Created August 19, 2013 12:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pikipity/6268738 to your computer and use it in GitHub Desktop.
Save pikipity/6268738 to your computer and use it in GitHub Desktop.
function [ newindmin newindmax newindzer ] = refresh_index( x,indmin,indmax,indzer )
% Find the new indmin, indmax and inzer
%clear result
newindmin=[];
newindmax=[];
newindzer=[];
%find new indzer
for n=1:length(indzer)
if x(indzer(n))~=0
if indzer(n)==1
newindzer(n)=indzer(n)-x(indzer(n))/(x(indzer(n)+1)-x(indzer(n)));
elseif indzer(n)==length(x)
newindzer(n)=indzer(n)-1-x(indzer(n)-1)/(x(indzer(n))-x(indzer(n)-1));
else
if x(indzer(n))*x(indzer(n)+1)<0
newindzer(n)=indzer(n)-x(indzer(n))/(x(indzer(n)+1)-x(indzer(n)));
elseif x(indzer(n))*x(indzer(n)-1)<0
newindzer(n)=indzer(n)-1-x(indzer(n)-1)/(x(indzer(n))-x(indzer(n)-1));
end
end
else
newindzer(n)=indzer(n);
end
end
%find new indmin
for n=1:length(indmin)
B=[];
y=[];
if indmin(n)<4
for scale=4-indmin(n):6
B=[B;(indmin(n)-3+scale)^2 indmin(n)-3+scale 1];
y=[y;x(indmin(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmin(n)=-a(2)/(2*a(1));
elseif indmin(n)>length(x)-3
for scale=0:6-(indmin(n)-length(x)+3)
B=[B;(indmin(n)-3+scale)^2 indmin(n)-3+scale 1];
y=[y;x(indmin(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmin(n)=-a(2)/(2*a(1));
else
for scale=0:6
B=[B;(indmin(n)-3+scale)^2 indmin(n)-3+scale 1];
y=[y;x(indmin(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmin(n)=-a(2)/(2*a(1));
end
end
%find new max
for n=1:length(indmax)
B=[];
y=[];
if indmax(n)<4
for scale=4-indmax(n):6
B=[B;(indmax(n)-3+scale)^2 indmax(n)-3+scale 1];
y=[y;x(indmax(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmax(n)=-a(2)/(2*a(1));
elseif indmax(n)>length(x)-3
for scale=0:6-(indmax(n)-length(x)+3)
B=[B;(indmax(n)-3+scale)^2 indmax(n)-3+scale 1];
y=[y;x(indmax(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmax(n)=-a(2)/(2*a(1));
else
for scale=0:6
B=[B;(indmax(n)-3+scale)^2 indmax(n)-3+scale 1];
y=[y;x(indmax(n)-3+scale)];
end
a=((B'*B)\B')*y;
newindmax(n)=-a(2)/(2*a(1));
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment