0

我现在陷入了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
4

1 回答 1

0

根据您提供的信息,这是我想出的

function Q = Stackoverflow
    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
于 2015-07-18T01:06:36.827 回答