2017-10-18 8 views
0

필자는 "적분"을 표시하고자하는 데이터 요소 집합을 가지고 있습니다. 예를 들어x 및 y 값 집합의 곡선 (적분) 아래 영역을 그래프로 그립니다.

:

x = seq(from=0, to=9, by=0.05) 
y = sin(x) 

가 어떻게 말의 간격 x0에서 적분을 플롯 않는, 10-0? 여기서 integral은 곡선으로 묶인 면적이고 y=0입니다.

이것은 당연히 1 - cos(x)의 음모와 비슷하게 보일 것입니다.하지만 실제로는 y = f(x)이 무엇인지 알 수 없다고 가정 해 봅시다.

나는 그 작업을 수행하는 방법을 알고있는 유일한 것은 이해하는 것입니다 :

spl = smooth.spline(x, y) 

그러나 나는 다음에 무엇을 해야할지하지 않습니다.

EDIT : 이것은 곡선 아래 음영과 중복되지 않습니다. 한 가지만 빼면 y = 0 아래의 부분을 빼야하고 다른 부분은 음영 처리 된 영역을 표시하는 것이 아니라 전체적인 함수를 생성하는 것입니다. .

+0

@MaciejPitucha 재 : 재현 대답은, 당신의 소원은 내 명령입니다. 그러나 그 질문의 중복은 분명하지 않습니다. –

+0

나는 재생산 할 수있는 예를 들었다. 미안하다. –

+0

예, 방금 추가했습니다. –

답변

0

@Maciej Pitucha의 대답은 너무 훌륭하지만 나는 결국 내가 원래 smooth.spline()와 함께 할 노력했다 통해 내 방식을 뒤죽박죽, 그리고 내 실제 데이터에 대한 더 나은 작동하는 것 같다.

test.x = seq(from=0, to=9, by=0.05) 
test.y = sin(x) 
spl = smooth.spline(y=test.y, x=test.x) 
f = function(x) {predict(spl, x)$y} 
f.int = function(x) {integrate(f, lower=0, upper=x)$value} 
f.int.vec = Vectorize(f.int, vectorize.args='x') 

plot(test.x, test.y, type="l", ylim = c(-1,2)) 
lines(test.x, 1-cos(test.x), col="red") 
lines(test.x, f.int.vec(test.x), col="blue") 
legend(x="bottomright", 
     col=c("black","red", "blue"), 
     legend=c("sin", "1-cos", "integral"), 
     lty=1) 

enter image description here

1

나는 당신이 그것을 달성하고자하는 생각 :

enter image description here

빨간색과 파란색 라인이 동일하지 있습니다 - 당신이 면적을 계산하는 점의 수에 따라 달라집니다. 코드의 첫 번째 줄에서 숫자 500을 증가 시키면 플롯의 선이 더 가깝습니다. 코드 :

x <- seq(from=0, to=10, length.out = 500) 
n <- rep(1, length(x)) 
y <- sin(x) 

plot(x,y, type="l") 
lines(x, 1-cos(x), col="red") 
lines(x, cumsum(y*x/cumsum(n)), col="blue") 
legend(x="bottomright", 
     col=c("black","red", "blue"), 
     legend=c("sin", "1-cos", "integral"), 
     lty=1) 
+0

감사합니다. 좋습니다. 나는 smooth.spline을 사용하여 결국 그것을 알아 냈습니다. –