Function 将命令列表转换为函数

Function 将命令列表转换为函数,function,wolfram-mathematica,Function,Wolfram Mathematica,我做了这个 f[x_] := x - 2 x0 = 999.; imax = 5; Module[{i, x}, x[0] = x0; For[i = 0, i < imax, x[i + 1] = x[i] - f[x[i]]/f'[x[i]]; Print[x[i]]; i++]] f[x_]:=x-2 x0=999。;imax=5; 模[{i,x},x[0]=x0; 对于[i=0,i

我做了这个

f[x_] := x - 2
x0 = 999.; imax = 5;
Module[{i, x}, x[0] = x0;
 For[i = 0, i < imax, x[i + 1] = x[i] - f[x[i]]/f'[x[i]];
  Print[x[i]];
  i++]]
f[x_]:=x-2
x0=999。;imax=5;
模[{i,x},x[0]=x0;
对于[i=0,i

我想把它转换成牛顿-拉普森函数。我需要能够输入函数F[x]、初始猜测和imax。

Mathematica就是这么简单:

newtonraph = Function[{f,x0,imax},Module[{i,x}, 
                       x[0] = x0;
                       For[i=0, i < imax, x[i+1] = x[i] - f[x[i]]/f'[x[i]];
                         Print[x[i]];
                         i++
                       ];
                      ];
                     ];

稍微数学化一点:

newt[f_, x0_, imax_] := NestList[# - f@#/f'@# &, x0, imax];
f[x_] := x - 2
x0 = 999; imax = 5; 
newt[f, x0, imax]
(*
-> {999, 2, 2, 2, 2, 2}
*)

不,不要教初学者在Mathematica中使用循环,不要教他们在Mathematica中使用循环,在有些情况下(如本例),有更好的(性能、简洁性、功能)方法,以及初学者应该学习的方法,而不是学习如何在Mathematica中编写C(或任何其他命令式语言)。我的重点是“函数”部分。我应该更正他的代码,不过,更数学化一点,你是对的。
newt[f_, x0_, imax_] := NestList[# - f@#/f'@# &, x0, imax];
f[x_] := x - 2
x0 = 999; imax = 5; 
newt[f, x0, imax]
(*
-> {999, 2, 2, 2, 2, 2}
*)