MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by Jose on 22 Nov 2012

Hi,

I am writing a program for school. I need the user to input a function as a string, and then I need to process it.

What I am doing:

f = vectorize(inline(user_input_string)); x = linspace(0, 20, 20); y = f(x); ...

This works perfectly except when the user inputs a constant function (such as f = 1). In order for my project to work, y must be a vector. But if the user inputs a constant function, Matlab automatically sets y to a sclalar, instead of a vector.

What can I do?

*No products are associated with this question.*

Answer by Star Strider on 22 Nov 2012

Edited by Star Strider on 22 Nov 2012

I'm not certain I completely understand your problem. However, you could test for a scalar and if something like ` f=1` was the input, perhaps set

f = '1'; y = polyval(str2num(f), x);

If the test for a scalar was `true`, you could also consider something like:

user_input_string = sprintf('polyval(%s, x)', f);

Without knowing more, that's the best solution I can come up with.

Jose on 22 Nov 2012

No, that won't solve it. I'll explain better:

- the user inputs a function

- i apply the function on a vector (linspace(0, 20, 100))

- then i want to get a vector i can use later on a internal product

- however, if the function e constant (let's say, f = 1), if i apply the function on the vector, i don't get another vector, i get a scalar.

Hope it's is clearer now.

Star Strider on 22 Nov 2012

If the user inputs a constant, what output for `user_input_string` do you want?

The `polyval` function outputs a vector of constant values equal to the scalar input value with a length equal to the length of your `x`-vector. It's the only option I can think of that's compatible with your `user_input_string` variable.

The version I posted earlier assumes the scalar is read in as a string. If you read ` f` in as a numeric value instead, replace the

user_input_string = sprintf('polyval(%f, x)', f);

Answer by Matt Fig on 23 Nov 2012

You can specify the variable in your call to INLINE. For example, this works even if the user enters 2:

f = vectorize(inline(input('Enter a func of x : ','s'),'x'));

Matt J on 23 Nov 2012

No, it doesn't work around the issue cited by the OP. The code still gives

>> f(1:10)

ans =

1

whereas the desired output is ones(1,10).

## 0 Comments