主要内容

pcg

선형연립방정식풀기-선조건적용켤레기울기법

설명

예제

x= pcg (一个b선조건적용켤레기울기법(预条件共轭梯度法)방법을사용하여x에대한선형연립방정식A*x = b를풉니다。시도가성공한경우pcg는수렴을확하는메시지를시합니다。최대반복횟수이후에도pcg가수렴하지않거나어떠한이유로든중단될경우상대잔차规范(b * x) /规范(b)와,이계산이중지된반복횟수가포함된진단메시지가@시됩니다。

예제

x= pcg (一个b托尔은계산의허용오차를지정합니다。디폴트허용오차는1 e-6입니다。

예제

x= pcg (一个b托尔麦克斯特은적용할최대반복횟수를지정합니다。麦克斯特회의반복내에서수렴하지않으면pcg는진단메시지를@ @시합니다。

예제

x= pcg (一个b托尔麦克斯特은선조건자행렬을지정하고y에대한시스템 H 1 一个 H T y H 1 b 를 풀어x를계산합니다。여기서 y H T x 이고 H 1 / 2 1 2 1 / 2 입니다。알고리즘은h를명시적으로구성하지않습니다。선조건자행렬을사용하면문제의수치적속성과계산효율성을개선할수있습니다。

예제

x= pcg (一个b托尔麦克斯特M1平方米M = m1 * m2가되도록선조건자행렬의수를지정합니다。

예제

x= pcg (一个b托尔麦克斯特M1平方米x0은 해 벡터x에대한초기추측값을지정합니다。디폴트값은0으로구성된벡터입니다。

예제

x国旗= pcg(___는알고리즘이성공적으로수렴하는지여부를지정하는플래그를반환합니다。Flag = 0이면수렴이성공한것입니다。이출력구문은위에열거된구문에나와있는입력인수를원하는대로조합하여사용할수있습니다。国旗출력값을지정할경우pcg는진단메시지를@ @시하지않습니다。

예제

x国旗relres= pcg(___는상대잔차规范(b * x) /规范(b)도반환합니다。国旗0이면Relres <= tol입니다。

예제

x国旗relresiter= pcg(___x가계산된반복횟수iter도반환합니다。

예제

x国旗relresiterresvec= pcg(___는첫번째잔차规范(b * x0)을포함하여각반복에서잔차노름으로구성된벡터도반환합니다。

예제

모두 축소

디폴트설정으로pcg를사용하여정사각선형시스템을풀고풀이과정에사용된허용오차및반복횟수를조정합니다。

희소형식의대칭확률행렬一个를만듭니다。또한 斧头 b 우변의一个행합으로구성된벡터b를만들어참(正确)해 x 가1로구성된벡터가되도록합니다。

rng默认的A = sprand(400,400,.5);A = A'*A;b = sum(A,2);

pcg를사용하여 斧头 b 를풉니다。출력@ @시에는상대잔차오차 b - 斧头 b 의값이포함됩니다。

x = pcg(A,b);
PCG在迭代20处停止,没有收敛到期望的公差1e-06,因为达到了最大迭代次数。返回的迭代(数字20)有相对残差3.6e-06。

기본적으로pcg는20회반복과1 e-6의허용오차를사용하는데이알고리즘으로는이행렬에대해20회의반복내에수렴할수없습니다。그러나잔차가허용오차에가깝기때문에알고리즘이수렴하려면반복횟수만더추가하면될것같습니다。

1 e -의허용오차와150회의반복으로시스템을다시풉니다。

x = pcg(A,b,1e, 7150);
PCG在迭代129收敛到相对残差为9.9e-08的解。

pcg에선조건자행렬을사용하여선형시스템을푸는효과를검토합니다。

양의정부호대칭행렬,대역계수행렬을만듭니다。

A = delsq(numgrid(“年代”, 102));

선형방정식 斧头 b 의 우변에b를정의합니다。

b = ones(size(A,1),1);

허용오차와최대반복횟수를설정합니다。

Tol = 1e-8;Maxit = 100;

pcg를사용하여청된허용오차와반복횟수로해를구합니다。풀이과정에대한정보를반환하는5개의출력값을지정합니다。

  • xA*x = b의계산된해입니다。

  • fl0은알고리즘의수렴여부를나타내는플래그입니다。

  • rr0은계산된답x의상대잔차입니다。

  • it0x가계산된반복횟수입니다。

  • rv0 b - 斧头 의잔차내역으로구성된벡터입니다。

[x,fl0,rr0,it0,rv0] = pcg(A,b,tol,maxit);fl0
Fl0 = 1
rr0
Rr0 = 0.0131
it0
It0 = 100

pcg가청된100회반복횟수이내에청된허용오차1 e-8로수렴하지않으므로fl01이됩니다。

이러한느린수렴을개선할수있도록선조건자행렬을지정할수있습니다。一个는대칭행렬이므로ichol을사용하여선조건자 l l T 를생성합니다。lL 'pcg에대한입력값으로지정하여선조건이적용된시스템을풉니다。

L = ichol(A);[x1,fl1,rr1,it1,rv1] = pcg(A,b,tol,maxit,L,L');fl1
Fl1 = 0
rr1
Rr1 = 8.0992e-09
it1
It1 = 79

ichol선조건자를사용한결과79번째반복에서미리정해진허용오차1 e-8보다작은상대잔차가생성됩니다。출력값rv1 (1)规范(b)이고rv1(结束)规范(b * x1)입니다。

이제michol옵션을사용하여수정된불완전촐레스키선조건자를만듭니다。

L = ichol(A,struct(“michol”“上”));[x2,fl2,rr2,it2,rv2] = pcg(A,b,tol,maxit,L,L');fl2
Fl2 = 0
rr2
Rr2 = 9.9614e-09
it2
It2 = 47

이선조건자는이예제에서0채우기로불완전촐레스키분해를계수행렬에적용하여생성된것보다낫기때문에pcg가더빠르게수렴할수있습니다。

초기추정값(반복번호0)에서시작하여각잔차내역을플로팅해선조건자가pcg의수렴속도에미치는향을파악할수있습니다。지정된허용오차에대한선을추가합니다。

semilogy(0:长度(rv0) 1, rv0 /规范(b),“o”)举行semilogy(0:长度(rv1) 1, rv1 /规范(b),“o”) semilogy(0:长度(rv2) 1, rv2 /规范(b),“o”) yline(托尔,“r——”);传奇(“没有预调节器”“默认ICHOL”“修改ICHOL”“宽容”“位置”“东”)包含(的迭代次数) ylabel (的相对剩余的

图中包含一个轴对象。axis对象包含4个类型为line、constantline的对象。这些对象代表无前置条件、默认ICHOL、修改ICHOL、公差。

pcg에해의초기추측값을제공하는효과를검토합니다。

삼중대각희소행렬을만듭니다。 x 의예상해가1로구성된벡터가되도록각행의합을 斧头 b 의우변에대한벡터로사용합니다。

N = 900;E = ones(n,1);A = spdigs ([e 2*e],-1:1,n,n);b = sum(A,2);

pcg를사용하여 斧头 b 를두번풉니다。한번은디폴트초기추측값을사용하여풀고,다른한번은해에대한양호한초기추측값을사용하여풉니다。두해모두에200회의반복과디폴트허용오차를사용합니다。모든소가0.99로이루어진벡터로두번째해의초기추측값을지정합니다。

Maxit = 200;x1 = pcg(A,b,[],maxit);
PCG在迭代35时收敛到相对残差为9.5e-07的解。
X0 = 0.99*e;x2 = pcg(A,b,[],maxit,[],[],x0);
PCG在迭代7收敛到相对残差为8.7e-07的解。

이예제에서는초기추측값을제공한결과pcg가더빨리수렴되었습니다。

중간결과반환하기

루프에서pcg를호출하여중간결과를얻는데도초기추측값을사용할수있습니다。솔버에대한각호출은몇회의반복을수행한후계산된해를저장합니다。그런다음저장된해를다음반복배치의초기벡터로사용합니다。

예를들어,다음코드는100회의반복을4번수행하며,为루프를통과한후매번해벡터를저장합니다。

x0 = 0 (size(A,2),1);Tol = 1e-8;Maxit = 100;k = 1:4 [x,国旗,relres] = pcg (A, b,托尔,麦克斯特[],[],x0);X(:,k) = X;R(k) = relres;X0 = x;结束

X (:, k)는换루프의반복k회에서계산된해벡터이고,R (k)는이해의상대잔차입니다。

pcg에계수행렬一个대신* x를계산하는함수핸들을제공하여선형시스템을풉니다。

画廊를사용하여20×20양의정부호삼중대각행렬을생성합니다。상부대각선과하부대각선은1을가지며주대각선소는20에서1로카운트다운됩니다。행렬을미리봅니다。

N = 20;画廊(“tridiag”的(n - 1, 1), n: 1:1,的(n - 1, - 1));完整的(一个)
ans =20×2020 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 19 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 11 1 0 0 0 0 0 0 0 0 0⋮

이삼중대각행렬은특수한구조를갖고있으므로연산* x를함수핸들로나타낼수있습니다。一个에벡터를곱할때결과벡터의대부분의소는0입니다。결과에있는0이아닌소는一个의0이아닌삼중대각소에해당합니다。또한주대각선에만0과1이아닌소가있습니다。

通讯录현식 斧头 는다음과같이@ @현됩니다。

20. 1 0 0 0 1 19 1 0 0 0 1 18 1 0 0 1 17 1 0 0 1 16 1 0 0 1 15 1 0 0 1 14 1 0 0 1 13 0 0 0 1 0 0 0 1 1 x 1 x 2 x 3. x 4 x 5 x 20. 2 0 x 1 + x 2 x 1 + 19 x 2 + x 3. x 2 + 18 x 3. + x 4 x 18 + 2 x 19 + x 20. x 19 + x 20.

결과벡터는다음과같이세벡터의합으로작성할수있습니다。

2 0 x 1 + x 2 x 1 + 19 x 2 + x 3. x 2 + 18 x 3. + x 4 x 18 + 2 x 19 + x 20. x 19 + x 20. 0 x 1 x 19 + 20. x 1 19 x 2 x 20. + x 2 x 20. 0

Matlab®에서이러한벡터를만들어서더하여* x의값을제공하는함수를작성합니다。

函数Y = [0];x (19)) +...[(20: 1:1)]。* x +...[x(20分);0);结束

(이함수는예제끝에로컬함수로저장되어있습니다)

이제* x를계산하는함수핸들을pcg에제공하여선형시스템 斧头 b 를풉니다。허용오차1 e-12및50회반복을사용합니다。

B = ones(20,1);Tol = 1e-12;Maxit = 50;X1 = pcg(@afun,b,tol,maxit)
PCG在迭代20时收敛到相对残差为4.4e-16的解。
x1 =20×10.0476 0.0475 0.0500 0.0526 0.0555 0.0588 0.0625 0.0666 0.0714 0.0769

afun (x1)이1로구성된벡터를생성하는지확합니다。

afun (x1)
ans =20×11.0000 - 1.0000 - 1.0000 - 1.0000 - 1.0000 - 1.0000 - 1.0000 - 1.0000

로컬함수(本地功能)

函数Y = [0];x (19)) +...[(20: 1:1)]。* x +...[x(20分);0);结束

입력marketing수

모두 축소

계수행렬로,양의정부호대칭행렬또는함수핸들로지정됩니다。이행렬은선형시스템A*x = b의계수행렬입니다。일반적으로一个는큰희소행렬이거나큰희소행렬과열벡터의곱을반환하는함수핸들입니다。一个가양의정부호대칭행렬지확하는방법은행렬이양의정부호대칭행렬지확하기항목을참조하십시오。

一个를함수핸들로지정

선택적으로계수행렬을행렬이아닌함수핸들로지정할수도있습니다。함수핸들은전체계수행렬을구성하는대신행렬——벡터곱을반환하여계산을보다효율적으로만듭니다。

함수핸들을사용하려면함수시그니처函数y = fun(x)를사용하십시오。함수를파라미터화하기에서는필한경우함수afun에추가파라미터를제공하는방법을설명합니다。함수 호출afun (x)* x의값을반환해야합니다。

데이터형:|function_handle
복소수지원여부:

선형방정식의우변으로,열벡터로지정됩니다。b의 길이는大小(1)이어야합니다。

데이터형:
복소수지원여부:

방법에대한허용오차로,양의스칼라로지정됩니다。이입력값을사용하여계산에서정확도와런타임간의상호절충관계를조정할수있습니다。pcg함수가성공하려면허용된반복횟수내에서허용오차를충족해야합니다。托尔값이작을수록계산을완료하려면답이더정밀해야합니다。

데이터형:

최대반복횟수로,양의정수스칼라로지정됩니다。pcg함수가더많은반복을거쳐허용오차托尔을충족할수있도록하려면麦克斯特의값을늘리십시오。일반적으로托尔의값이작을수록계산이성공하려면더많은반복이필합니다。

선조건자행렬로,행렬또는함수핸들의개별marketing수로지정됩니다。선조건자행렬또는그행렬계수M = m1 * m2를지정하여선형시스템의수치적특성을개선하고pcg함수가빠르게수렴하도록할수있습니다。불완전행렬분해함수iluichol을사용하여선조건자행렬을생성할수있습니다。분해 전에平衡를사용하여계수행렬의조건수를개선할수도있습니다。선조건자에대한자세한내용은선형시스템을위한반복법항목을참조하십시오。

pcg함수는지정되지않은선조건자를단위행렬로처리합니다。

을함수핸들로지정

선택적으로M1또는平方米를행렬이아닌함수핸들로지정할수도있습니다。함수핸들은전체선조건자행렬을구성하는대신함수——벡터연산을수행하여계산을보다효율적으로만듭니다。

함수핸들을사용하려면함수시그니처函数y = mfun(x)를사용하십시오。함수를파라미터화하기에서는필한경우함수mfun에추가파라미터를제공하는방법을설명합니다。함수 호출mfun (x)M \ x또는M1、M2 \ (x)의값을반환해야합니다。

데이터형:|function_handle
복소수지원여부:

초기추측값으로,길이가大小(2)열벡터로지정됩니다。pcg에디폴트값0으로구성된벡터보다더합리적초기추측값x0을제공할수있는경우이초기추측값은계산시간을절약하고알고리즘이더빨리수렴하도록할수있습니다。

데이터형:
복소수지원여부:

출력marketing수

모두 축소

선형시스템해로,열벡터로반환됩니다。이출력값은선형시스템A*x = b에대한근사해를제공합니다。계산이성공한경우(Flag = 0),relres托尔보다작거나같습니다。

계산이성공하지않으면(标志~= 0),pcg함수가반환하는해x는모든반복에대해최소잔차노름이계산된해입니다。

수렴플래그로,다음@에있는스칼라값중하나로반환됩니다。수렴플래그는계산의성공여부를나타내며여러가지형태의실패를구분합니다。

플래그 값

수렴

0

성공-pcg함수가麦克斯特반복횟수내에,기대한허용오차托尔로수렴되었습니다。

1

실패-pcg함수가麦克斯特회만큼반복되었지만수렴되지않았습니다。

2

실패-선조건자행렬또는M = m1 * m2의조건이나쁩니다。

3.

실패-연속된2회의반복이동일한결과를반환한후pcg함수가정체되었습니다。

4

실패-pcg알고리즘으로계산된스칼라수량중하나가너무작아지거나커져계산을계속할수없습니다。

상대잔차오차로,스칼라로반환됩니다。상대잔차오차relres =范数(b- a *x)/范数(b)는답의정확도를나타냅니다。계산이麦克斯特회의반복내에서허용오차托尔로수렴하면Relres <= tol입니다。

데이터형:

반복횟수로,스칼라로반환됩니다。이출력값은x의답이계산된반복횟수를나타냅니다。

데이터형:

잔차오차로,벡터로반환됩니다。잔차 오차规范(b * x)는알고리즘이주어진x값에얼마나가깝게수렴하는지를나타냅니다。resvec내소개수는반복횟수와동일합니다。resvec의내용을검사하여托尔또는麦克斯特의값을변경할지여부를결정할수있습니다。

데이터형:

세부 정보

모두 축소

선조건적용켤레기울기법(预条件共轭梯度法)

선조건적용켤레기울기법(PCG)은양의정부호대칭행렬의구조를이용하기위해개발되었습니다。양의정부호대칭행렬에서작동하는알고리즘은그밖에도여러가지가있지만PCG는이러한유형의시스템을해결하는데있어가장빠르고안정적입니다[1]

  • 대부분의반복법의수렴여부는계수행렬의조건수气孔导度(A)에따라결정됩니다。一个가정사각행렬경우平衡를사용하여이행렬의조건수를개선할수있으며,이로인해대부분의반복솔버의수렴이보다쉬워집니다。平衡를사용하면이후均衡가적용된행렬B = r * p * a * c를분해할때더나은품질의선조건자행렬을만들수도있습니다。

  • 계수행렬을수분해할때解剖symrcm과같은행렬재정렬함수를사용하여계수행렬의행과열을치환하고0이아닌요소의개수를최소화하여선조건자를생성할수있습니다。이렇게하면이후선조건이적용된선형시스템을푸는데필요한메모리와시간을절약할수있습니다。

참고 문헌

巴雷特,R., M. Berry, T. F. Chan等,线性系统解的模板:迭代方法的构建块,SIAM,费城,1994。

확장 기능

버전 내역

R2006a이전에개발됨

Baidu
map