<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.de/matlabcentral/newsreader/view_thread/276324</link>
    <title>MATLAB Central Newsreader - Pi approximation function optimization</title>
    <description>Feed for thread: Pi approximation function optimization</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2013 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.de/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Sat, 13 Mar 2010 01:54:06 +0000</pubDate>
      <title>Pi approximation function optimization</title>
      <link>http://www.mathworks.de/matlabcentral/newsreader/view_thread/276324#725980</link>
      <author>Jared F</author>
      <description>I came across the "brain teaser" of finding the best approximation of pi by dividing one 9-digit number by another 9-digit number.  Both numbers contain 1 through 9 once.&lt;br&gt;
&lt;br&gt;
I found a very close approximation by hand (728691345 / 231948765 = 3.141604763) but I want to know if there are any better ones.&lt;br&gt;
&lt;br&gt;
I've tried a couple different methods of writing a program to find a better approximation, but all I can come up with is a massive number of loops that would take way too long for my computer to process.&lt;br&gt;
&lt;br&gt;
I'll paste my current program below.  If you can think of a better way to write this, let me know.  I don't have an extensive background in matlab, so I'm at a loss for how to optimize this.  Thanks!&lt;br&gt;
&lt;br&gt;
Program Below&lt;br&gt;
____________________________________&lt;br&gt;
&lt;br&gt;
for a = 3:9;&lt;br&gt;
for b = 1:9;&lt;br&gt;
for c = 1:9;&lt;br&gt;
for d = 1:9;&lt;br&gt;
for e = 1:9;&lt;br&gt;
for f = 1:9;&lt;br&gt;
for g = 1:9;&lt;br&gt;
for h = 1:9;&lt;br&gt;
for i = 1:9;&lt;br&gt;
for j = 1:9;&lt;br&gt;
for k = 1:9;&lt;br&gt;
for l = 1:9;&lt;br&gt;
for m = 1:9;&lt;br&gt;
for n = 1:9;&lt;br&gt;
for o = 1:9;&lt;br&gt;
for p = 1:9;&lt;br&gt;
for q = 1:9;&lt;br&gt;
for r = 1:9;&lt;br&gt;
&lt;br&gt;
x = 100000000.*a+10000000.*b+1000000.*c+100000.*d+10000.*e+1000.*f+100.*g+10.*h+i;&lt;br&gt;
y = 100000000.*j+10000000.*k+1000000.*l+100000.*m+10000.*n+1000.*o+100.*p+10.*q+r;&lt;br&gt;
&lt;br&gt;
z = x/y;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
if (z - pi &amp;lt; .001)&lt;br&gt;
&lt;br&gt;
format short;&lt;br&gt;
&lt;br&gt;
printf('x = %i\n', x);&lt;br&gt;
printf('y = %i\n', y);&lt;br&gt;
format long;&lt;br&gt;
printf('z = %i\n', z);&lt;br&gt;
disp('----------');&lt;br&gt;
&lt;br&gt;
endif&lt;br&gt;
&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor&lt;br&gt;
endfor</description>
    </item>
    <item>
      <pubDate>Sat, 13 Mar 2010 13:18:02 +0000</pubDate>
      <title>Re: Pi approximation function optimization</title>
      <link>http://www.mathworks.de/matlabcentral/newsreader/view_thread/276324#726062</link>
      <author>Sadik </author>
      <description>Hi Jared,&lt;br&gt;
