Une option consiste à utiliser la fonction heaviside
pour que chaque équation égale à zéro en dehors de sa plage donnée, puis les ajouter en une seule équation:
syms x;
f = (heaviside(x)-heaviside(x-1))*x^3/6 + ...
(heaviside(x-1)-heaviside(x-2))*(1/6)*(-3*x^3+12*x^2-12*x+4) + ...
(heaviside(x-2)-heaviside(x-3))*(1/6)*(3*x^3-24*x^2+60*x-44) + ...
(heaviside(x-3)-heaviside(x-4))*(1/6)*(4-x)^3;
double(int(diff(f, 1)^2, x, 0, 4))
ans =
0.6667
Une autre alternative consiste à effectuer votre intégration pour chaque fonction sur chaque sous-plage puis ajoutez les résultats:
syms x;
eq1 = x^3/6;
eq2 = (1/6)*(-3*x^3+12*x^2-12*x+4);
eq3 = (1/6)*(3*x^3-24*x^2+60*x-44);
eq4 = (1/6)*(4-x)^3;
total = int(diff(eq1, 1)^2, x, 0, 1) + ...
int(diff(eq2, 1)^2, x, 1, 2) + ...
int(diff(eq3, 1)^2, x, 2, 3) + ...
int(diff(eq4, 1)^2, x, 3, 4)
total =
2/3
MISE à JOUR:
Bien qu'il soit mentionné dans la question que la fonction piecewise
n'a pas fonctionné, Karan's answer le suggère, au moins dans les versions plus récentes. La documentation pour piecewise
dit actuellement qu'il a été introduit dans R2016b, mais il était clairement présent beaucoup plus tôt. Je l'ai trouvé dans la documentation pour le Symbolic Math Toolbox aussi loin que R2012b, mais la syntaxe d'appel était différente de ce qu'elle est maintenant. Je ne l'ai pas trouvé dans la documentation antérieure pour Symbolic Math Toolbox, mais il est apparu en tant que fonction dans d'autres boîtes à outils (telles que Statistics et Spline Toolboxes), ce qui explique sa mention dans la question (et pourquoi pas travailler pour des équations symboliques à l'époque).
Il devrait être de 60 * x. – Jonas
@Jonas: Merci. Le '12x' devait être réparé aussi. – gnovice
Pour ce qui est de R2012b_, vous pouvez faire référence à la fonction MuPAD par morceaux, qui est une interface différente de la Symbolic Math Toolbox. Pour le SMT, il a été introduit dans R2016b. Désolé pour la confusion avec les boîtes à outils. Faites-moi savoir si je peux répondre à d'autres questions. –