2017-08-02 1 views
1

J'ai suivi cet article ici double integral in R et j'ai changé la fonction et les limites pour faire correspondre ci-dessous, mais cela ne fonctionne pas.Pourquoi mon double intégral ne fonctionne-t-il pas?

enter image description here

InnerFunc = function(x) { x + (y^2) } 
InnerIntegral = function(z) { sapply(y, 
     function(z) { integrate(InnerFunc, 0, 2)$value }) } 
integrate(InnerIntegral, 0, 1) 

Je reçois cette erreur:

Erreur dans l'intégration (InnerFunc, 0, 2): évaluation de la fonction a donné un résultat de mauvais type

Répondre

2

vos variables sont hors de question. Cela devrait faire ce que vous voulez

InnerFunc <- function(x, y) { x + (y^2) } 
InnerIntegral <- function(y) { sapply(y, 
    function(z) { integrate(InnerFunc, 0, 2, y=z)$value }) } 
integrate(InnerIntegral, 0, 1) 
# 2.666667 with absolute error < 3e-14 

Remarquez comment InnerFunc est maintenant une fonction à la fois x et y. Notez également comment nous appliquons sur le vecteur passé à InnerIntegral via le paramètre y (plutôt que d'ignorer la valeur z transmise). Nous passons également dans la valeur actuelle de y à .

Bien que vous avez saisi

InnerFunc <- function(x, y) { x + (y^2) } 

les mathématiques que vous avez dessiné les regards devraient se traduire vraiment

donc je ne suis pas sûr de ce que vous étiez vraiment après.

+0

salut donc la réponse devrait être .6666667, voir ici https://www.symbolab.com/solver/double-integrals-calculator/%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D % 5E% 7B2% 7Dxy% 5E% 7B2% 7D% 20dxdy –

+0

J'ai déjà mentionné dans la réponse que dans votre code vous mettez 'x + (y^2)' mais si vous vouliez dire 'x * (y^2)' alors vous obtiendrez .666 comme prévu. – MrFlick