Constructing piecewise symbolic function in Matlab
I am trying to generate a piecewise symbolic function in Matlab. The reason it has to be symbolic is I want to be able to integrate/differentiate the function afterwards and/or insert actual values. I have the following function:
x^3/6 -> 0 < x <= 1 (1/6)*(-3*x^3+12*x^2-12x+4) -> 1 < x <= 2 (1/6)*(3*x^3-24*x^2+60x-44) -> 2 < x <= 3 (1/6)*(4-x)^3 -> 3 < x <= 4 0 -> otherwise
I am trying to generate a piecewise symbolic function in Matlab. The reason it has to be symbolic is I want to be able to integrate/differentiate the function afterwards and/or insert actual values. I have the following function:
x^3/6 -> 0 < x <= 1
(1/6)*(-3*x^3+12*x^2-12x+4) -> 1 < x <= 2
(1/6)*(3*x^3-24*x^2+60x-44) -> 2 < x <= 3
(1/6)*(4-x)^3 -> 3 < x <= 4
0 -> otherwise
For example, I want to put this function in a variable (let's say f) and then call
int(diff(f, 1)^2, x, 0, 4) % numbers could be different
and get the (scalar) result 2/3.
I tried various things, involving the piecewise() function and symbolic comparisions, but nothing worked... can you help? :-)
NOTE:-
Answers:
One option is to use the heaviside
function to make each equation equal zero outside of its given range, then add them all together into one equation:
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
SEE COMPLETE ANSWER CLICK THE LINK
https://matlabhelpers.com/questions/constructing-piecewise-symbolic-function-in-matlab.php
Comments
Post a Comment