2016-09-15 3 views
2

Ich habe ein paar Probleme mit der Integrationsfunktion in R. Ich versuche, die integrale Vo zu plotten, aber es scheint, dass ich nicht richtig mache.R plotten Integral

t <- seq(0, 0.04, 0.0001) 
vi <- function(x) {5 * sin(2 * pi * 50 * x)} 
vo <- function(x) {integrate(vi, lower=0, upper=x)$value} 

test_vect = Vectorize(vo, vectorize.args='x') 
plot(t, vo(t)) # should be a cosine wave 
plot(t, vi(t)) # sine wave 

vo soll eine Sinuswelle sein, aber test_vect gibt mir falsche Handlung und unter Verwendung vo gibt direkt Fehler ‚x‘ und ‚y‘ Längen unterscheiden. Kann mir bitte jemand helfen?

Antwort

5

Sie sind schon da. Verwenden Sie einfach plot(t, test_vect(t)). Sie können vo nicht verwenden, da integrate keine vektorisierte Funktion ist. Es gibt kein Problem, einen einzelnen Punkt wie vo(0.002) zu bewerten, aber Sie können ihm keinen Vektor von vo(t) zuführen. Deshalb wollen wir Vectorize(vo)(t).

enter image description here

Sie sagten, test_vect nicht die richtige Handlung gibt. Sicher? Wir können analytisch das Integral berechnen:

v <- function (x) (1-cos(100*pi*x))/(20*pi) 

Dann lassen Sie uns vergleichen:

sum(abs(v(t) - test_vect(t))) 
# [1] 2.136499e-15 

Sie sind gleich!

+0

Sie haben absolut Recht. Vielen Dank für die Antwort. –