是否可以从Mathematica中的其他笔记本调用函数,如果是这样,我该怎么办?
我编写的代码描绘了Sierpinski分形.由于它使用递归,因此速度非常慢.你们中的任何人都知道如何在没有递归的情况下编写相同的代码以使其更快吗?这是我的代码:
midpoint[p1_, p2_] := Mean[{p1, p2}]
trianglesurface[A_, B_, C_] := Graphics[Polygon[{A, B, C}]]
sierpinski[A_, B_, C_, 0] := trianglesurface[A, B, C]
sierpinski[A_, B_, C_, n_Integer] :=
Show[
sierpinski[A, midpoint[A, B], midpoint[C, A], n - 1],
sierpinski[B, midpoint[A, B], midpoint[B, C], n - 1],
sierpinski[C, midpoint[C, A], midpoint[C, B], n - 1]
]
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经用混沌游戏方法编写了它,以防有人感兴趣.谢谢你的好答案!这是代码:
random[A_, B_, C_] := Module[{a, result},
a = RandomInteger[2];
Which[a == 0, result = A,
a == 1, result = B,
a == 2, result = …
Run Code Online (Sandbox Code Playgroud) 我正在研究一种计算任何n*n矩阵的行列式的算法,这是我的代码:
Laplace[matrix_List] := Module[{a = matrix, newmatrix, result = 0},
If [Length[a] == 1, result = Total[Total[a]],
For [i = 1, i <= Length[a], i++,
newmatrix = Drop[a, {i}, {1}];
result = result + (-1)^(i + 1) *
Total[Total[Take[a, {i}, {1}]]]*
Laplace[newmatrix];
]
]; result]
Run Code Online (Sandbox Code Playgroud)
它以递归方式工作,它适用于2*2矩阵(我已使用Det []进行检查),但它不适用于任何高于2的矩阵!
我想自己解决这个问题 - 我想自己实现这个,而不是简单地使用Det
- 但如果有人能解释这里的递归有什么问题我会很感激吗?