我试图从一篇论文中重现结果,我给出了一个链接以避免写下所有需要的数学:
更具体地说,我遇到的问题是图 3 的情节。在给定两个变量 m 和 M 的情况下,该图在 z 轴上给出了方程 3 的结果。需要的其他方程是 5、6、7,在方程 6 之前的段落中还有两个小方程。要查看 Xi 是什么,请查看 4.2 部分。所有需要的变量值都在绘图之前给出。
现在说到重点,我试图在 matlab 中创建完全相同的情节,但我失败了,我需要帮助,因为我的 matlab 技能不太好。
我有一个脚本文件,其中包含以下内容:
w1 = 1000;
w2 = 1000;
w3 = 10;
B = 2000;
n = 20;
r_l = 60;
s_l = 20;
g = 10;
a_f = 5000;
b = 20;
vx = 0 : 1 : 500;
vy = 0 : 1 : 90;
[x,y] = meshgrid(vx,vy);
z = payoff(w1, w2, w3, y, r_l, n, g, B, b, x, s_l, a_f);
h = surfc(x,y,z);
set(h, 'edgecolor','none')
xlabel('Firewall Midpoint (M)')
ylabel('Number of zombies')
zlabel('Attackers payoff')
view(-41,11);
Payoff 是一个函数,如下所示:
function out = payoff(w1, w2, w3, m, r_l, n, g, B, b, M, s_l, a_f)
r_a = a_f./ m;
r_a_dash = r_a.*(1-Fx(r_a, b, M, B));
r_l_dash = r_l.*(1-Fx(r_l, b, M, B));
v_b = ( m .* r_a_dash ) ./ ( n .* r_l_dash + m .* r_a_dash );
v_n = normcdf(( g .* ( n .* r_l_dash + m .* r_a_dash ) ./ B ), r_l, s_l);
out = w1 * v_b + w2 * v_n - w3 * m;
Fx 又是一个执行以下操作的函数:
function out = Fx(x,b,M,B)
out=1./(1+exp(-b.*(x-M)./B));
我不知道错误到底出在哪里,但我得到的情节如下,与论文中的情节不同。
论文中的图形沿Firewall Midpoint
轴呈 U 形曲线,而我的图形是单调递增的。
谁能发现我有任何错误?提前致谢。