MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Using matrix-form matrices and vectors in function definitions;

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107248] Using matrix-form matrices and vectors in function definitions;
  • From: Chris <c56young at gmail.com>
  • Date: Sat, 6 Feb 2010 03:26:59 -0500 (EST)

   I'd like to be able to use matrix-form matrices and vectors in my
definitions for geometric shapes such as M=F6bius strips. But I run into
problems with Mathematica adding extra nesting, and have to apply Flatten to
get the products back into correct form. Isn't there an easier way to
do this? I'm using Mathematica 5.

I defined rotation matrices as

\!\(\*
  RowBox[{\(RotZ[t_]\), ":=",
    RowBox[{"(", GridBox[{
          {\(Cos[t]\), \(-Sin[t]\), "0"},
          {\(Sin[t]\), \(Cos[t]\), "0"},
          {"0", "0", "1"}
          }], ")"}]}]\)

and

\!\(\*
  RowBox[{\(RotY[t_]\), ":=",
    RowBox[{"(", GridBox[{
          {\(Cos[t]\), "0", \(-Sin[t]\)},
          {"0", "1", "0"},
          {\(Sin[t]\), "0", \(Cos[t]\)}
          }], ")"}]}]\)

Then I simply wanted to use them in a function for a M=F6bius strip:

\!\(\*
  RowBox[{\(moebiusstrip6[u_, v_]\), ":=",
    RowBox[{
      RowBox[{\(RotZ[u]\), ".",
        RowBox[{"(", GridBox[{
              {"1"},
              {"0"},
              {"0"}
              }], ")"}]}], "+",
      RowBox[{\(RotZ[u]\), ".", \(RotY[u]\), ".",
        RowBox[{"(", GridBox[{
              {"v"},
              {"0"},
              {"0"}
              }], ")"}]}]}]}]\)


But I got error messages:

In[148]:=
ParametricPlot3D[moebiusstrip6[u,
    v]//Evaluate,{u,0,2Pi},{v,-0.3,0.3},PlotPoints\[Rule]{40,5},Axes\
[Rule]
        True,Boxed\[Rule]True];

>From In[148]:=
\!\(\*
  RowBox[{\(ParametricPlot3D::"
      ppfun"\), \(\(:\)\(\ \)\), "\<\"Argument \\!\\({\\(\\(Cos[
    u]\\)\\) + \\(\\(v\\\\ \\(Cos[
      u]\\)\\^2\\)\\)}\\) is not a list with three or four elements. \
\\!\\(\\*ButtonBox[\\\"More=85\\\", ButtonStyle->\\\"RefGuideLinkText\\
\", \
ButtonFrame->None, ButtonData:>\\\"ParametricPlot3D::ppfun\\\"]\\)
\"\>"}]\)

>From In[148]:=
\!\(\*
  RowBox[{\(ParametricPlot3D::"
      ppfun"\), \(\(:\)\(\ \)\), "\<\"Argument \\!\\({\\(\\(Sin[
    u]\\)\\) + \\(\\(v\\\\ \\(\\(Cos[
    u]\\)\\)\\\\ \\(\\(Sin[u]\\)\\)\\)\\)}\\) is not a list with three
or \
four elements. \\!\\(\\*ButtonBox[\\\"More=85\\\", \
ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
ButtonData:>\\\"ParametricPlot3D::ppfun\\\"]\\)\"\>"}]\)

>From In[148]:=
\!\(\*
  RowBox[{\(ParametricPlot3D::"
      ppfun"\), \(\(:\)\(\ \)\), "\<\"Argument \\!\\({v\\\\ \\(\\(Sin[
      u]\\)\\)}\\) is not a list
    with three or four elements. \\!\\(\\*ButtonBox[\\\"More=85\\\", \
ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
ButtonData:>\\\"ParametricPlot3D::ppfun\\\"]\\)\"\>"}]\)

>From In[148]:=
\!\(\*
  RowBox[{\(General::"stop"\), \(\(:\)\(\ \)\), "\<\"Further output
    of \\!\\(ParametricPlot3D :: \\\"ppfun\\\"\\) will be suppressed
during \
this calculation. \\!\\(\\*ButtonBox[\\\"More=85\\\", \
ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
ButtonData:>\\\"General::stop\\\"]\\)\"\>"}]\)


I had to apply Flatten to each matrix-and-vector dot-product to make
it work:

\!\(\*
  RowBox[{\(moebiusstrip5[u_, v_]\), ":=",
    RowBox[{
      RowBox[{"Flatten", "[",
        RowBox[{\(RotZ[u]\), ".",
          RowBox[{"(", GridBox[{
                {"1"},
                {"0"},
                {"0"}
                }], ")"}]}], "]"}], "+",
      RowBox[{"Flatten", "[",
        RowBox[{\(RotZ[u]\), ".", \(RotY[u]\), ".",
          RowBox[{"(", GridBox[{
                {"v"},
                {"0"},
                {"0"}
                }], ")"}]}], "]"}]}]}]\)


  • Prev by Date: Re: What does & mean?
  • Next by Date: Re: Inserting a position-limited Locator inside a Manipulate multiplot
  • Previous by thread: Re: Inserting a position-limited Locator inside a Manipulate
  • Next by thread: Integral confusion