R代码

时间:2015-12-29 04:09:21

标签: r function arguments least-squares

:)我之前写了一个R函数,它将计算任意顺序的最小二乘多项式,以适应我放入其中的任何数据。 “LeastSquaresDegreeN.R”代码有效,因为我可以重现我之前获得的结果。但是,当我尝试将新数据放入其中时,我收到“不一致的参数”错误。

"Error in Conj(t(Q))%*%t(b) : non-conformable arguments"

一个非常简单的数据示例:

t <- seq(1,100,1)
fifthDegree <- t^5
LeastSquaresDegreeN(t,fifthDegree,5)

输出并绘制多项式f(t)= t ^ 5(最多为舍入误差)。 但是,即使我明确地制作了这些向量,我也会收到“不一致的参数”错误:

t <- as.vector(t)
fifthDegree <- as.vector(fifthDegree)
LeastSquaresDegreeN(t,fifthDegree,5)

我也尝试过对这些载体进行转置 - 但没有任何作用。

当然,解决方案非常简单。救命!?谢谢!

这是功能:

LeastSquaresDegreeN <- function(t, b, deg)
{
# Usage:  t is independent variable vector, b is function data
# i.e., b = f(t) 
# deg is desired polynomial order
# deg <- deg + 1 is a little adjustment to make the R loops index correctly. 
deg <- deg + 1
t <- t(t)
dataSize <- length(b)
A <- mat.or.vec(dataSize, deg)  # Built-in R function to create zero 
# matrix or zero vector of arbitrary size
# Given basis phi(z) = 1 + z + z^2 + z^3 + ... 
# Define matrix A
for (i in 0:deg-1) {
    A[1:dataSize,i+1] = t^i
}
# Compute QR decomposition of A.  Pull Q and R out of QRdecomp
QRdecomp <- qr(A)
Q <- qr.Q(QRdecomp, complete=TRUE)
R <- qr.R(QRdecomp, complete=TRUE)
# Perform Q^* b^T  (Conjugate transpose of Q)
c <- Conj(t(Q))%*%t(b)
# Find x.  R isn't square - so we have to use qr.solve
x <- qr.solve(R, c) 
# Create xPlot (which is general enough to plot any degree 
# polynomial output)
xPlot = x[1,1]
for (i in 1:deg-1){
    xPlot = xPlot + x[i+1,1]*t^i
}
# Now plot it.  Least squares "l" plot first, then the points in red.
plot(t, xPlot, type='l', xlab="independent variable t", ylab="function values f(t)", main="Data Plotted with Nth Degree Least Squares Polynomial", col="blue")
points(t, b, col="red")
} # End

0 个答案:

没有答案