找回密码
 注册
Simdroid-非首页
查看: 150|回复: 6

[符号计算] 如何最简洁的解3个一元一次方程

[复制链接]
发表于 2010-1-6 09:57:39 | 显示全部楼层 |阅读模式 来自 华南理工大学
本帖最后由 weichanghe2000 于 2010-1-9 18:26 编辑

大家好,下面这段代码是用来产生3个一元一次方程,但是我运行这段代码后,确不能解得 Subscript[U, 1],Subscript[U, 2],Subscript[U, 3].  必须另外再写 一个Solve 才能解得。这样如果方程为多元多次,将变得很麻烦。
因此,怎样才能够用简洁的方法,解得Subscript[U, 1],Subscript[U, 2],Subscript[U, 3]呢?谢谢。

下面是代码,复制后直接得到 Notebook公式,方便大家查看

  1. Notebook[{
  2. Cell[BoxData[{
  3. RowBox[{
  4.   RowBox[{
  5.    RowBox[{"{",
  6.     RowBox[{
  7.      SubscriptBox["\[Sigma]f", "1"], ",",
  8.      SubscriptBox["\[Sigma]f", "2"], ",",
  9.      SubscriptBox["\[Sigma]f", "3"], ",",
  10.      SubscriptBox["\[Sigma]f", "4"]}], "}"}], "=",
  11.    RowBox[{"{",
  12.     RowBox[{"5.60", ",", "15.82", ",", "53.07", ",", "98.09"}],
  13.     "}"}]}], ";"}], "\[IndentingNewLine]",
  14. RowBox[{
  15.   RowBox[{
  16.    RowBox[{
  17.     RowBox[{"{",
  18.      RowBox[{
  19.       SubscriptBox["\[Theta]", "1"], ",",
  20.       SubscriptBox["\[Theta]", "2"], ",",
  21.       SubscriptBox["\[Theta]", "3"], ",",
  22.       SubscriptBox["\[Theta]", "4"]}], "}"}], "=",
  23.     RowBox[{"{",
  24.      RowBox[{"1.97", ",", "0.53", ",", "0.26", ",", "0.34"}], "}"}]}],
  25.     ";"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]",
  26. RowBox[{
  27.   RowBox[{
  28.    SubscriptBox["U", "0"], "=", "0"}], ";",
  29.   RowBox[{
  30.    SubscriptBox["U", "4"], "=", "120"}], ";"}], "\[IndentingNewLine]",
  31. RowBox[{
  32.   RowBox[{
  33.    RowBox[{"L", "=",
  34.     RowBox[{"{",
  35.      RowBox[{"1", ",", "3.5", ",", "3", ",", "2.5"}], "}"}]}], ";"}],
  36.   RowBox[{"(*",
  37.    RowBox[{
  38.     RowBox[{
  39.      RowBox[{
  40.       SubscriptBox["L", "1"], "-",
  41.       SubscriptBox["L", "0"]}], "=", "1"}], ",",
  42.     RowBox[{
  43.      RowBox[{
  44.       SubscriptBox["L", "2"], "-",
  45.       SubscriptBox["L", "1"]}], "=", "3.5"}], ",",
  46.     RowBox[{
  47.      RowBox[{
  48.       SubscriptBox["L", "3"], "-",
  49.       SubscriptBox["L", "2"]}], "=", "3"}], ",",
  50.     RowBox[{
  51.      RowBox[{
  52.       SubscriptBox["L", "4"], "-",
  53.       SubscriptBox["L", "3"]}], "=", "2.5"}]}],
  54.    "*)"}]}], "\[IndentingNewLine]",
  55. RowBox[{
  56.   RowBox[{"For", "[",
  57.    RowBox[{
  58.     RowBox[{"i", "=", "1"}], ",",
  59.     RowBox[{"i", "\[LessSlantEqual]", "3"}], ",",
  60.     RowBox[{"i", "++"}], ",", "\[IndentingNewLine]",
  61.     RowBox[{"Print", "[",
  62.      RowBox[{"Solve", "[",
  63.       RowBox[{
  64.        RowBox[{
  65.         RowBox[{
  66.          SubscriptBox["\[Theta]", "i"], "*",
  67.          FractionBox[
  68.           RowBox[{
  69.            RowBox[{
  70.             RowBox[{"(",
  71.              RowBox[{
  72.               SubscriptBox["U", "i"], "-",
  73.               SubscriptBox["\[Sigma]f", "i"]}], ")"}],
  74.             RowBox[{"Cosh", "[",
  75.              RowBox[{
  76.               SubscriptBox["\[Theta]", "i"], "*",
  77.               RowBox[{"L", "[",
  78.                RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}], " ", "+",
  79.            RowBox[{"(",
  80.             RowBox[{
  81.              SubscriptBox["\[Sigma]f", "i"], "-",
  82.              SubscriptBox["U",
  83.               RowBox[{"i", "-", "1"}]]}], ")"}]}],
  84.           RowBox[{" ",
  85.            RowBox[{"Sinh", "[",
  86.             RowBox[{
  87.              SubscriptBox["\[Theta]", "i"], "*",
  88.              RowBox[{"L", "[",
  89.               RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}]]}], "==",
  90.         RowBox[{
  91.          SubscriptBox["\[Theta]",
  92.           RowBox[{"i", "+", "1"}]], "*",
  93.          FractionBox[
  94.           RowBox[{
  95.            RowBox[{"(",
  96.             RowBox[{
  97.              SubscriptBox["U",
  98.               RowBox[{"i", "+", "1"}]], "-",
  99.              SubscriptBox["\[Sigma]f",
  100.               RowBox[{"i", "+", "1"}]]}], ")"}], "+",
  101.            RowBox[{
  102.             RowBox[{"(",
  103.              RowBox[{
  104.               SubscriptBox["\[Sigma]f",
  105.                RowBox[{"i", "+", "1"}]], "-",
  106.               SubscriptBox["U", "i"]}], ")"}],
  107.             RowBox[{"Cosh", "[",
  108.              RowBox[{
  109.               SubscriptBox["\[Theta]",
  110.                RowBox[{"i", "+", "1"}]], "*",
  111.               RowBox[{"L", "[",
  112.                RowBox[{"[",
  113.                 RowBox[{"i", "+", "1"}], "]"}], "]"}]}], "]"}],
  114.             " "}]}],
  115.           RowBox[{" ",
  116.            RowBox[{"Sinh", "[",
  117.             RowBox[{
  118.              SubscriptBox["\[Theta]",
  119.               RowBox[{"i", "+", "1"}]], "*",
  120.              RowBox[{"L", "[",
  121.               RowBox[{"[",
  122.                RowBox[{"i", "+", "1"}], "]"}], "]"}]}], "]"}]}]]}]}],
  123.        ",",
  124.        SubscriptBox["U", "i"]}], "]"}], "]"}]}], "]"}],
  125.   ";"}]}], "Input",
  126. CellChangeTimes->{{3.47173087546875*^9, 3.471730959578125*^9}, {
  127.    3.4717309910625*^9, 3.471731047921875*^9}, 3.471731083171875*^9, {
  128.    3.471731233875*^9, 3.471731357046875*^9}, {3.47173148753125*^9,
  129.    3.471731487984375*^9}, 3.4717317109375*^9}]
  130. },
  131. WindowToolbars->"EditBar",
  132. WindowSize->{1272, 909},
  133. WindowMargins->{{-21, Automatic}, {Automatic, 103}},
  134. AutoIndent->True,
  135. LineIndent->3,
  136. Magnification:>FEPrivate`If[
  137.   FEPrivate`Equal[FEPrivate`$VersionNumber, 6.], 1.25, 1.25 Inherited],
  138. FrontEndVersion->"7.0 for Microsoft Windows (32-bit) (February 18, \
  139. 2009)",
  140. StyleDefinitions->"Default.nb"
  141. ]

复制代码
发表于 2010-1-6 16:57:16 | 显示全部楼层 来自 广东江门
Simdroid开发平台
  1. {Subscript[\[Sigma]f, 1], Subscript[\[Sigma]f, 2],
  2. Subscript[\[Sigma]f, 3], Subscript[\[Sigma]f, 4]} = {5.60, 15.82,
  3. 53.07, 98.09};
  4. {Subscript[\[Theta], 1], Subscript[\[Theta], 2], Subscript[\[Theta],
  5. 3], Subscript[\[Theta], 4]} = {1.97, 0.53, 0.26, 0.34};
  6. L = {1, 3.5, 3, 2.5};
  7. {Subscript[U, 0], Subscript[U, 4]} = {0, 120};
  8. Solve[Subscript[\[Theta], #]*((Subscript[U, #] -
  9. Subscript[\[Sigma]f, #]) Cosh[
  10. Subscript[\[Theta], #]*L[[#]]] + (Subscript[\[Sigma]f, #] -
  11. Subscript[U, # - 1]))/ Sinh[Subscript[\[Theta], #]*L[[#]]] ==
  12. Subscript[\[Theta], # +
  13. 1]*((Subscript[U, # + 1] -
  14. Subscript[\[Sigma]f, # +
  15. 1]) + (Subscript[\[Sigma]f, # + 1] - Subscript[U, #]) Cosh[
  16. Subscript[\[Theta], # + 1]*L[[# + 1]]] )/
  17. Sinh[Subscript[\[Theta], # + 1]*L[[# + 1]]] & /@ {1, 2,
  18. 3}, {Subscript[U, 1], Subscript[U, 2], Subscript[U, 3]}]
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-1-6 17:09:24 | 显示全部楼层 来自 华南理工大学
2# ,ljwxhlzp ,连For循环都没用,就直接解出Subscript[U, 1],Subscript[U, 2],Subscript[U, 3]来了。厉害啊。谢谢。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-1-8 16:24:39 | 显示全部楼层 来自 华南理工大学
本帖最后由 weichanghe2000 于 2010-1-8 16:28 编辑

一组 U0 和U4,可以用 2# ,ljwxhlzp 的方法,
但是当 U0={0,0,0,0,0,0,0,0,0,0},对应 U4={100,110,1120,130,140,150,160,170,180,190} 共10组 数据时,
怎样一次性解得 U1 U2 U3 呢?难道要手动 执行 10次 2# ,ljwxhlzp 的程序吗?ljwxhlzp  你能否将你的程序更改下,适合于 多组  U0 和U4 数据? 等待指教。谢谢。

这时方程和系数仍然为 下面的:

Cell[BoxData[{
RowBox[{
  RowBox[{
   RowBox[{"{",
    RowBox[{
     SubscriptBox["\[Sigma]f", "1"], ",",
     SubscriptBox["\[Sigma]f", "2"], ",",
     SubscriptBox["\[Sigma]f", "3"], ",",
     SubscriptBox["\[Sigma]f", "4"]}], "}"}], "=",
   RowBox[{"{",
    RowBox[{"5.60", ",", "15.82", ",", "53.07", ",", "98.09"}],
    "}"}]}], ";"}], "\n",
RowBox[{
  RowBox[{
   RowBox[{"{",
    RowBox[{
     SubscriptBox["\[Theta]", "1"], ",",
     SubscriptBox["\[Theta]", "2"], ",",
     SubscriptBox["\[Theta]", "3"], ",",
     SubscriptBox["\[Theta]", "4"]}], "}"}], "=",
   RowBox[{"{",
    RowBox[{"1.97", ",", "0.53", ",", "0.26", ",", "0.34"}], "}"}]}],
  ";"}], "\n",
RowBox[{
  RowBox[{"L", "=",
   RowBox[{"{",
    RowBox[{"1", ",", "3.5", ",", "3", ",", "2.5"}], "}"}]}],
  ";"}], "\n",
RowBox[{
  RowBox[{
   RowBox[{"{",
    RowBox[{
     SubscriptBox["U", "0"], ",",
     SubscriptBox["U", "4"]}], "}"}], "=",
   RowBox[{"{",
    RowBox[{"0", ",", "120"}], "}"}]}], ";"}], "\n",
RowBox[{"Solve", "[",
  RowBox[{
   RowBox[{
    RowBox[{"(",
     RowBox[{
      RowBox[{
       FractionBox[
        RowBox[{
         SubscriptBox["\[Theta]", "#1"], " ",
         RowBox[{"(",
          RowBox[{
           RowBox[{
            RowBox[{"(",
             RowBox[{
              SubscriptBox["U", "#1"], "-",
              SubscriptBox["\[Sigma]f", "#1"]}], ")"}], " ",
            RowBox[{"Cosh", "[",
             RowBox[{
              SubscriptBox["\[Theta]", "#1"], " ",
              RowBox[{
              "L", "\[LeftDoubleBracket]", "#1",
               "\[RightDoubleBracket]"}]}], "]"}]}], "+",
           RowBox[{"(",
            RowBox[{
             SubscriptBox["\[Sigma]f", "#1"], "-",
             SubscriptBox["U",
              RowBox[{"#1", "-", "1"}]]}], ")"}]}], ")"}]}],
        RowBox[{"Sinh", "[",
         RowBox[{
          SubscriptBox["\[Theta]", "#1"], " ",
          RowBox[{
          "L", "\[LeftDoubleBracket]", "#1",
           "\[RightDoubleBracket]"}]}], "]"}]], "\[Equal]",
       FractionBox[
        RowBox[{
         SubscriptBox["\[Theta]",
          RowBox[{"#1", "+", "1"}]], " ",
         RowBox[{"(",
          RowBox[{
           RowBox[{"(",
            RowBox[{
             SubscriptBox["U",
              RowBox[{"#1", "+", "1"}]], "-",
             SubscriptBox["\[Sigma]f",
              RowBox[{"#1", "+", "1"}]]}], ")"}], "+",
           RowBox[{
            RowBox[{"(",
             RowBox[{
              SubscriptBox["\[Sigma]f",
               RowBox[{"#1", "+", "1"}]], "-",
              SubscriptBox["U", "#1"]}], ")"}], " ",
            RowBox[{"Cosh", "[",
             RowBox[{
              SubscriptBox["\[Theta]",
               RowBox[{"#1", "+", "1"}]], " ",
              RowBox[{"L", "\[LeftDoubleBracket]",
               RowBox[{"#1", "+", "1"}], "\[RightDoubleBracket]"}]}],
             "]"}]}]}], ")"}]}],
        RowBox[{"Sinh", "[",
         RowBox[{
          SubscriptBox["\[Theta]",
           RowBox[{"#1", "+", "1"}]], " ",
          RowBox[{"L", "\[LeftDoubleBracket]",
           RowBox[{"#1", "+", "1"}], "\[RightDoubleBracket]"}]}],
         "]"}]]}], "&"}], ")"}], "/@",
    RowBox[{"{",
     RowBox[{"1", ",", "2", ",", "3"}], "}"}]}], ",",
   RowBox[{"{",
    RowBox[{
     SubscriptBox["U", "1"], ",",
     SubscriptBox["U", "2"], ",",
     SubscriptBox["U", "3"]}], "}"}]}], "]"}]}], "Input"]
回复 不支持

使用道具 举报

发表于 2010-1-9 17:18:02 | 显示全部楼层 来自 广东江门
  1. {Subscript[\[Sigma]f, 1], Subscript[\[Sigma]f, 2],
  2. Subscript[\[Sigma]f, 3], Subscript[\[Sigma]f, 4]} = {5.60, 15.82,
  3. 53.07, 98.09};
  4. {Subscript[\[Theta], 1], Subscript[\[Theta], 2], Subscript[\[Theta],
  5. 3], Subscript[\[Theta], 4]} = {1.97, 0.53, 0.26, 0.34};
  6. L = {1, 3.5, 3, 2.5};
  7. U0 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  8. U4 = {100, 110, 120, 130, 140, 150, 160, 170, 180, 190};
  9. (Reap@Do[
  10. Subscript[U, 0] = U0[[a]];
  11. Subscript[U, 4] = U4[[a]];
  12. Sow@Solve[
  13. Subscript[\[Theta], #]*((Subscript[U, #] -
  14. Subscript[\[Sigma]f, #]) Cosh[
  15. Subscript[\[Theta], #]*
  16. L[[#]]] + (Subscript[\[Sigma]f, #] - Subscript[
  17. U, # - 1]))/ Sinh[Subscript[\[Theta], #]*L[[#]]] ==
  18. Subscript[\[Theta], # +
  19. 1]*((Subscript[U, # + 1] -
  20. Subscript[\[Sigma]f, # +
  21. 1]) + (Subscript[\[Sigma]f, # + 1] - Subscript[
  22. U, #]) Cosh[
  23. Subscript[\[Theta], # + 1]*L[[# + 1]]] )/
  24. Sinh[Subscript[\[Theta], # + 1]*L[[# + 1]]] & /@ {1, 2,
  25. 3}, {Subscript[U, 1], Subscript[U, 2], Subscript[U, 3]}][[
  26. 1]], {a, 1, 10}])[[2, 1]]
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-1-9 18:00:59 | 显示全部楼层 来自 华南理工大学
本帖最后由 weichanghe2000 于 2010-1-11 18:05 编辑

5# ,ljwxhlzp ,厉害啊。Reap 和 Sow 函数 从来没用过,真的实现了我的效果。值得学习。
回复 不支持

使用道具 举报

发表于 2010-1-9 19:39:32 | 显示全部楼层 来自 广东江门
这儿的高手很多,在他们面前,我只是个初学者,看看他们的帖子,你自己就会写了。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 21:16 , Processed in 0.040527 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表