# Function with Non Constant Variable

4 views (last 30 days)
Natalia Brezovan on 26 Oct 2020
Commented: Adam Danz on 27 Oct 2020
Hello,
I'm wondering if there's a way to run this code while keeping x a variable (Instead of inputting a number for the required input 'x', have a variable so I can create a graph of results). Currently I just recieve output 'Unrecognized Function or variable 'x', even when putting sym x in the code.
Thanks for any help! Show 1 older comment
Natalia Brezovan on 27 Oct 2020
It runs fine when all 4 inputs are numbers, [eg. (3, 2, 1, 1)] but I want the x input to work as a variable [(eg y)]. Hope that makes sense
per isakson on 27 Oct 2020
x must have a value, e.g.
%%
x = 17;
S(3,1,x,2)
or maybe the Symbolic Toolbox lets you use a variable, x, without a value.
Adam Danz on 27 Oct 2020
" I want the x input to work as a variable"
This part is still unclear, hence the variety of answers. Do you mean you want to pass a variable to the 3rd input (see per isakson's or Stephen Cobeldick's answer) or do you mean that the 3rd variable should be a symbolic variable (see Walter Roberson's answers).

Stephen Cobeldick on 27 Oct 2020
You could create an anonymous function:
fun = @(x) S(3,1,x,2);
..
fun(17)

Walter Roberson on 27 Oct 2020

syms x
output = S(3, 1, x, 2);
disp(output)
output = S(3, 1, 4, 2);
disp(output)

function SF = S(F, a, x, n)
if isa(a, 'sym') || isa(x, 'sym')
SF = piecewise(x >= a, F*(x-a)^n, 0);
elseif x >= a
SF = F.*(x-a).^n;
else
SF = zeros(size(x));
end
end

#### 1 Comment

Walter Roberson on 27 Oct 2020
[Please preserve the above for investigation of a system problem.]

Walter Roberson on 27 Oct 2020
syms x
output = S(3, 1, x, 2);
disp(output)
{3(x1)20 if  1x otherwise
output = S(3, 1, 4, 2);
disp(output)
27
function SF = S(F, a, x, n)
if isa(a, 'sym') || isa(x, 'sym')
SF = piecewise(x >= a, F*(x-a)^n, 0);
elseif x >= a
SF = F.*(x-a).^n;
else
SF = zeros(size(x));
end
end