লিনিয়ার সিস্টেমগুলির জন্য ধ্রুপদী পুনরাবৃত্তাকারী দ্রাবকদের একত্রিতকরণ পুনরাবৃত্তি ম্যাট্রিক্সের বর্ণাল ব্যাসার্ধ দ্বারা নির্ধারিত হয়, ρ(G)। একটি সাধারণ লিনিয়ার সিস্টেমের জন্য, পুনরাবৃত্তির ম্যাট্রিক্সের বর্ণালী ব্যাসার্ধ নির্ধারণ করতে অসুবিধার কারণে একটি অনুকূল (বা এমনকি ভাল) এসওআর প্যারামিটার নির্ধারণ করা কঠিন। নীচে আমি অনেকগুলি অতিরিক্ত বিবরণ অন্তর্ভুক্ত করেছি, যেখানে আসল সমস্যার উদাহরণ রয়েছে যেখানে অনুকূল এসওআর ওজন পরিচিত।
বর্ণালী ব্যাসার্ধ এবং একত্রিতকরণ
বর্ণালী ব্যাসার্ধকে বৃহত্তম আকারের ইগন্যালুয়ের পরম মান হিসাবে সংজ্ঞায়িত করা হয়। একটি পদ্ধতি রূপান্তর করবে যদিρ<1এবং একটি ছোট বর্ণাল ব্যাসার্ধ মানে দ্রুত একত্রিতকরণ। ভারী ওজন পরামিতি নির্বাচনের উপর ভিত্তি করে পুনরাবৃত্তি ম্যাট্রিক্স প্রাপ্ত করতে ব্যবহৃত ম্যাট্রিক্স বিভাজনে পরিবর্তন করে SOR কাজ করেω, আশা করি ফলাফল পুনরাবৃত্তির ম্যাট্রিক্সের বর্ণাল ব্যাসার্ধ হ্রাস পাচ্ছে।
ম্যাট্রিক্স বিভাজন
নীচের আলোচনার জন্য, আমি ধরে নেব যে সমাধান করা সিস্টেমটি দেওয়া হয়েছে
Ax=b,
ফর্ম একটি পুনরাবৃত্তি সঙ্গে
এক্স( কে + 1 )= ভি + জিএক্স( কে ),
কোথায় বনাম একটি ভেক্টর এবং পুনরাবৃত্তি সংখ্যা ট চিহ্নিত করা হয় এক্স( কে )।
SOR পুরানো পুনরাবৃত্তির একটি ওজনযুক্ত গড় এবং একটি গাউস-সিডেল পুনরাবৃত্তি গ্রহণ করে। গাউস-সিডেল পদ্ধতি ফর্মের ম্যাট্রিক্স বিভাজনের উপর নির্ভর করে
এ = ডি + এল + ইউ
কোথায় ডি এর তির্যক একজন, এল একটি নিম্ন ত্রিভুজাকার ম্যাট্রিক্স যাতে সমস্ত উপাদান রয়েছে একজন কড়া নীচে এবং তিরস্কার আর সমস্ত উপাদান সমন্বিত একটি উচ্চতর ত্রিভুজাকার ম্যাট্রিক্স একজনকঠোরভাবে তির্যক উপরে। গাউস-সিডেল পুনরাবৃত্তিটি এরপরে দেওয়া হয়
এক্স( কে + 1 )= ( ডি + এল))- 1খ +জিজি - এসএক্স( কে )
এবং পুনরাবৃত্তি ম্যাট্রিক্স হয়
জিজি - এস= - ( ডি + এল))- 1উ ।
SOR এর পরে যেমন লেখা যেতে পারে
এক্স( কে + 1 )= ω ( ডি + ω এল)- 1খ +জিএস ও আরএক্স( কে )
কোথায়
জিএস ও আর= ( ডি + ω এল)- 1( ( 1 - ω ) ডি - ω ইউ ) ।
পুনরাবৃত্তি স্কিমের রূপান্তর হার নির্ধারণ করা এই পুনরাবৃত্তির ম্যাট্রিকগুলির বর্ণালী ব্যাসার্ধ নির্ধারণ করতে সত্যিই ফোটে। সাধারণভাবে, ম্যাট্রিক্সের কাঠামো সম্পর্কে নির্দিষ্ট কিছু না জানলে এটি একটি কঠিন সমস্যা। খুব কম উদাহরণ রয়েছে যা আমি জানতে পারি যেখানে অনুকূল ওজন সহগের গুণমানযোগ্য। প্রস্তুতিতে,ωচলমান অ্যালগরিদমের পরিলক্ষিত (অনুমান) সংযোগের ভিত্তিতে ফ্লাইয়ের উপর নির্ভর করতে হবে। এটি কিছু ক্ষেত্রে কাজ করে, তবে অন্য ক্ষেত্রে ব্যর্থ হয়।
অনুকূল এসওআর
সর্বোত্তম ওজন সহগের জ্ঞাত যেখানে একটি বাস্তব উদাহরণ পইসন সমীকরণ সমাধানের প্রসঙ্গে উত্থাপিত হয়:
∇2u = f আমি এন Ω u = g ণ এন ∂ Ω
এই সিস্টেমটি 2 ডি-তে স্কোর ডোমেনে সমান্তরাল গ্রিড ব্যবধানের সাথে দ্বিতীয় ক্রমের সীমাবদ্ধ পার্থক্যগুলি ব্যবহার করে তির্যকের উপরে 4-এর সাথে একটি সমমিত ব্যান্ডযুক্ত ম্যাট্রিক্স এবং -1 এর আরও কিছু দূরত্বে -1 এর আরও দুটি ব্যান্ডের ফলাফল ব্যবহার করে তির্যক। সীমানা শর্তের কারণে কিছু পার্থক্য রয়েছে তবে এটি মূল কাঠামো। এই ম্যাট্রিক্সটি দেওয়া, এসওআর সহগের জন্য সম্ভাব্য সর্বোত্তম পছন্দটি দিয়েছেন
ω =21 + পাপ( π)Δ এক্স / এল )
কোথায় । X গ্রিড ব্যবধান এবং এলডোমেন আকার। একটি সাধারণ সমাধানের জন্য একটি সহজ সমাধানের জন্য এটি করা এই দুটি পদ্ধতির জন্য পুনরাবৃত্তি সংখ্যা বনাম নিম্নলিখিত ত্রুটি দেয়:
আপনি দেখতে পাচ্ছেন যে, এসওআর প্রায় 100 পুনরাবৃত্তিতে মেশিনের নির্ভুলতায় পৌঁছেছে যেখানে গাউস-সিডেল প্রায় 25 টি মাত্রার চেয়ে আরও খারাপ অবস্থানে রয়েছে। আপনি যদি এই উদাহরণটি দিয়ে ঘুরে দেখতে চান তবে আমি নীচে ব্যবহৃত ম্যাটল্যাব কোডটি অন্তর্ভুক্ত করেছি।
clear all
close all
%number of iterations:
niter = 150;
%number of grid points in each direction
N = 16;
% [x y] = ndgrid(linspace(0,1,N),linspace(0,1,N));
[x y] = ndgrid(linspace(-pi,pi,N),linspace(-pi,pi,N));
dx = x(2,1)-x(1,1);
L = x(N,1)-x(1,1);
%desired solution:
U = sin(x/2).*cos(y);
% Right hand side for the Poisson equation (computed from U to produce the
% desired known solution)
Ix = 2:N-1;
Iy = 2:N-1;
f = zeros(size(U));
f(Ix,Iy) = (-4*U(Ix,Iy)+U(Ix-1,Iy)+U(Ix+1,Iy)+U(Ix,Iy-1)+U(Ix,Iy+1));
figure(1)
clf
contourf(x,y,U,50,'linestyle','none')
title('True solution')
%initial guess (must match boundary conditions)
U0 = U;
U0(Ix,Iy) = rand(N-2);
%Gauss-Seidel iteration:
UGS = U0; EGS = zeros(1,niter);
for iter=1:niter
for iy=2:N-1
for ix=2:N-1
UGS(ix,iy) = -1/4*(f(ix,iy)-UGS(ix-1,iy)-UGS(ix+1,iy)-UGS(ix,iy-1)-UGS(ix,iy+1));
end
end
%error:
EGS(iter) = sum(sum((U-UGS).^2))/sum(sum(U.^2));
end
figure(2)
clf
contourf(x,y,UGS,50,'linestyle','none')
title(sprintf('Gauss-Seidel approximate solution, iteration %d', iter))
drawnow
%SOR iteration:
USOR = U0; ESOR = zeros(1,niter);
w = 2/(1+sin(pi*dx/L));
for iter=1:niter
for iy=2:N-1
for ix=2:N-1
USOR(ix,iy) = (1-w)*USOR(ix,iy)-w/4*(f(ix,iy)-USOR(ix-1,iy)-USOR(ix+1,iy)-USOR(ix,iy-1)-USOR(ix,iy+1));
end
end
%error:
ESOR(iter) = sum(sum((U-USOR).^2))/sum(sum(U.^2));
end
figure(4)
clf
contourf(x,y,USOR,50,'linestyle','none')
title(sprintf('Gauss-Seidel approximate solution, iteration %d', iter))
drawnow
figure(5)
clf
semilogy(EGS,'b')
hold on
semilogy(ESOR,'r')
title('L2 relative error')
xlabel('Iteration number')
legend('Gauss-Seidel','SOR','location','southwest')