&lt;br&gt;
Here is my version of it. The operation is limited by the available memory, as well as the maximum number of elements allowed by matlab. Therefore, the following may not be the best solution, but it could hopefully show you another direction of doing it. [It seems that the search for the optimal combination is going to take about 10 hours!]&lt;br&gt;
&lt;br&gt;
Best.&lt;br&gt;
&lt;br&gt;
% brainTeaser.m&lt;br&gt;
&lt;br&gt;
allCombinations = perms(1:9);&lt;br&gt;
&lt;br&gt;
allNumbers = zeros(size(allCombinations,1),1);&lt;br&gt;
&lt;br&gt;
for k = 1:length(allNumbers)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for digit = 1:9&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allNumbers(k) = allNumbers(k) + allCombinations(k,digit)*power(10,9-digit);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
numberOfPartitions = 560; % Form blocks of numbers, each of length 9!/560&lt;br&gt;
partitionLength = length(allNumbers)/numberOfPartitions;&lt;br&gt;
&lt;br&gt;
globalMin = 1e6;&lt;br&gt;
&lt;br&gt;
for m = 1:numberOfPartitions&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;firstPartition = allNumbers((m-1)*numberOfPartitions+(1:partitionLength)); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disp(['Beginning partition ' num2str(m) ' of ' num2str(numberOfPartitions) '...'])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for n = 1:numberOfPartitions&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;secondPartition = allNumbers((n-1)*numberOfPartitions+(1:partitionLength));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrixOfDivisions = firstPartition*(1./secondPartition');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[minValue,minLocation] = min(abs(matrixOfDivisions(:)-pi));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if minValue &amp;lt; globalMin&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[row,col] = ind2sub(size(matrixOfDivisions),minLocation);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;numerator = firstPartition(row);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;denominator = secondPartition(col);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;globalMin = minValue;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
disp(['The best approximation is given by ' num2str(numerator) '/' num2str(denominator)])&lt;br&gt;
disp(['The result is equal to ' num2str(numerator/denominator) ', and pi = ' num2str(pi)])&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
"Jared F" &amp;lt;jfritz408@yahoo.com&amp;gt; wrote in message &amp;lt;hner7u$r8m$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; I came across the "brain teaser" of finding the best approximation of pi by dividing one 9-digit number by another 9-digit number.  Both numbers contain 1 through 9 once.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I found a very close approximation by hand (728691345 / 231948765 = 3.141604763) but I want to know if there are any better ones.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I've tried a couple different methods of writing a program to find a better approximation, but all I can come up with is a massive number of loops that would take way too long for my computer to process.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I'll paste my current program below.  If you can think of a better way to write this, let me know.  I don't have an extensive background in matlab, so I'm at a loss for how to optimize this.  Thanks!&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Program Below&lt;br&gt;
&amp;gt; ____________________________________&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; for a = 3:9;&lt;br&gt;
&amp;gt; for b = 1:9;&lt;br&gt;
&amp;gt; for c = 1:9;&lt;br&gt;
&amp;gt; for d = 1:9;&lt;br&gt;
&amp;gt; for e = 1:9;&lt;br&gt;
&amp;gt; for f = 1:9;&lt;br&gt;
&amp;gt; for g = 1:9;&lt;br&gt;
&amp;gt; for h = 1:9;&lt;br&gt;
&amp;gt; for i = 1:9;&lt;br&gt;
&amp;gt; for j = 1:9;&lt;br&gt;
&amp;gt; for k = 1:9;&lt;br&gt;
&amp;gt; for l = 1:9;&lt;br&gt;
&amp;gt; for m = 1:9;&lt;br&gt;
&amp;gt; for n = 1:9;&lt;br&gt;
&amp;gt; for o = 1:9;&lt;br&gt;
&amp;gt; for p = 1:9;&lt;br&gt;
&amp;gt; for q = 1:9;&lt;br&gt;
&amp;gt; for r = 1:9;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; x = 100000000.*a+10000000.*b+1000000.*c+100000.*d+10000.*e+1000.*f+100.*g+10.*h+i;&lt;br&gt;
&amp;gt; y = 100000000.*j+10000000.*k+1000000.*l+100000.*m+10000.*n+1000.*o+100.*p+10.*q+r;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; z = x/y;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; if (z - pi &amp;lt; .001)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; format short;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; printf('x = %i\n', x);&lt;br&gt;
&amp;gt; printf('y = %i\n', y);&lt;br&gt;
&amp;gt; format long;&lt;br&gt;
&amp;gt; printf('z = %i\n', z);&lt;br&gt;
&amp;gt; disp('----------');&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; endif&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor&lt;br&gt;
&amp;gt; endfor</description>
    </item>
    <item>
      <pubDate>Sat, 13 Mar 2010 13:54:02 +0000</pubDate>
      <title>Re: Pi approximation function optimization</title>
      <link>http://www.mathworks.de/matlabcentral/newsreader/view_thread/276324#726070</link>
      <author>John D'Errico</author>
      <description>"Sadik " &amp;lt;sadik.hava@gmail.com&amp;gt; wrote in message &amp;lt;hng3aa$fr9$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Hi Jared,&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Here is my version of it. The operation is limited by the available memory, as well as the maximum number of elements allowed by matlab. Therefore, the following may not be the best solution, but it could hopefully show you another direction of doing it. [It seems that the search for the optimal combination is going to take about 10 hours!]&lt;br&gt;
&amp;gt; &lt;br&gt;
&lt;br&gt;
But then your solution will take a half day to solve.&lt;br&gt;
Since I don't believe that giving a solution to someone&lt;br&gt;
who is trying to learn actually helps them at all, all I&lt;br&gt;
will do is to suggest that there are far better ways to&lt;br&gt;
approach it.&lt;br&gt;
&lt;br&gt;
Be creative. There is at least one solution with error&lt;br&gt;
as low as:&lt;br&gt;
&lt;br&gt;
error =&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-8.49968984084626e-11&lt;br&gt;
&lt;br&gt;
This took 11 lines of code to generate, and 0.23&lt;br&gt;
seconds of cpu time.&lt;br&gt;
&lt;br&gt;
John</description>
    </item>
    <item>
      <pubDate>Sat, 13 Mar 2010 21:40:26 +0000</pubDate>
      <title>Re: Pi approximation function optimization</title>
      <link>http://www.mathworks.de/matlabcentral/newsreader/view_thread/276324#726141</link>
      <author>Mark Shore</author>
      <description>"John D'Errico" &amp;lt;woodchips@rochester.rr.com&amp;gt; wrote in message &amp;lt;hng5dq$h4b$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; "Sadik " &amp;lt;sadik.hava@gmail.com&amp;gt; wrote in message &amp;lt;hng3aa$fr9$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt; Hi Jared,&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; Here is my version of it. The operation is limited by the available memory, as well as the maximum number of elements allowed by matlab. Therefore, the following may not be the best solution, but it could hopefully show you another direction of doing it. [It seems that the search for the optimal combination is going to take about 10 hours!]&lt;br&gt;
&amp;gt; &amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; But then your solution will take a half day to solve.&lt;br&gt;
&amp;gt; Since I don't believe that giving a solution to someone&lt;br&gt;
&amp;gt; who is trying to learn actually helps them at all, all I&lt;br&gt;
&amp;gt; will do is to suggest that there are far better ways to&lt;br&gt;
&amp;gt; approach it.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Be creative. There is at least one solution with error&lt;br&gt;
&amp;gt; as low as:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; error =&lt;br&gt;
&amp;gt;      -8.49968984084626e-11&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; This took 11 lines of code to generate, and 0.23&lt;br&gt;
&amp;gt; seconds of cpu time.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; John&lt;br&gt;
&lt;br&gt;
Hi John. I managed to do it in 4 lines, also 0.23 seconds on a dual core CPU. Hope the OP puts a working solution up, so we can compare.</description>
    </item>
  </channel>
</rss>
