Different variable in function
Show older comments
function s=traorl(fun,a,b,M)
h=(b-a)/M
s=0
for k=1:(M-1)
x=a+k*h
s=s+feval(fun,x)
end
s=h*(feval(fun,a)+feval(fun,b))/2+h*s
end
%% I wants to run function as a variable x and as well as other variables like I use function, 'fun=q*t*exp(-x)'. where i use second script file as
for x=linspace(0,10);
fun=inline('q*t*(exp(-x))');
B=traorl(fun,0,1,10)
end
But when I try to run this then i found error as
'Error using inline/feval (line 22)
Not enough inputs to inline function'
Error in traorl (line 6)
s=s+feval(fun,x)
Error in Untitled (line 7)
B=traorl(fun,0,1,10)
Answers (2)
Walter Roberson
on 3 Feb 2019
inline('q*t*(exp(-x))')
will not pay any attention to the current value of x in the workspace -- and there is no q or t in the workspace for it to ignore.
That inline() call is going to create an inline function that expects 3 inputs in the order q, t, x .
You then attempt to feval() the function of three variables, passing in only a single variable.
We can guess that what you want is
syms q t
fun = @(x) q * t * exp(-x);
B=traorl(fun,0,1,10);
which will give a result such as B = (113967594646290279*q*t)/180143985094819840 . However, this pays no attention to the linspace(0,10) you are talking about.
There seems to be some confusion as to what x is. Is it the linspace value within the loop, but inside traorl it is to take on the role of what is q outside the loop ??
4 Comments
SHARAD KUMAR UPADHYAY
on 3 Feb 2019
SHARAD KUMAR UPADHYAY
on 3 Feb 2019
Edited: Walter Roberson
on 3 Feb 2019
Walter Roberson
on 3 Feb 2019
fun=@(x) q*(exp(-x));
tells MATLAB that at the time of the assignment, to look in the workspace to find the current value of q (the value right then) and take a copy of that, and to construct a function of with one dummy parameter named x designating the parameter passed in at the time of execution. When fun is executed, the remembered value of q will be recalled (no matter what q might have been assigned in the mean time, the remembered q will be used), and the passed in value will be used each place that x is mentioned.
This process ignores the value of x in the workspace due to the for x statement.
You are also overwriting the value of B each iteration through the loop.
syms q t
for AVariableUsedOnlyAsAnIndex=0:10
FunctionThatDoesNotChangeWithIndexValue = @(AVariableThatHasNothingToDoWithTheIndexVariable) q*(exp(-AVariableThatHasNothingToDoWithTheIndexVariable));
B(AVariableUsedOnlyAsAnIndex+1) = traorl(FunctionThatDoesNotChangeWithIndexValue, 0, 1, 10);
end
and equivalent:
syms q
FunctionThatDoesNotChangeWithIndexValue = @(AVariableThatHasNothingToDoWithTheIndexVariable) q*(exp(-AVariableThatHasNothingToDoWithTheIndexVariable));
for AVariableUsedOnlyAsAnIndex=0:10
B(AVariableUsedOnlyAsAnIndex+1) = traorl(FunctionThatDoesNotChangeWithIndexValue, 0, 1, 10);
end
and equivalent:
syms q
FunctionThatDoesNotChangeWithIndexValue = @(AVariableThatHasNothingToDoWithTheIndexVariable) q*(exp(-AVariableThatHasNothingToDoWithTheIndexVariable));
B(1:length(0:10)) = traorl(FunctionThatDoesNotChangeWithIndexValue, 0, 1, 10);
SHARAD KUMAR UPADHYAY
on 6 Feb 2019
SHARAD KUMAR UPADHYAY
on 5 Feb 2019
0 votes
Categories
Find more on Common Operations 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!