Table of Contents

1 Lanczos Rayleigh-Ritz convergence

from DDMPY import *
import os
import sys

mat    = ["A0", "A1", "A2", "A3", "A4"]
theta  = [1e2, 1e4, 1e6]
n      = 500
nk     = 1 
if(len(sys.argv) == 1):n = 500
if(len(sys.argv) == 2):n = int(sys.argv[1])
if(len(sys.argv) == 3):
    n  = int(sys.argv[1])
    nk = int(sys.argv[2])
rep    = "n_"+ str(n) + "_k_" + str(nk) + "_" + "EXP2_1"
for Imat in mat:
    wtheta = theta
    for Itheta in wtheta:
        if Itheta == 1e2: Stheta="1E2"
        if Itheta == 1e4: Stheta="1E4"
        if Itheta == 1e6: Stheta="1E6"
        A,DA,QTA = setmatrix4exp(which=Imat, n=n, k=nk, theta=Itheta)
        xexa = np.random.rand(A.shape[0],1)
        x0 = np.random.rand(A.shape[0],1)
        b    = A @ xexa 
        r0   = b - A @ x0
        T, V, filen = lanczos_RR(A, DA, QTA, nk=nk, Aname=Imat, Stheta=Stheta, L=None, b=r0, maxiter=A.shape[1], reortho=True)
        d = 0.0*T[...,0:1]
        d[0, 0] = la.norm(r0)
        y = la.solve(T, d)
        x = x0 + V @ y
        print("|---->",Imat, Itheta, nk)
        print("||x-xexa||_{A}=",np.sqrt( (x-xexa).T@A@(x-xexa) ) )
        print("||b-A@x||_{2}/||b||_{2}",la.norm(b-A@x)/la.norm(b) )
cmd = "R -q --vanilla < REXP2_1.R" + " --args " + filen
os.system(cmd)

Author: gitlab-runner daemon user

Created: 2021-01-07 Thu 10:43

Validate