📄 test_sor.m
字号:
function test_it = test_sor()%% function[test_it] = test_sor()%% test_sor.m tests sor.m. It generates several test systems and % applies the QMR solution algorithm as implemented in sor.m.%% This and the other algorithm specific testers are modifications% of tester.m, so some unnecessary or extraneous code is included.%% Created August, 2006 by Richard Barrett, rbarrett@ornl.gov.% ============================================================================ % --------------- % Initialization. % --------------- no_soln_sor = 0; guess_err_sor = 0; num_failures = 0; num_tests = 6; ep = eps; tol = ep * 1000; % ----------------------------------------------------------------- % Iterate over linear systems, applying solution algorithm to each. % ----------------------------------------------------------------- for test = 1:num_tests test A = matgen( test*10 ); % form test matrix [sizeA,sizeA] = size(A); max_it = sizeA * 10; normA = norm( A,inf ); if ( test == 1 | test == 2 | test == 3 | test == 6 ), for i = 1:sizeA, % set rhs = row sums temp = 0.0; for j = 1:sizeA, temp = temp + A(i,j); end b(i,1) = temp; end else b = ones(sizeA,1); % set rhs = unit vector end if ( test < 4 ), M = eye(sizeA); % no preconditioning else M = diag(diag(A)); % diagonal preconditioning end if ( test < 6 ), xk = zeros(sizeA,1); % initial guess = zero vector else xk = A \ b; % initial guess = solution end % ---------------- % Apply algorithm. % ---------------- if ( test == 1 | test == 2 | test == 4 | test == 6 ), if ( test == 1 ), % various relaxation parameters w = 1.0; elseif ( test == 2 ), w = 1.2; else w = 1.1; end sor_maxit = max_it * 3; [x, error, iter, flag_sor] = sor(A, xk, b, w, sor_maxit, tol); if ( flag_sor ~= 0 & test ~= 6 ), no_soln_sor = no_soln_sor + 1; 'sor failed to converge for' test, error num_failures = num_failures + 1; end if ( test == 6 & iter ~= 0 & flag_sor ~= 0 ), guess_err_sor = guess_err_sor + 1; 'sor.m failed for initial guess = solution' test, iter, flag_sor num_failures = num_failures + 1; end end end % ----------------------- % Print results to stdio. % ----------------------- TESTING = ' COMPLETE' if ( num_failures == 0 ), RESULTS = ' ALL TESTS PASSED', end if ( no_soln_sor ~= 0 ), 'sor failed test (failed to converge)', elseif ( guess_err_sor ~= 0 ), 'sor failed test (initial guess = solution error)', else 'sor passed test'; end% --------------% End test_sor.m% --------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -