関数定義が Append[M,L 2 ] で呼び出されているとき、L 2は M の古い定義で M[ 2 ] を呼び出しているように見えますが、これは明らかに存在しません。
L に新しい、より大きなバージョンの M を使用させるにはどうすればよいですか?
M
ここで更新されることはありません。渡したパラメーターを変更Append
しません。配列の連結値を返します。
したがって、次のコード:
A={1,2,3}
B=Append[A,5]
B={1,2,3,5}
と で終わりA={1,2,3}
ます。A
変更されていません。
出力を分析するには、
0.3 // Output of x0 = Input["Enter x0"]. Note that the assignment operator returns the the assignment value.
2 // Output of a= Input["a"]
{0.3} // Output of M = {x0}
0.42 // Output of Print[L[1]]
{0.3,0.42} // Output of Append[M, L[1]]. This is the *return value*, not the new value of M
{0.3} // Output of Print[M]
Part::partw: Part 2 of {0.3`} does not exist. >> // M has only one element, so M[[2]] doesn't make sense
Part::partw: Part 2 of {0.3`} does not exist. >> // ditto
{0.3, 2 (1 - {0.3}[[2]]) {0.3}[[2]]} (* Output of Append[M, L[2]]. Again, *not* the new value of M *)
{0.3} // Output of Print[M]
ここでの簡単な修正は、 を使用することM=Append[M, L[1]]
です。
単一の for ループで実行するには:
xn=x0;
For[i = 0, i < n, i++,
M = Append[M, xn];
xn = A*xn (1 - xn)
];
より高速な方法はNestList[a*#*(1-#)&, x0,n]
、上記の Mark が述べた方法のバリエーションとして使用することです。
ここで、式a*#*(1-#)&
は基本的に無名関数です(#
はそのパラメーターであり、&
はそれを で囲む省略形ですFunction[]
)。このメソッドは、関数を 1 つの引数として取り、繰り返しのために ,NestList
から始まる関数を再帰的に適用します。x0
n
その他の小さな質問: 関数とリストに使用できる名前は何ですか? 名前にアンダースコアを使用できますか?
アンダースコアはありません。パターン マッチングに使用されます。それ以外の場合、変数にはアルファベットと特殊文字 (theta や all など) を含めることができますが、Mathematica で意味を持つ文字 (括弧/中括弧/大括弧、アットマーク、ハッシュ記号、アンパサンド、ピリオド、算術記号、アンダースコア) を含めることはできません。など)。これらにはドル記号が含まれる場合がありますが、ドル記号で始まらないことが望ましいです (これらは通常、システム変数とすべてのために予約されていますが、何も壊さずにドル記号で始まる変数を定義できます)。