Testing Lists
- To: mathgroup at smc.vnet.net
- Subject: [mg15043] Testing Lists
- From: Jorge Zickermann <jzickermann at mail.EUnet.pt>
- Date: Wed, 9 Dec 1998 04:12:26 -0500
- Organization: Personal
- Sender: owner-wri-mathgroup at wolfram.com
Dear Sirs,
I am trying to use, as an alternative to iteration, variation of
parameters to create all possible solutions to a problem and then
choose the best one.
In the example I send, I am varying the Length (L), Breadth (B) and
Block Coefficient (CB), one percent on each side of each average value
obtained from statistics of existant ships simillar to the one I
pretend to design.
Therefore, given the resultrange of 1 percent and a precision of 1
percent, I obtain a list of 3 values being the centre one the value
obtained from the statistics.
Using the 'Outer' function I can create all posible combinations of
ships with the Lengths, Bradths, etc varying.
In this simple example I use three parameters and a resultrange and
precision such that I obtain 3x3x3 = 27 ships for study. Eventually I
will use many more parameters, a wider resultrange and a higher
precision in order to create a table of millions of ships to be
analysed. Up to here everything works fine.
The idea is then to apply a function (in the example sent the function
is Ship and is not defined) of the parameters considered to each
possible ship and obtain a result for each one.
First problem;
I haven't managed to create a composed function of the style,
Ship[L,B,CB] = f[g[L,B,CB]]
How can I get round to to achieving that?
Second problem;
Once I obtain a table of results for each ship (so far I've managed
that using simple functions 'Ship[L,B,CB]'), I want to select the
positions of ships whoose results are in between two values defined by
me. What happens is that if I test the result to be equal to a certain
value, the program returns the list of positions of the ships that meet
the test requirements. However, if the test function is an inequality,
I am always given back the empty set result.
How can I test values in lists with an inequality test function?
A last but important question;
Given the explanation of what I intend to do, am I completely off
course regarding the best way to tackle the problem?
In[63]:=
L = 182
Out[63]=
182
In[64]:=
resultrange = 0.01;
In[65]:=
precision = 0.01;
In[66]:=
L = Range[(1-resultrange)*L,(1+resultrange)*L,precision*L]
Out[66]=
{180.18,182.,183.82}
In[67]:=
Length[%]
Out[67]=
3
In[68]:=
B = 28.4
Out[68]=
28.4
In[69]:=
B = Range[(1-resultrange)*B,(1+resultrange)*B,precision*B]
Out[69]=
{28.116,28.4,28.684}
In[70]:=
Length[%]
Out[70]=
3
In[71]:=
CB = 0.85
Out[71]=
0.85
In[72]:=
CB = Range[(1-resultrange)*CB,(1+resultrange)*CB,precision*CB]
Out[72]=
{0.8415,0.85,0.8585}
In[73]:=
Length[%]
Out[73]=
3
In[74]:=
PossibleShips= Outer[Ship,L,B,CB]//TableForm
TableForm[ {{{
Ship[ 180.18, 28.116, 0.8415],
Ship[ 180.18, 28.116, 0.85],
Ship[ 180.18, 28.116, 0.8585]}, {
Ship[ 180.18, 28.4, 0.8415],
Ship[ 180.18, 28.4, 0.85],
Ship[ 180.18, 28.4, 0.8585]}, {
Ship[ 180.18, 28.684, 0.8415],
Ship[ 180.18, 28.684, 0.85],
Ship[ 180.18, 28.684, 0.8585]}}, {{
Ship[ 182.0, 28.116, 0.8415],
Ship[ 182.0, 28.116, 0.85],
Ship[ 182.0, 28.116, 0.8585]}, {
Ship[ 182.0, 28.4, 0.8415],
Ship[ 182.0, 28.4, 0.85],
Ship[ 182.0, 28.4, 0.8585]}, {
Ship[ 182.0, 28.684, 0.8415],
Ship[ 182.0, 28.684, 0.85],
Ship[ 182.0, 28.684, 0.8585]}}, {{
Ship[ 183.82, 28.116, 0.8415],
Ship[ 183.82, 28.116, 0.85],
Ship[ 183.82, 28.116, 0.8585]}, {
Ship[ 183.82, 28.4, 0.8415],
Ship[ 183.82, 28.4, 0.85],
Ship[ 183.82, 28.4, 0.8585]}, {
Ship[ 183.82, 28.684, 0.8415],
Ship[ 183.82, 28.684, 0.85],
Ship[ 183.82, 28.684, 0.8585]}}}]]\)
In[75]:=
Dimensions[%]
Out[75]=
{3,3,3}