Kernel: SageMath 8.2
Q-R Factorization
In [43]:
import numpy as np A = np.array([[1,1],[2,1],[1,2],[0,3]]) b = [[3],[5],[5],[5]] show("A is: ", A) Q,R = np.linalg.qr(A) show("Q is: ", Q) show("R is: ", R) right_hand_side = np.dot(Q.T,b) x = var('x') show(R,x, ' = ', right_hand_side) show (x,' = ',np.linalg.lstsq(R,right_hand_side)[0]) show ('2-norm',' = ',np.linalg.lstsq(R,right_hand_side)[1]) show ('rank',' = ',np.linalg.lstsq(R,right_hand_side)[2])
Axis:[[1x1]x[2x1]x[1x2]x[0x3]]
Qxis:[[-0.40824829xx0.05063697]x[-0.81649658x-0.20254787]x[-0.40824829xx0.35445878]x[-0.xxxxxxxxxx0.91146543]]
Rxis:[[-2.44948974x-2.04124145]x[x0.xxxxxxxxxx3.29140294]]
[[-2.44948974x-2.04124145]x[x0.xxxxxxxxxx3.29140294]]xx=[[-7.34846923]x[x5.46879258]]
xx=[[x1.61538462]x[x1.66153846]]
2-normx=[]
rankx=2
In [44]:
# import numpy as np A = np.array([[1,2,2],[2,-1,2],[3,1,1],[1,1,-1]]) b = [[10],[5],[10],[3]] show("A is: ", A) Q,R = np.linalg.qr(A) show("Q is: ", Q) show("R is: ", R) right_hand_side = np.dot(Q.T,b) x = var('x') show(R,x, ' = ', right_hand_side) show (x,' = ',np.linalg.lstsq(R,right_hand_side)[0]) show ('2-norm',' = ',np.linalg.lstsq(R,right_hand_side)[1]) show ('rank',' = ',np.linalg.lstsq(R,right_hand_side)[2]) #returns x, 2-norm for each column, rank
Axis:[[x1xx2xx2]x[x2x-1xx2]x[x3xx1xx1]x[x1xx1x-1]]
Qxis:[[-0.25819889xx0.71159472xx0.62896243]x[-0.51639778x-0.62948763xx0.37549996]x[-0.77459667xx0.08210708x-0.24876872]x[-0.25819889xx0.3010593xx-0.63365618]]
Rxis:[[-3.87298335x-1.03279556x-2.06559112]x[x0.xxxxxxxxxx2.43584345x-0.05473806]x[x0.xxxxxxxxxx0.xxxxxxxxxx2.39381225]]
[[-3.87298335x-1.03279556x-2.06559112]x[x0.xxxxxxxxxx2.43584345x-0.05473806]x[x0.xxxxxxxxxx0.xxxxxxxxxx2.39381225]]xx=[[-13.68454116]x[xx5.69275774]x[xx3.77846835]]
xx=[[x2.05882353]x[x2.37254902]x[x1.57843137]]
2-normx=[]
rankx=3
In [0]: