> restart; > with(LinearAlgebra): printlevel:=0; > qr_zerlegung:=proc(A) > local n,j,nor,k,i,summe; global v,c; > # option trace; n:=RowDimension(A); v:=Vector(n); c:=Vector(n); for j from 1 to n-1 do nor:=0; for k from j to n do nor := nor + A[k,j]*A[k,j]; end do; nor:=sqrt(nor); if nor=0 then v[j]:=0; else c[j]:=1.0/(nor*nor + nor*abs(A[j,j])); if A[j,j] <0 then nor:=-nor end if; v[j]:=A[j,j]+nor; A[j,j]:=-nor; for k from j+1 to n do summe:=v[j]*A[j,k]; for i from j+1 to n do summe:=summe + A[i,j]*A[i,k]; end do; summe:= summe*c[j]; A[j,k]:=A[j,k]-v[j]*summe; for i from j+1 to n do A[i,k]:= A[i,k]-A[i,j]*summe; end do; end do; end if; end do; print(A,v,c); end proc: > > > A:=Matrix([[3.,-9.,7.], [-4.,-13.,-1.],[0.,-20.,-35.]]); > qr_zerlegung(A); >