Calculations using Inline Functions
11 views (last 30 days)
Show older comments
Hello... I'm still a beginner when it comes to using MATLAB and I can't seem to figure this equation out.
My Code:
t = (-100:0.01:100);
g = inline ('(exp(-t).*(cos(2*pi*t))).*(t>=0)','t');
h = inline ('g((2*t)+1) + g(1-t)','t','g');
E = inline('((g(2*t+1) + g(1-t)).^2)','t','g'); % square of the function h(t)
En = quad(E(h,t),-100,100);
En (E,t)
Error:
Error using inlineeval (line 14)
Error in inline expression ==> ((g(2*t+1) + g(1-t)).^2)
Undefined function 'mtimes' for input arguments of type
'inline'.
Error in inline/subsref (line 23)
INLINE_OUT_ = inlineeval(INLINE_INPUTS_,
INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in BA2 (line 27)
En = quad(E(h,t),-100,100);
Please and thank you.
0 Comments
Accepted Answer
Adam
on 13 Feb 2015
Edited: Adam
on 13 Feb 2015
I've never used 'inline' and didn't even know it existed, but the documentation says:
'inline will be removed in a future release. Use Anonymous Functions instead.'
so I would suggest not using inline if you intend to keep your code for future usage too. I use anonymous functions a lot which is probably why I never knew about the 'inline' function.
It looks like you have too many closing parenthesis in your definition of 'g' though.
Try using the following instead as an anonymous function:
g = @(t) exp(-t) .* cos( 2 * pi * t ) .* ( t >= 0 );
h = @(t) g(( 2 * t ) + 1 ) + g( 1 - t )
E = @(t) h(t).^2
I think that should work for E...no need to define it in terms of g if it is just h squared.
Then I assume this should give the right answer:
En = quad( E, -100, 100 );
Again though the 'quad' function says it will be removed in a future release, but maybe if you are using an old Matlab you don't have the suggested replacement function.
3 Comments
Adam
on 13 Feb 2015
I'm not too familar with quad or integral in terms of how you feed in the single argument to the 'E' function, but:
En = quad( E, -100, 100 );
certainly gave a result for me without error. Whether it was a correct result or not I'm not sure.
Usually you would just call E as:
res = E(t);
but when it is being passed as a function handle to 'quad' or 'integral' that function appears to expect format more like the above.
More Answers (0)
See Also
Categories
Find more on Function Creation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!