我需要解决以下等式:
old_val = 0.4*U_Z/(log(5/new_val));
其中
new_val = 0.11*1.5e-5./old_val;
为了计算new_val和old_val,我需要编写一个计算new_val和old_val的循环,然后获取new_val的真值,就像new_val是前一个new_val的0.001%一样。
我有关于使用while循环执行此操作,我认为可能会有效。不过,我对如何启动while循环感到有点困惑,我应该:
while abs((new_val(i) - val_prev(i))) > 0.000001
old_val = 0.4*W(i)/(log(5/new_val));
dummy = new_val(i);
new_val = 0.11*1.5e-5./old_val;
val_prev(i) = dummy;
end
或
while abs((new_val(i) - val_prev(i))) / abs(val_prev(i)) > 0.000001
old_val = 0.4*W(i)/(log(5/new_val));
dummy = new_val(i);
new_val = 0.11*1.5e-5./old_val;
val_prev(i) = dummy;
end
其中
val_prev = new_val*1.1;
用于启动迭代。 while循环用于继续运行循环,直到new_val和val_prev在彼此的0.001%之内。
答案 0 :(得分:0)
如果我理解正确,您想要为x
:
x = 0.4*U_Z/log( 5/(0.11*1.5e-5./x) )
U_Z
有些不变。如果这确实是你想要做的,我会把它重写为
x * log( 5*x/1.65e-6 ) - 0.4*U_Z == 0
并像这样解决:
x_sol = fzero(@(x) x .* log( 5*x/1.65e-6 ) - 0.4*U_Z, 1)
或者,如果你坚持,使用你自己的Newton-Raphson方案:
fx = @(x) x .* log( 5*x/1.65e-6 ) - 0.4*U_Z
dfdx = @(x) log(x) + 15.9242;
x = 1;
f = fx(x);
while abs(f) > 1e-6
x = x-f/dfdx(x);
f = fx(x);
end
但我不确定这是不是你想要的......