如何修复乘数和 eqn(x) 之间的 link?

How can I fix the link between the multiplier and eqn(x)?

我现在被 matlab 中的一个问题困住了。我所做的是我有一个方程式传递给另一个函数,该函数通过二分法工作。

但是我有一个我正在尝试实现的乘法器,它以某种方式导致函数崩溃。

在我引入乘数之前,它一切正常,我尝试通过手动输入乘数来分解它,但它没有用

P_{1} = 0.6;
P_{2} = 0.2;
P_{3} = 0.2;
a_1 = 4/3;
a_2 = -7/3;
b_1 = -1/3;
b_2 = 4/3;
persistent multiplier
multiplier = exp(a_1 * 44 + a_2 * 14 + 0);
eqn = @(x) ((a_1 * x + b_1)^a_1) * ((a_2 * x + b_2)^a_2) * x ...
-(P_{1}^a_1) * (P_{2}^a_2) * P_{3} * multiplier; 
Q_{3} = Bisectionmethod(a_1, a_2, b_1, b_2, eqn);

这里是二分法的计算部分。

x_lower = max(0, -b_1 / a_1);
x_upper = -b_2 / a_2;
x_mid = (x_lower + x_upper)/2;
Conditional statement encompassing the method of bisection
while abs(eqn(x_mid)) > 10^(-10)
if (eqn(x_mid) * eqn(x_upper)) < 0
    x_lower = x_mid;
else
    x_upper = x_mid;
end
x_mid = (x_lower + x_upper)/2;
end

根据您提供的信息,这是我得出的结论

function Q = Whosebug
    persistent multiplier

    P{1} = 0.6;
    P{2} = 0.2;
    P{3} = 0.2;
    a1 = 4/3;
    a2 = -7/3;
    b1 = -1/3;
    b2 = 4/3;

    multiplier = exp(a1 * 44 + a2 * 14 + 0);
    eqn = @(x) ((a1 .* x + b1).^a1) .* ((a2 .* x + b2).^a2) .* x -(P{1}.^a1) .* (P{2}.^a2) .* P{3} .* multiplier; 
    Q{3} = Bisectionmethod(eqn, max([0, -b1/a1]), -b2/a2, 1E-10);
end

function XOut = Bisectionmethod(f, xL, xH, EPS)
    if sign(f(xL)) == sign(f(xH))
        XOut = [];
        error('Cannot bisect interval because can''t ensure the function crosses 0.')
    end

    x = [xL, xH];

    while abs(diff(x)) > EPS
        x(sign(f(mean(x))) == sign(f(x))) = mean(x);
    end

    XOut = mean(x);
end