समस्याओं की तरह जहां एसओआर गॉस-सीडेल से तेज है?


9

क्या यह कहने का कोई सरल नियम है कि क्या गॉस-सेडेल के बजाय SOR करने लायक है? (और कैसे realxation पैरामीटर अनुमान लगाने के लिए संभव तरीका )ω

मेरा मतलब सिर्फ मैट्रिक्स को देखकर है , या मैट्रिक्स की विशेष समस्या का ज्ञान है ?

मैं इस प्रश्न पर उत्तर पढ़ रहा था: क्या क्रमिक ओवर-रिलैक्सेशन (SOR) पद्धति के अनुकूलन के लिए कोई उत्तराधिकार है? लेकिन यह थोड़ा बहुत परिष्कृत है। मैं सरल अनुमानों को नहीं देखता कि कैसे वर्णक्रमीय त्रिज्या का अनुमान लगाता हूं कि केवल मैट्रिक्स (या समस्या जो यह प्रतिनिधित्व करता है) को देख रहा है।

मैं कुछ और सरल करना चाहता हूं - मैट्रिस (समस्याओं) के कुछ ही उदाहरण हैं जिनके लिए एसओआर तेजी से जुटते हैं।


मैं इस राजा के मैट्रिक्स के लिए SOR के साथ प्रयोग कर रहा था: जहाँ पहचान मैट्रिक्स हूँ, और s unifrom वितरण से यादृच्छिक संख्याएँ हैं।A=I+C+RICij=c i,jRij|Rij|<r। मैं सोच रहा था कि इष्टतम की कुछ निर्भरता होगीω मापदंडों पर c,r

संपादित करें: मैं बहुत छोटा था c,r सुनिश्चित करने के लिए था Aदृढ़ता से तिरछे प्रमुख है। (|c|<0.1, r<2|c|आयाम 5-10 के मैट्रिक्स के लिए)। मुझे यह भी कहना चाहिए कि येA वास्तविक और सममित था।

हालाँकि, मैंने पाया कि गॉस-सेडेल (ω=1) लगभग हमेशा सबसे अच्छा (?) है । क्या इसका मतलब यह है कि दोनों के बीच कुछ अधिक संबंध होना चाहिएAijSOR का लाभ पाने के लिए? या मैंने कुछ गलत किया है?


मुझे पता है, कि एसओआर सबसे कुशल सॉल्वर (सीजी, जीएमआरईएस ... की तुलना में) नहीं है, लेकिन इसे लागू करने और पार्लेलाइज करने और विशेष समस्या के लिए संशोधित करने के लिए सरल है। प्रोटोटाइपिंग के लिए अच्छा है।

जवाबों:


5

रैखिक प्रणालियों के लिए शास्त्रीय पुनरावृत्त सॉल्वर के अभिसरण को पुनरावृत्ति मैट्रिक्स के वर्णक्रमीय त्रिज्या द्वारा निर्धारित किया जाता है, ρ(G)सामान्य रैखिक प्रणाली के लिए, पुनरावृत्ति मैट्रिक्स के वर्णक्रमीय त्रिज्या को निर्धारित करने में कठिनाई के कारण एक इष्टतम (या यहां तक ​​कि अच्छा) एसओआर पैरामीटर निर्धारित करना मुश्किल है। नीचे मैंने कई अतिरिक्त विवरण शामिल किए हैं, जिसमें एक वास्तविक समस्या का उदाहरण शामिल है जहां इष्टतम एसओआर वजन जाना जाता है।

स्पेक्ट्रम त्रिज्या और अभिसरण

वर्णक्रमीय त्रिज्या को सबसे बड़े परिमाण eigenvalue के निरपेक्ष मान के रूप में परिभाषित किया गया है। एक विधि अभिसरण होगी यदिρ<1और एक छोटे वर्णक्रमीय त्रिज्या का अर्थ है तेजी से अभिसरण। SOR वेटिंग पैरामीटर की पसंद के आधार पर पुनरावृत्ति मैट्रिक्स को प्राप्त करने के लिए उपयोग किए गए मैट्रिक्स विभाजन को बदलकर काम करता हैω, उम्मीद है कि परिणामी मैट्रिक्स के वर्णक्रमीय त्रिज्या को कम करना।

मैट्रिक्स विभाजन

नीचे चर्चा के लिए, मैं मानूंगा कि हल की जाने वाली प्रणाली द्वारा दी गई है

Ax=b,

फार्म की एक पुनरावृत्ति के साथ

x(k+1)=v+Gx(k),

कहाँ पे v एक सदिश, और पुनरावृति संख्या है k निरूपित किया जाता है x(k)

