如何显示带有双值而不是符号的函数?

时间:2019-04-13 20:42:25

标签: matlab

我希望函数P看起来像这样:

-1 + 0.6366*(x+pi/2) + (-0.000)*(x + pi/2)*(x)

现在看起来像这样

(5734161139222659*x)/9007199254740992 + (5734161139222659*pi)/18014398509481984 - (8131029572207409*x*(x + pi/2))/324518553658426726783156020576256 - 1.

如何转换S数组以使值不是符号?

syms P x
f = sin(x);
f = matlabFunction(f);
X = [-pi/2, 0, pi/2];
Y = f(sym(X));
P = MetN(X,Y,x)
P = matlabFunction(P);
function [P] = MetN(X,Y,x)

    n = length(X);
    for i = 1:n
        A(i,1) = 1;
    end
    for i = 2:n
        for j = 2: n
            if i >= j

                produs = 1;
                for k =1:j-1
                    produs = produs * (X(i) - X(k));
                end
                A(i,j) = produs;

            end
        end
    end
    S = SubsAsc(A, Y);
    S = double(S);
    disp(S);
    sym produs
    P = double(sym(S(1)));
    for i = 2:n
        produs = 1;
        for j = 1:i-1
            produs = produs * (x - sym(X(j)));
        end
        disp(produs);
        P = P + double(S(i))*produs;
    end

end
function [x] = SubsAsc(A,b)

    n = length(b);
    x(1) = (1/A(1,1))*b(1);

    for k = 2:n

        s = 0;
        for j = 1:k-1
            s = s + A(k,j)*x(j);
        end

        x(k) = (1/A(k,k))*(b(k)-s);
    end
end

1 个答案:

答案 0 :(得分:0)

您当前拥有的输出是因为符号使用精确算术,因此将其输出为有理数(因此为丑数)。

要使用小数输出P,请使用vpa()。例如,输出P使用小数到5位有效数字

>> vpa(P, 5)

ans =
0.63662*x - 2.5056e-17*x*(x + 1.5708)

但是,这也将围绕pi,因此您在这里无法真正拥有两全其美的优势。