선형대수학

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))

 

다음포스팅은 푸리에급수를 다루고 선형대수 포스팅은 마치도록 하겠다.