<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519</link>
    <title>MATLAB Central Newsreader - Interpolation</title>
    <description>Feed for thread: Interpolation</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Mon, 16 Jul 2007 14:45:56 -0400</pubDate>
      <title>Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383171</link>
      <author>Jianbin </author>
      <description>Does anyone have the code to do interpolation so that it always takes the lower value.&lt;br&gt;
&lt;br&gt;
For example, here is a known distribution&lt;br&gt;
X     Y&lt;br&gt;
0.01 200&lt;br&gt;
0.02 500&lt;br&gt;
0.03 700&lt;br&gt;
0.04 900&lt;br&gt;
0.05 1000&lt;br&gt;
...  ...&lt;br&gt;
0.99 20000&lt;br&gt;
1    20300 &lt;br&gt;
&lt;br&gt;
if x1=0.015, then y1=200; x1=0.019, y1=200; x1=0.039, y1=700;...&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Thanks</description>
    </item>
    <item>
      <pubDate>Mon, 16 Jul 2007 20:39:02 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383237</link>
      <author>Per Sundqvist</author>
      <description>help sort. Try this&lt;br&gt;
&lt;br&gt;
xd=0.15;%your data point&lt;br&gt;
[dummy,ix]=sort(abs(xd-x));&lt;br&gt;
val_closest=[y(ix(1)) y(ix(2))]&lt;br&gt;
[yy,ix0]=sort(val_clostest);&lt;br&gt;
%yy is the closest smallest value y&lt;br&gt;
yy&lt;br&gt;
%and correspond to closest datapoint xx&lt;br&gt;
xx=x(ix0)&lt;br&gt;
&lt;br&gt;
/Per</description>
    </item>
    <item>
      <pubDate>Mon, 16 Jul 2007 22:38:26 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383254</link>
      <author>John D'Errico</author>
      <description>&amp;gt; Does anyone have the code to do interpolation so that it always takes the lower value.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; For example, here is a known distribution&lt;br&gt;
&amp;gt; X Y&lt;br&gt;
&amp;gt; 0.01 200&lt;br&gt;
&amp;gt; 0.02 500&lt;br&gt;
&amp;gt; 0.03 700&lt;br&gt;
&amp;gt; 0.04 900&lt;br&gt;
&amp;gt; 0.05 1000&lt;br&gt;
&amp;gt; ... ...&lt;br&gt;
&amp;gt; 0.99 20000&lt;br&gt;
&amp;gt; 1 20300 &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; if x1=0.015, then y1=200; x1=0.019, y1=200; x1=0.039, y1=700;...&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
In your example, its simple.&lt;br&gt;
&lt;br&gt;
ind = floor(x1/0.1);&lt;br&gt;
y1 = Y(ind);&lt;br&gt;
&lt;br&gt;
If X is not so simply spaced, then you can use&lt;br&gt;
interp1.&lt;br&gt;
&lt;br&gt;
ind = floor(interp1(X,1:length(X),x1,'linear'));&lt;br&gt;
y1 = Y(ind);&lt;br&gt;
&lt;br&gt;
HTH,&lt;br&gt;
John</description>
    </item>
    <item>
      <pubDate>Tue, 17 Jul 2007 00:36:36 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383263</link>
      <author>us</author>
      <description>&amp;lt;SNIP apparent interpolation...&lt;br&gt;
&lt;br&gt;
one of the many solutions&lt;br&gt;
&lt;br&gt;
% your dist and input&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d=[&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.01 100&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.02 200&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.03 300&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.09 900&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;in=[&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.01&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.011&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.015&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.025&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.07&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.09&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.091&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];&lt;br&gt;
% the engine&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ix,ix]=histc(in,sort([d(:,1);in(end)+1]));&lt;br&gt;
% the result&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r=[in,d(ix,:)]&lt;br&gt;
&lt;br&gt;
us</description>
    </item>
    <item>
      <pubDate>Tue, 17 Jul 2007 18:20:08 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383391</link>
      <author>Stephen</author>
      <description>Thanks for your help.&lt;br&gt;
&lt;br&gt;
I try to write this as a function:&lt;br&gt;
&lt;br&gt;
===========================================================&lt;br&gt;
function y1=NoInterp(x,Y,x1)&lt;br&gt;
&lt;br&gt;
if x1 &amp;lt; min(x)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x1=min(x);&lt;br&gt;
elseif x1&amp;gt;max(x)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x1=max(x);&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
ind = floor(interp1(x,1:length(x),x1,'linear'));&lt;br&gt;
y1 = Y(ind);&lt;br&gt;
&lt;br&gt;
===========================================================&lt;br&gt;
&lt;br&gt;
When x1 is in the range, the function runs OK. When x1 is out of range, the if statement I added to your code doesn't seem to work properly and the function fails. Could you help me figure out what's wrong here?&lt;br&gt;
&lt;br&gt;
Thanks a lot.&lt;br&gt;
&lt;br&gt;
Stephen</description>
    </item>
    <item>
      <pubDate>Tue, 17 Jul 2007 18:30:33 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383393</link>
      <author>John D'Errico</author>
      <description>&amp;gt; I try to write this as a function:&lt;br&gt;
&lt;br&gt;
===========================================================&lt;br&gt;
function y1=NoInterp(x,Y,x1)&lt;br&gt;
&lt;br&gt;
if x1 &amp;lt; min(x)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x1=min(x);&lt;br&gt;
elseif x1&amp;gt;max(x)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x1=max(x);&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
ind = floor(interp1(x,1:length(x),x1,'linear'));&lt;br&gt;
y1 = Y(ind);&lt;br&gt;
&lt;br&gt;
===========================================================&lt;br&gt;
&lt;br&gt;
&amp;gt; When x1 is in the range, the function runs OK. When x1 is out of range, the &amp;gt; if statement I added to your code doesn't seem to work properly and the&lt;br&gt;
&amp;gt; function fails. Could you help me figure out what's wrong here?&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
The problem is that if does not work as you are using&lt;br&gt;
it. An if statement is not &quot;vectorized&quot;.&lt;br&gt;
&lt;br&gt;
However, why bother? Min and max ARE vectorized.&lt;br&gt;
&lt;br&gt;
What does this do for you?&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;x1 = min(x1,max(x));&lt;br&gt;
&lt;br&gt;
How about this?&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;x1 = max(x1,min(x));&lt;br&gt;
&lt;br&gt;
John</description>
    </item>
    <item>
      <pubDate>Tue, 17 Jul 2007 18:51:34 -0400</pubDate>
      <title>Re: Interpolation</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/152519#383398</link>
      <author>Stephen</author>
      <description>Thanks for the prompt response.&lt;br&gt;
&lt;br&gt;
I realized the error in my code as x1 is supposed to be a vector. So I changed the code to be:&lt;br&gt;
===============================================&lt;br&gt;
function y1=NoInterp(x,Y,xd)&lt;br&gt;
xd(xd&amp;lt;min(x))=min(x);&lt;br&gt;
xd(xd&amp;gt;max(x))=max(x);&lt;br&gt;
ind = floor(interp1(x,1:length(x),xd,'linear'));&lt;br&gt;
y1 = Y(ind);&lt;br&gt;
================================================&lt;br&gt;
&lt;br&gt;
And it works fine now.&lt;br&gt;
&lt;br&gt;
Thanks,&lt;br&gt;
Stephen</description>
    </item>
  </channel>
</rss>