SOR पुराने पुनरावृत्ति और गॉस-सेडेल पुनरावृत्ति का भारित औसत लेता है। गॉस-सेडेल विधि फार्म के एक मैट्रिक्स विभाजन पर निर्भर करती है

A=D+L+U

कहाँ पे D का विकर्ण है A, L एक कम त्रिकोणीय मैट्रिक्स है जिसमें सभी तत्व होते हैं A विकर्ण के नीचे सख्ती से और R एक ऊपरी त्रिकोणीय मैट्रिक्स है जिसमें सभी तत्व होते हैं Aविकर्ण के ऊपर सख्ती से। गॉस-सीडल पुनरावृति तब द्वारा दी गई है

x(k+1)=(D+L)1b+GGSx(k)

और पुनरावृति मैट्रिक्स है

GGS=(D+L)1U.

SOR को तब लिखा जा सकता है

x(k+1)=ω(D+ωL)1b+GSORx(k)

कहाँ पे

जीएसहेआर=(डी+ωएल)-1((1-ω)डी-ωयू)

पुनरावृति योजना के अभिसरण दर का निर्धारण वास्तव में इन पुनरावृत्तियों के वर्णक्रमीय त्रिज्या का निर्धारण करने के लिए होता है। सामान्य तौर पर, यह एक कठिन समस्या है जब तक कि आप मैट्रिक्स की संरचना के बारे में कुछ विशिष्ट नहीं जानते हैं। बहुत कम उदाहरण हैं कि मुझे पता है कि इष्टतम भारांक गुणांक कहां है। प्रयोग में,ωचल एल्गोरिथ्म के प्रेक्षित (प्रकल्पित) अभिसरण के आधार पर मक्खी पर निर्धारित किया जाना चाहिए। यह कुछ मामलों में काम करता है, लेकिन दूसरों में विफल रहता है।

इष्टतम एसओआर

एक वास्तविक उदाहरण जहां इष्टतम भारांक गुणांक ज्ञात है, एक पॉइसन समीकरण को हल करने के संदर्भ में उत्पन्न होता है:

2यू= मैंn Ωयू=जी n Ω

2 डी में एक वर्ग डोमेन पर इस प्रणाली को अलग करना, समान ग्रिड अंतर के साथ दूसरे क्रम परिमित अंतर का उपयोग करते हुए विकर्ण में 4 के साथ एक सममित बैंडिंग मैट्रिक्स में, -1 विकर्ण के ठीक ऊपर और नीचे, और -1 के दो और बैंड -1 से कुछ दूरी पर विकर्ण। सीमा की स्थितियों के कारण कुछ अंतर हैं, लेकिन यह मूल संरचना है। इस मैट्रिक्स को देखते हुए, SOR गुणांक के लिए सबसे उपयुक्त विकल्प दिया गया है

ω=21+पाप(πΔएक्स/एल)

कहाँ पे Δएक्स ग्रिड रिक्ति है और एलडोमेन का आकार है। एक ज्ञात समाधान के साथ एक साधारण मामले के लिए ऐसा करना इन दो तरीकों के लिए निम्न त्रुटि बनाम पुनरावृत्ति संख्या देता है:

गॉस-सीडेल और एसओआर त्रुटि

जैसा कि आप देख सकते हैं, एसओआर लगभग 100 पुनरावृत्तियों में मशीन परिशुद्धता तक पहुंचता है जिस बिंदु पर गॉस-सीडेल परिमाण के लगभग 25 ऑर्डर बदतर हैं। यदि आप इस उदाहरण के साथ खेलना चाहते हैं, तो मैंने नीचे दिए गए MATLAB कोड को शामिल किया है।

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')

क्या आप किसी भी अच्छी / जानी-मानी तकनीक के बारे में जानते हैं जिसका उपयोग मक्खी पर SOR पैरामीटर की गणना करने के लिए किया जाता है? मैंने पहले सुना है कि ये तकनीक वर्णक्रमीय त्रिज्या के अनुमानों का उपयोग करती हैं - क्या आप बता सकते हैं कि वे वर्णक्रमीय त्रिज्या का उपयोग कैसे करते हैं, या एक अच्छा संदर्भ प्रदान करते हैं?
nukeguy

ओह, मैं देख रहा हूं कि यह लिंक किए गए प्रश्न scicomp.stackexchange.com/questions/851/… में संबोधित किया गया है । कभी भी मेरे प्रश्नों का ध्यान न रखें, लेकिन यदि आपके पास जोड़ने के लिए अधिक है, तो कृपया ऐसा करने के लिए स्वतंत्र महसूस करें।
nukeguy

