如何在Mathematica中编写Euler函数?

如何在Mathematica中编写Euler函数?,math,wolfram-mathematica,Math,Wolfram Mathematica,我编写了一个Euler函数,但误读了指令,所以现在我必须制作一个新的,但我无法理解它 我制作了以下自动Euler函数 f[x_, y_] := -x y^2; x0 = 0; y0 = 2; xend = 2; steps = 20; h = (xend - x0)/steps // N; x = x0; y = y0; eulerlist = {{x, y}}; For[i = 1, i <= steps, y = f[x, y]*h + y; x = x + h; eulerl

我编写了一个Euler函数,但误读了指令,所以现在我必须制作一个新的,但我无法理解它

我制作了以下自动Euler函数

f[x_, y_] := -x y^2;
x0 = 0;
y0 = 2;
xend = 2;
steps = 20;
h = (xend - x0)/steps // N;
x = x0;
y = y0;
eulerlist = {{x, y}};
For[i = 1, i <= steps, y = f[x, y]*h + y;
  x = x + h;
  eulerlist = Append[eulerlist, {x, y}];
  i++
]
Print[eulerlist]

我似乎没有进一步的了解。

不清楚您在问什么,但您是否希望能够输入

Euler[y, 2, -x y^2, {x, 0, 2}, 20] 
得到

{{0,2},{0.1,2.},{0.2,1.96},{0.3,1.88317},{0.4,1.77678},{0.5,1.6505},{0.6,1.51429},{0.7,1.37671},{0.8,1.24404},{0.9,1.12023},{1.,1.00728},{1.1,0.905822},{1.2,0.815565},{1.3,0.735748},{1.4,0.665376},{1.5,0.603394},{1.6,0.548781},{1.7,0.500596},{1.8,0.457994},{1.9,0.420238},{2.,0.386684}}
然后,您需要编写如下函数定义:

Euler[y0_, f_, {x0_, xend_}, steps_Integer?Positive] := (* body *)
请注意,下划线表示模式,
:=
表示延迟求值,模式规范为
Integer?正值

至于函数的主体——哦,天哪,你能选择一种不太数学化的方法吗?也许不是。在Mathematica中,过程循环和追加几乎从来都不是做任何事情的最佳方式

这里有一个更好的解决方案

Euler[y_, y0_, f_, {x_, x0_, xend_}, steps_Integer?Positive] :=
 With[{h = N[(xend - x0)/steps], ff = Function[{x, y}, f]}, 
  NestList[{#[[1]] + h, ff[#[[1]], #[[2]]]*h + #[[2]]} &, {x0, y0}, 
   steps]]

Euler[y, 2, -x y^2, {x, 0, 2}, 20]

 {{0, 2}, {0.1, 2.}, {0.2, 1.96}, {0.3, 1.88317}, {0.4, 
  1.77678}, {0.5, 1.6505}, {0.6, 1.51429}, {0.7, 1.37671}, {0.8, 
  1.24404}, {0.9, 1.12023}, {1., 1.00728}, {1.1, 0.905822}, {1.2, 
  0.815565}, {1.3, 0.735748}, {1.4, 0.665376}, {1.5, 0.603394}, {1.6, 
  0.548781}, {1.7, 0.500596}, {1.8, 0.457994}, {1.9, 0.420238}, {2., 
  0.386684}}

如果您想要输出
Euler[y,2,-x y^2,{x,0,2},20]
,那么将其输入笔记本是最快的方法。

嗨,谢谢您的回答。我想准确地键入“Euler[y,2,-xy^2,{x,0,2},20]”和no#,因为Euler[INPUT]在任何时候都应该是不同的。ff=Function[{x,y},f]
?@Mr.Wizard-OP希望能够在函数调用中键入
-xy^2
而不是纯函数。因此,要将其放入
NestList
定义中,您需要将其转换为纯函数,该函数通过函数调用中传递的符号变量定义(在本例中为
x
y
)。所以
Euler[p,2,-qp^2,{q,0,2},20]
给出了相同的结果。明白了吗?谢谢。我知道我遗漏了什么。如果你想植入Nestwhilelist,那你该怎么办?嗯。。。为什么会有4张反对票?我遗漏了什么吗?在得到答案后,请不要删除问题中的代码。请不要编辑没有意义的标题并添加
(已解决)
。我们知道问题已经解决了,因为你有答案,你已经接受了。@yoda-问题的原始版本几乎无法理解。@yoda奇怪,我编辑了正文,但没有对标题做任何修改。然而,我看到了归属于我的头衔的变化。我想有两个编辑彼此很接近。
Euler[y_, y0_, f_, {x_, x0_, xend_}, steps_Integer?Positive] :=
 With[{h = N[(xend - x0)/steps], ff = Function[{x, y}, f]}, 
  NestList[{#[[1]] + h, ff[#[[1]], #[[2]]]*h + #[[2]]} &, {x0, y0}, 
   steps]]

Euler[y, 2, -x y^2, {x, 0, 2}, 20]

 {{0, 2}, {0.1, 2.}, {0.2, 1.96}, {0.3, 1.88317}, {0.4, 
  1.77678}, {0.5, 1.6505}, {0.6, 1.51429}, {0.7, 1.37671}, {0.8, 
  1.24404}, {0.9, 1.12023}, {1., 1.00728}, {1.1, 0.905822}, {1.2, 
  0.815565}, {1.3, 0.735748}, {1.4, 0.665376}, {1.5, 0.603394}, {1.6, 
  0.548781}, {1.7, 0.500596}, {1.8, 0.457994}, {1.9, 0.420238}, {2., 
  0.386684}}