34、为本节中描述的 showWalk 函数编写一维情况的规则。然后编写一个额外的规则来处理多个一维随机游走。
一维情况规则:
```mathematica
showWalk[coords : {
{_} ..}] := ListLinePlot[coords, AspectRatio → Automatic]
处理多个一维随机游走规则:
showWalk[coords : {
{
{_} ..} ..}] := ListLinePlot[coords, AspectRatio → Automatic]
35、这里有一个规则,用于交换列表中每对表达式的顺序。它在第一个例子中运行正常,但在第二个例子中失败了。 输入[1]:= { {a, b}, {c, d}, {e, f}} /. {x_, y_} -> {y, x} 输出[1]= { {b, a}, {d, c}, {f, e}} 输入[2]:= { {a, b}, {c, d}} /. {x_, y_} -> {y, x} 输出[2]= { {c, d}, {a, b}} 解释哪里出了问题,并重新编写这个规则来纠正这种情况,即让第二个例子返回 { {b, a}, {d, c}}。
下面是给定的【文本内容】:
原规则失败的原因是它没有正确匹配列表中的每一对元素。原规则可能将整个列表作为一个整体进行匹配,而不是分别匹配列表中的每一对元素。
重新编写的规则可以使用 ReplaceAll
函数结合 List
模式来确保分别匹配每一对元素。
以下是修正后的规则:
{
{a, b}, {c, d}} /. List[x_, y_] -> List[y, x]
这个规则会分别匹配列表中的每一对元素,并交换它们的顺序,从而得到正确的结果:
{
{b, a}, {d, c}}
36、给定一个3×3矩阵,有一个规则用于交换矩阵第二列和第三列的元素。输入为 mat = { {a, b, c}, {d, e, f}, {g, h, i}};规则为 mat /. {x_, y_, z_} -> {x, z, y} // MatrixForm。解释哪里出了问题,并重新编写规则以正确交换第二列和第三列。
原规则出错原因是它对矩阵的每一行进行了元素 交换 ,而不是对 列 进行交换。正确规则应该对矩阵的每一行应用交换操作。
重新编写的规则如下:
mat = {
{a, b, c}, {d, e, f}, {g, h, i}};
mat /. {row_List} :> {row[[1]], row[[3]], row[[2]]} // MatrixForm
37、使用模式匹配提取以下多项式的所有负解:(x^9 + 3.4x^6 - 25x^5 - 213x^4 - 477x^3 + 1012x^2 + 111x - 123),然后提取所有实解(即非复数解)。
可以使用以下步骤解决此问题:
- 首先,求多项式的所有解。
- 然后,使用模式匹配提取负解和实解。
在 Mathematica 中,代码如下:
solutions = Solve[
x^9 + 3.4 x^6 - 25 x^5 - 213 x^4 - 477 x^3 + 1012 x^2 + 111 x - 123 == 0,
x,
Reals
];
negativeSolutions = Cases[solutions, {x -> xval_ /; xval < 0}];
realSolutions = Cases[solutions, {x -> xval_ /; Element[xval, Reals]}];
这里, negativeSolutions
是负解, realSolutions
是实解。
38、创建一个使用重复替换的重写规则,以“展开”列表中的嵌套列表。示例输入为 unNest[{ {α, α, α}, {α}, { {β, β, β}, {β, β}}, {α, α}}],输出为 {α, α, α, α, β, β, β, β, β, α, α}。
可以使用以下规则来实现列表的“展开”:
rules = {x_List :> Flatten[x]}
然后使用
ReplaceRepeated[{
{α, α, α}, {α}, {
{β, β, β}, {β, β}}, {α, α}}, rules]
进行重复替换操作,就能得到展开后的列表。