@ डग लिपिंस्की मुझे लगा कि एफ को dx * डाई से गुणा किया जाना चाहिए। असतत दूसरे व्युत्पन्न से आने वाला यह कारक ( उदाहरण के लिए यहां देखें )। Btw, जब मैं यह करता हूँ कि एल्गोरिथ्म ठीक से काम नहीं करता है। तुम जानते हो क्यों?
शामालिया

0

चीजों का यह पक्ष वास्तव में मेरी विशेषता नहीं है, लेकिन मुझे नहीं लगता कि यह कई यथार्थवादी अनुप्रयोगों के लिए एक सुपर-फेयर टेस्ट है।

मुझे यकीन नहीं है कि आप सी और आर के लिए कौन से मूल्यों का उपयोग कर रहे थे , लेकिन मुझे संदेह है कि आप अत्यंत बीमार मैट्रीस के साथ काम कर रहे थे। (नीचे कुछ पायथन कोड दर्शाया गया है कि ये सबसे उलट मैट्रेस नहीं हो सकते हैं।)

>>> import numpy
>>> for n in [100, 1000]:
...     for c in [.1, 1, 10]:
...         for r in [.1, 1, 10]:
...             print numpy.linalg.cond(
...                 numpy.eye(n) + 
...                 c * numpy.ones((n, n)) + 
...                 r * numpy.random.random((n, n))
...             )
... 
25.491634739
2034.47889101
2016.33059429
168.220149133
27340.0090644
5532.81258852
1617.33518781
42490.4410689
5326.3865534
6212.01580004
91910.8386417
50543.9269739
24737.6648458
271579.469212
208913.592289
275153.967337
17021788.5576
117365.924601

यदि आपको वास्तव में इस अ-वातानुकूलित मैट्रेस की आवश्यकता है, तो आप एक) एक विशेष पद्धति का उपयोग करेंगे, और b) शायद बस एक नया क्षेत्र ढूंढना चाहिए in

किसी भी आकार के अच्छी तरह से वातानुकूलित मैट्रो के लिए, SOR के तेज होने की संभावना है। वास्तविक समस्याओं के लिए जहां गति मायने रखती है, SOR का उपयोग करना दुर्लभ होगा - परिष्कृत पक्ष पर, इन दिनों बहुत बेहतर है; धीमी लेकिन विश्वसनीय पक्ष पर, SOR सबसे अच्छा नहीं है जो आप कर सकते हैं।


नमस्ते, मैं यह नहीं कहता कि मेरा "परीक्षण" उचित है। मैं यह भी नहीं कहूंगा कि यह एक परीक्षण है, यह मेरा भोलापन है कि कुछ विचार प्राप्त करने के लिए कि एसओआर और गॉस-सीडेल प्रयोगात्मक कैसे व्यवहार करते हैं। मान लें कि मैं इस क्षेत्र में एक पूर्ण दोपहर हूँ। मेरे पैरामीटर सीमा में थे0.01<|सी|<0.1 तथा आर<2|सी|। यह सुनिश्चित करने के लिए कि मैट्रिक्स दृढ़ता से तिरछे डोमिनेंट है (मैंने आयाम के छोटे मैट्रिसेस ~ 10 का इस्तेमाल किया)
प्रोक हापला

मैं दृढ़ता से प्रमुखता से कहने जा रहा था।
मेवोप्लप

0

ठीक है, इसलिए इस राजा की सहानुभूति के लिए:

1 t 0 0 0 0 t t 0 0 
t 1 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 t 0 t 
0 0 0 1 0 0 0 0 0 t 
0 0 0 0 1 t 0 0 0 0 
0 0 0 0 t 1 0 t 0 0 
t 0 0 0 0 0 1 0 0 0 
t 0 t 0 0 t 0 1 0 0 
0 0 0 0 0 0 0 0 1 t 
0 0 t t 0 0 0 0 t 1 

SOR गॉस-सीडेल की तुलना में तेजी से अभिसरण करता है यदि संख्या टीप्रत्येक पंक्ति में s छोटा है (A के आयाम से बहुत छोटा है) और यदि सभी टीs समान हैं। मैं उपयोग कर रहा थाटीइस तरह से उत्पन्न:

टीमैं=सी+आरn(-आर,आर)

अगर टीs बहुत भिन्न होता है और 0 पर केंद्रित होता है ( सी=0,आर=0.1) गॉस-सीडेल की तुलना में तेज है। यदि प्रत्येक पंक्ति आधे से अधिक भरी हुई है, तो गॉस-सीडेल भी तेज हैटीरों। इसका मतलब यह भी है कि SOR बहुत बड़े और बहुत विरल मैट्रिस के लिए बेहतर है।

(यह सिर्फ भावपूर्ण अवलोकन है, कठोर कुछ भी नहीं)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.