gpt4 book ai didi

list - 如何在 Erlang 中编写模拟?

转载 作者:行者123 更新时间:2023-12-01 13:07:02 26 4
gpt4 key购买 nike

我想像这样在 Erlang 中做一些数字的事情:
您有一个具有以下值的数组:

[2,3,4]
在每次迭代中,您计算
0.1 * [n-1] + 0.7 *[n] + 0.2 * [n+1]
这变成了 new [n] .
If n == 0 then [n-1] = 0. If [n] == length of array then [n] = 0.
所以我尝试一个例子:
[2,3,4]
计算:

0.1 * 0 + 0.7 * 2 + 0.2 * 3 = 2

0.1 * 2 + 0.7 * 3 + 0.2 * 4 = 3.1

0.1 * 3 + 0.7 * 4 + 0.2 * 0 = 3.1


所以 [2,3,4]变成 [2, 3.1, 3.1]经过一次迭代。
我知道如何用像 C 这样的非函数式语言来写这个。
但是我很难想象,如何在 Erlang 中做到这一点。
我找到了一些关于如何将文件读入列表的教程。所以这
不是问题。
如何生成不同的 Erlang 进程,每个进程都有一个列表元素?
我如何通过与“邻居”通信来进行计算,以便邻居知道他们的邻居一般在哪里,而无需指定每个邻居?
如何将数据收集到列表中?
最终,有可能在 Erlang 中解决这个问题吗?
谢谢你的帮助。

最佳答案

对原始问题的回答:

-module(simulation).
-export([start/0]).

f([N0, N1, N2]) ->
M0 = 0.7 * N0 + 0.2 * N1,
M1 = 0.1 * N0 + 0.7 * N1 + 0.2 * N2,
M2 = 0.1 * N1 + 0.7 * N2,
[M0, M1, M2].

iterate(List, Iterations) ->
iterate(1, List, Iterations).

iterate(_Iteration, List, 0) ->
List;
iterate(Iteration, List = [N0, N1, N2], MoreIterations) ->
io:format("~.5f ~.5f ~.5f~n", [N0, N1, N2]),
NextList = f(List),
iterate(Iteration + 1, NextList, MoreIterations-1).

start() ->
iterate([2.0, 3.0, 4.0], 10),
ok.

任意列表长度的通用答案:
-module(simulation2).
-export([start/0]).

f(Prev, Current, Next) ->
0.1 * Prev + 0.7 * Current + 0.2 * Next.

transform(List) ->
transform(0.0, List, 0.0).

transform(_First, [], _Last) ->
[];
transform(First, [X], Last) ->
Y = f(First, X, Last),
[Y];
transform(First, [X1, X2 | More], Last) ->
Y1 = f(First, X1, X2),
[Y1 | transform(X1, [X2 | More], Last)].

iterate(List, Iterations) ->
iterate(1, List, Iterations).

iterate(_Iteration, List, 0) ->
List;
iterate(Iteration, List, MoreIterations) ->
io:format("~p~n", [List]),
NextList = transform(List),
iterate(Iteration + 1, NextList, MoreIterations-1).

start() ->
iterate([1.0, 2.0, 3.0, 4.0, 5.0], 10),
ok.

关于list - 如何在 Erlang 中编写模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com