আমি নিম্নলিখিত সি ++ কোড দিয়ে টিউরিংয়ের প্রতিক্রিয়া-প্রসারণ সিস্টেমটি সমাধান করছি। এটি খুব ধীর: 128x128 পিক্সেল জমিনের জন্য, গ্রহণযোগ্য পুনরাবৃত্তির সংখ্যা 200 - যার ফলে 2.5 সেকেন্ড বিলম্ব হয়। আকর্ষণীয় চিত্র পেতে আমার 400 টি পুনরাবৃত্তি প্রয়োজন - তবে 5 সেকেন্ডের অপেক্ষা খুব বেশি। এছাড়াও, টেক্সচারের আকারটি আসলে 512x512 হওয়া উচিত - তবে এর ফলে বিশাল অপেক্ষার সময় আসে। ডিভাইসগুলি আইপ্যাড, আইপড।
এটির দ্রুত করার কোনও সুযোগ আছে কি? ইউলার পদ্ধতি আস্তে আস্তে রূপান্তরিত হয় (উইকিপিডিয়া) - দ্রুত পদ্ধতি থাকলে পুনরাবৃত্তির সংখ্যা হ্রাস করতে পারে?
সম্পাদনা: থমাস ক্লিম্পেল যেমন উল্লেখ করেছেন, লাইনগুলি: "যদি (এম_আন [i] [জে] <0.0) {...}", "যদি (এম_বিএন [i] [জে] <0.0) {...}" অভিযোজনে বিলম্ব করছে: অপসারণের পরে, 75 টি পুনরাবৃত্তির পরে অর্থবহ চিত্রটি উপস্থিত হয় । আমি নীচে কোড লাইন মন্তব্য করেছেন।
void TuringSystem::solve( int iterations, double CA, double CB ) {
m_iterations = iterations;
m_CA = CA;
m_CB = CB;
solveProcess();
}
void set_torus( int & x_plus1, int & x_minus1, int x, int size ) {
// Wrap "edges"
x_plus1 = x+1;
x_minus1 = x-1;
if( x == size - 1 ) { x_plus1 = 0; }
if( x == 0 ) { x_minus1 = size - 1; }
}
void TuringSystem::solveProcess() {
int n, i, j, i_add1, i_sub1, j_add1, j_sub1;
double DiA, ReA, DiB, ReB;
// uses Euler's method to solve the diff eqns
for( n=0; n < m_iterations; ++n ) {
for( i=0; i < m_height; ++i ) {
set_torus(i_add1, i_sub1, i, m_height);
for( j=0; j < m_width; ++j ) {
set_torus(j_add1, j_sub1, j, m_width);
// Component A
DiA = m_CA * ( m_Ao[i_add1][j] - 2.0 * m_Ao[i][j] + m_Ao[i_sub1][j] + m_Ao[i][j_add1] - 2.0 * m_Ao[i][j] + m_Ao[i][j_sub1] );
ReA = m_Ao[i][j] * m_Bo[i][j] - m_Ao[i][j] - 12.0;
m_An[i][j] = m_Ao[i][j] + 0.01 * (ReA + DiA);
// if( m_An[i][j] < 0.0 ) { m_An[i][j] = 0.0; }
// Component B
DiB = m_CB * ( m_Bo[i_add1][j] - 2.0 * m_Bo[i][j] + m_Bo[i_sub1][j] + m_Bo[i][j_add1] - 2.0 * m_Bo[i][j] + m_Bo[i][j_sub1] );
ReB = 16.0 - m_Ao[i][j] * m_Bo[i][j];
m_Bn[i][j] = m_Bo[i][j] + 0.01 * (ReB + DiB);
// if( m_Bn[i][j] < 0.0 ) { m_Bn[i][j]=0.0; }
}
}
// Swap Ao for An, Bo for Bn
swapBuffers();
}
}