Question

J'ai quelques fonctions mis en place comme ceci:

f(x):=1-2**-x$
g(y):=integrate(f(x), x, 0, y)$

et les a évaluées:

f(1)$float(%);
g(1)$float(%);

mais pour g (1), je me suis une réponse symbolique au lieu d'une réponse numérique. En utilisant float () a été une tentative d'obtenir une réponse numérique, mais il vient d'avoir tous les termes de l'intégrale en flotte.

Comment puis-je obtenir g (1) en nombre?

Était-ce utile?

La solution

Pourquoi ne pas simplement faire (par la définition intégrale définie):

f(x):=1-2**-x$
gg(x):=''(integrate(f(x), x))$
g(y):=gg(y) - gg(0)$

'' opérateur (quote-quote) est utilisé pour forcer l'évaluation de l': = '. S côté droit avant l'affectation

Autres conseils

Si vous n'êtes intéressé que par une solution numérique, vous pouvez utiliser l'intégration numérique. Par exemple, vous pouvez utiliser quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit]).

J'ai essayé:

f(x) := 1-2^(-x);
g(y):= quad_qag(f(x), x, 0, y, 3, epsrel=10d-8)$
g(1);

qui retours:

[0.27865247955552,3.093663986714272*10^-15,31,0]

la première entrée est la solution numérique,

la seconde entrée est l'erreur relative approximative,

la troisième entrée est le nombre d'itérations nécessaires pour atteindre la solution,

et la dernière entrée est un code d'erreur; les codes d'erreur sont

  • 0 si aucun problème n'a été rencontré;
  • 1 si trop de sous-intervalles ont été faites;
  • 2 en cas d'erreur d'arrondi excessif est détecté;
  • 3 si le comportement de integrand extrêmement mauvais se produit;
  • 6 si l'entrée est valide.

BTW, la solution exacte est 1-1 / (2 log * (2)) qui est d'environ 0,27865.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top