선형대수학
LA20)[R] 최적근사정리를 이용하여 근사해를 구하자
JSMATH
2025. 3. 17. 17:50
우리가 살아가고 있는 실제 환경에서 정확한 해는 존재하기 힘들다.
예로들어, 거푸집이 있다고 하자. 이 거푸집에 쇳물을 넣기에는 힘들지 않다.
하지만 이미 단단하게 된 쇠를 쇠를 다듬거나 하지 않고 바로 거푸집 틀에 알맞게 넣기가 가능할까? 불가능 할 것이다.
수학에서도 이러한 거푸집을 가정하고 쇳물을 넣고 싶으나 이미 환경에서는 단단하게 된 쇠들이 무수히 많다.
이러한 쇠들을 어떻게 잘 다듬어서 즉, 정확한 해를 포기하더라도(=오차를 감수한다라고 흔히 표현한다.) 함수에 잘 설명되게 하는(최소오차) 해를 구하는 방식이 최적근사정리를 이용한 근사해 구하는 방법이다.
#307
P1 <- c(1,2)
P2 <- c(2,4)
P3 <- c(3,4)
P4 <- c(6,5)
plot(x = c(1,2,3,6),y=c(2,4,4,5),pch=16,xlab = 'x',ylab='y')
u <- c(2,4,4,5)
A <- matrix(c(P1[1],P2[1],P3[1],P4[1],rep(1,4)),byrow=F,ncol=2)
library(matlib)
gaussianElimination(A,u)
> gaussianElimination(A,u)
[,1] [,2] [,3]
[1,] 1 0 0.6
[2,] 0 1 1.4
[3,] 0 0 0.8
[4,] 0 0 1.4
sol <- solve(t(A)%*%A)%*%t(A)%*%u
f<-function(x) sol[1,1]*x+sol[2,1]
abline(a = sol[1,1],b = sol[2,1],col='red')
> A <- matrix(c(-2,-2,1,
+ 1,-1,1,
+ 0,0,1,
+ 1,1,1,
+ 4,2,1),byrow=T,ncol=3)
> b <- c(5,2,1,2,5)
> gaussianElimination(A,b) #Inaccurate solution.
[,1] [,2] [,3] [,4]
[1,] 1 0 0 1
[2,] 0 1 0 0
[3,] 0 0 1 1
[4,] 0 0 0 0
[5,] 0 0 0 6
plot(c(-4,-3,0,4,2),c(4,1,1,7,3),pch=16,ylim = c(-2,10),xlab='x',ylab='y')
A <- matrix(c(16,-4,1,
9,-3,1,
0,0,1,
16,4,1,
4,2,1),byrow=T,ncol=3)
b <- c(4,1,1,7,3)
sol <- solve(t(A)%*%A)%*%t(A)%*%b
f <- function(x) sol[1,1]*x^2 + sol[2,1]*x + sol[3,1]
curve(f,add=T,col='red')
abs(4-f(-4)) + abs(1-f(-3)) + abs(1-f(0)) + abs(7 - f(4)) + abs(3 - f(2))
다음포스팅은 푸리에급수를 다루고 선형대수 포스팅은 마치도록 하겠다.