vectorization of piecewise defined function

2 次查看(过去 30 天)
need to calculate output of
f(x)={3x^2+5, x<0 [and]
-3x^2+5, x>=0}
using vectorization and one output vector and cannot figure out. it is for a class assignment and I know it can easily be done with loops and conditional statements, but part of my lab requires it being calculated using vectorization with only one output vector. needs to be done on domain -9<=x<=9. input vector is not the problem, its calculating the piecewise defined output. please help!

回答(3 个)

Walter Roberson
Walter Roberson 2016-5-31
-sign(x) .* 3 .* x.^2 + 5

dpb
dpb 2016-5-30
Well, as homework it's not kosher to just provide the solution; that does you no good in learning...
HINT: type
doc 'logical indexing' % at command line and see if doesn't lead you to some useful information

Star Strider
Star Strider 2016-5-30
You came very close with your own code. I added a couple multiplication operators and a couple piece-wise multiplication operators to your code to get this:
f = @(x) (3*x.^2+5).*(x<0) + (-3*x.^2+5).*(x>=0);
t = linspace(-5, 5);
figure(1)
plot(t, f(t))
grid
The code works by creating a logical vector with the logical tests that are true or 1 where the test is true, and false or 0 elsewhere for each test and so for each calculation as well. These logical values are converted to their numerical equivalents when you use them in calculations.
See the documentation for Array vs. Matrix Operations for details on piece-wise operators.

类别

Help CenterFile Exchange 中查找有关 Assumptions 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by