Re: inability to pass argument(s) to functions..
- To: mathgroup at smc.vnet.net
- Subject: [mg29891] Re: [mg29878] inability to pass argument(s) to functions..
- From: "Mark Harder" <harderm at ucs.orst.edu>
- Date: Tue, 17 Jul 2001 01:00:36 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
All,
A little editing: Some formatting glitch displaced the 2 lines in the
input here--
In[405]:= aN={aN1,aN2};
{c,i,aN}
Out[405]:= {c, i, {aN1, aN2}}
-- and made the output look like some sort of crazy exponential.
-mark
-----Original Message-----
From: Mark Harder <harderm at ucs.orst.edu>
To: mathgroup at smc.vnet.net
Subject: [mg29891] [mg29878] inability to pass argument(s) to functions..
>
> Just to set the stage, I am trying to use NonlinearRegression
>(again, alas) to fit a model with shared parameters to 2 sets of data,
>which are distinguished from each other by an integer index which
>appears in the data list in the NLR arguments as an extra independent
>variable, which will be passed to the model function in the usual
>fashion. This simple scheme fails, although I have tried several
>alternative formulations of the model function because, apparently, NLR
>is unable to pass the integer index into the model function. I have
>enclosed a trial function which reproduces this behavior. I hope
>someone can show me what I am doing "wrong" and how I can fix my
>problem:
>
>(* definition of function *)
>
>In[478]:=
>Clear[trialfn, i, ii, c, cc];
>trialfn[aN_List, c, i] := (Print[i];
>Return[c*aN\[LeftDoubleBracket]i\[RightDoubleBracket]] )
>
>(* aN is a list *)
>
>In[405]:= {aN1,aN2};
>
> {c, i, aN}
>Out[405]= {c, i, {aN1, aN2}}
>
>(* pass numeric values explicitly *)
>
>In[482]:=
>trialfn[{-3.4, -4.}, 0., 1 ]
>Out[482]=
>trialfn[{-3.4, -4.}, 0., 1] (* Doesn't understand command *)
>
>
>
>(* passed by replacement ( I think this is how NLR does it) *)
>
>In[487]:=
>trialfn[aN, c, i ] /. {aN1 -> -3.4`, aN2 -> -4.`, c -> 1.`, i -> 2`}
>an integer nor a list \
>of integers."
>Out[487]= -4. (* correct evaluation, for i=2!! *)
>
>note the result of printing out the value of i, although the function
>*is* evaluated. This doesn't work in NLR, however:
>
>fitData2 = {{0, 1, -3.320248485`}, {1, 1, -3.215648485`}, {2,
> 1, -3.375939394`}, {0, 2, -4.312424242`}, {1, 2, -3.985844444`},
>{2,
> 2, -4.300822222`}}; (* trial data for fitting *)
>
>In[476]:= best3D = NonlinearRegress[fitData2, trialfn[aN, c, i ]
>,
> {c, i}, { {aN1, {-3.4, -3.}}, {aN2, {-4., -3.}} },
> Method -> Gradient, Compiled -> False]
>
>
>an integer nor a list \
> of integers.
>
> "From In[476]:=
>FindMinimum::"fmgs": "Could not symbolically find the gradient of
>\!\(#1\\ \(\
>\(\(\({aN1, aN2}\)\) \[LeftDoubleBracket] #2
>\[RightDoubleBracket]\)\)\). Try \
>using the default method, giving two starting values for each variable."
>
>.... and a long list of repeating error messages ending with the
>unevaluated output.
>
>Thanks,
>
>mark e. harder
>
>