gpt4 book ai didi

Julia 循环更新变量

转载 作者:行者123 更新时间:2023-12-04 20:42:43 26 4
gpt4 key购买 nike

我有一段代码可以对值(value)函数迭代进行编程。代码是从 Matlab 翻译过来的。第一次迭代运行良好,但在第二次迭代中,旧值函数在某个点被错误地更新,尽管第二次迭代仍然产生来自 matlab 的等效结果。

首先,我在这里声明变量:

sigma = 1.5;
delta = 0.1;
beta = 0.95;
alpha = 0.30;
ks = 1.0;
csy = 0.2;
kmin = 0.1*ks;
kmax = 1.1*ks;
nbk = 20;
devk = (kmax-kmin)/(nbk-1);
k = linspace(kmin,kmax,nbk)';
v0 = zeros(nbk,1);
v0 = (csy*k.^alpha).^(1-sigma);
v0 = v0';
v = zeros(nbk,1);
ik1 = zeros(nbk,1);
iter = 1;
crit = 1;
tol = 1e-6;

其次,我执行这个(这是一个 while 循环),但我更喜欢一个接一个地执行它:

 for i=1:nbk
imin = max(ceil(((1-delta)*k[i]-kmin)/devk)+1.0,1);
imax = min(floor((k[i]^alpha+(1-delta)*k[i]-kmin)/devk)+1.0,nbk);

imin=trunc(Int, imin);
imax=trunc(Int, imax);
c = k[i]^alpha+(1-delta)*k[i]-k[imin:imax];
u = (c.^(1-sigma)-1)/(1-sigma);
(v[i],itmp)= findmax(u+beta*v0[imin:imax]);
ik1[i] = imin-1+itmp;
end;

v0 = v;

第一次运行第二部分会正确打印 v 和错误:

[-9.41322; -6.19362; -4.35414; -3.01282; -1.95198; -1.07545; -0.330322; 0.316098; 0.885574; 1.39337; 1.85067; 2.29198; 2.69438; 3.06364; 3.40432; 3.72013; 4.0141; 4.28875; 4.54618; 4.79853]
error:5.124021319754114

第二次运行它会导致错误,因为现在 v0 变成了 I don't know why equal to v (尽管 v 仍然正确生成,就像在 Matlab 中一样):

[-7.06807; -4.7177; -3.24724; -2.16729; -1.30218; -0.578569; 0.0429673; 0.586699; 1.09022; 1.54641; 1.98317; 2.37955; 2.7416; 3.07412; 3.38098; 3.66532; 3.92974; 4.18466; 4.42981; 4.66936]
error:0.0

所以误差为零,经过两次迭代应该不是这样。有什么想法吗?

最佳答案

当您设置 v0 = v 时,两个变量都引用内存中的同一区域,即,当您尝试修改一个时,您实际上同时修改了两个变量。

使用copy!(v0, v)v的内容复制到v0中。然后可以独立修改数组。

关于Julia 循环更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874442/

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