0

我需要解决以下等式:

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 的 0.001% 时取 new_val 的真值。

我有关于使用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% 以内。

4

1 回答 1

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

但我不确定这是否是你想要的......

于 2013-05-22T09:10:11.523 回答