Gram Schmidt with R

后端 未结 4 1772
青春惊慌失措
青春惊慌失措 2020-12-31 21:30

Here is a MATLAB code for performing Gram Schmidt in page 1 http://web.mit.edu/18.06/www/Essays/gramschmidtmat.pdf

I am trying for hours and hours to perform this wi

4条回答
  •  星月不相逢
    2020-12-31 22:05

    You could simply use Hans W. Borchers' pracma package, which provides many Octave/Matlab functions translated in R.

    > library(pracma)
    > gramSchmidt
    function (A, tol = .Machine$double.eps^0.5) 
    {
        stopifnot(is.numeric(A), is.matrix(A))
        m <- nrow(A)
        n <- ncol(A)
        if (m < n) 
            stop("No. of rows of 'A' must be greater or equal no. of colums.")
        Q <- matrix(0, m, n)
        R <- matrix(0, n, n)
        for (k in 1:n) {
            Q[, k] <- A[, k]
            if (k > 1) {
                for (i in 1:(k - 1)) {
                    R[i, k] <- t(Q[, i]) %*% Q[, k]
                    Q[, k] <- Q[, k] - R[i, k] * Q[, i]
                }
            }
            R[k, k] <- Norm(Q[, k])
            if (abs(R[k, k]) <= tol) 
                stop("Matrix 'A' does not have full rank.")
            Q[, k] <- Q[, k]/R[k, k]
        }
        return(list(Q = Q, R = R))
    }
    
    

提交回复
热议问题