How can I pass additional parameters to a function I defined?

20 次查看(过去 30 天)
Hello,
When using an odexx solver I know i can pass additional parameters following this structure (example for ode45)
[T,X] = ode45(f,tspan,x0,[],u,d,par)
where u,d and par are the additional parameters I am passing to ode45.
Is there any way to do the same for a function I defined? As an example, I have the following function
[t,x] = FoxRabbit_Euler_v1(f1,tspan,x0,n);
In this case f1 has some parameters I will like to pass when using "FoxRabbit_Euler_v1".
Any help will be very much appreciated

采纳的回答

Ryan Livingston
Ryan Livingston 2013-3-7
You may want to have a look at varargin:
Defining a function like
function out = foo(a,b,varargin)
...
allows you to require a and b as arguments then allows the user to pass along anything else. These other arguments are put into the cell array varargin and can be retrieved from there:
if (nargin >= 3)
extraInput1 = varargin{1};
elseif (nargin >= 4)
extraInput2 = varargin{2};
...
end
  4 个评论
mauricio
mauricio 2013-3-8
I think I have found the way to use varargin for my particular purpose but there is still a small issue.
I have written the following code just to understand a little better the use of varargin
function s = h(x,varargin)
y=[varargin{:}]
h=y(1)-y(2)
x
end
Here I turn the cell array into a vector and then I use the components of that vector to do something else (a difference in this case). I have play with some scalars and everything is good.
Now I have a new issue. Some of this additional parameters are scalars, others are vectors. i.e (2,[1 3],5). How can I assign each component of the array varargin into a specific variable/parameter inside my code? i.e
u=2
t=[2 3]
par=4
Any hint? Thanks for your time
mauricio
mauricio 2013-3-8
I tried the following function
function s = add(x,varargin)
a = [varargin{1}]
b = [varargin{2}]
c = [varargin{3}]
x
end
and when called add(1,[3 4],6,7) I get the needed result
a = 3 4
b = 6
c = 7
x = 1
Now I can use a,b,c (the additional parameters) inside my original function ;) I do not know if this is the correct way to do it or the most efficient way to use the extra parameters passed to a function, so any comment or suggestion will be very welcome.

请先登录,再进行评论。

更多回答(1 个)

Shashank Prasanna
You can use anonymous functions to achieve just that:
Although the above link is from the optimization toolbox the concept is the same and is a pretty standard way across matlab toolboxes to pass additional parameters.
The following should be helpful too:
  1 个评论
mauricio
mauricio 2013-3-7
Thanks Shashank ! In particular the Parameterizing Functions info will help me in the near future ;)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by