2016-12-19 3 views
0

Voici un gestionnaire de fonction à la fonction d'intérêt:Comment calculer numériquement l'intégrale de 1/(√x · (x + 1));

fun = @(x) 1/(sqrt(x) * (x + 1)); 

q = integral(fun, 0, inf) 

Mais j'ai l'erreur suivante:

Error using * 
    Inner matrix dimensions must agree. 

Comment puis-je résoudre ce problème?

+1

Vous pouvez également utiliser [la solution exacte] (https://www.wolframalpha.com/input /? i = intégrale + de + 1% 2F (sqrt (x) * (x% 2B1))): la réponse est π. –

+0

Peut-être, il devrait être noté tout d'abord que la fonction 'fun' sera utilisée pour générer un tableau de valeurs, donc il a besoin d'une entrée _vectorized_. L'erreur est due à une entrée vectorisée supposée qui conduit à interpréter "*" comme _dot produit_ (multiplication matricielle: rangée par colonne) plutôt que simple (élément par élément) multiplication. – Ziezi

Répondre

7

Vous devez utiliser . périodes pour définir une opération par élément plutôt que des opérations de matrice. Ceci est nécessaire pour les entrées de fonction integral.

Votre fonction doit être

fun = @(x) 1./(sqrt(x).*(x+1)); 

Donner

q = integral(fun,0,inf) 

q = 

3.1416 

Cet article aperçu sur la matrice par rapport à des opérations de matrice peut être d'intérêt, décrivant toutes les fonctions de type élément par élément .. https://uk.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html

Plus précisément, voir ces articles d'aide sur multplication et division tableau droit de vous donner une idée: https://www.mathworks.com/help/matlab/ref/times.html, https://www.mathworks.com/help/matlab/ref/rdivide.html

+1

Le point/point, '.', spécifie les opérations _element-wise_. –

+1

Merci @ Jørgen, j'ai vite réalisé le même mauvais libellé et je me suis corrigé – Wolfie

+0

@Will Le lien que vous avez pointé n'est pas tout à fait correct. Cela pointe vers la boîte à outils du point fixe. J'ai corrigé pour pointer vers les liens réels que vous recherchez (cue référence de Star War). – rayryeng