在matlab中使用向量“解决”命令

时间:2017-12-01 11:43:21

标签: matlab vector solver

我对下面显示的等式有疑问。我想在t2中输入一个向量,并从t2中的不同值中找到方程的根。

t2=[10:10:100]
syms x
p = x^3 + 3*x - t2;
R = solve(p,x)
R1 = vpa(R)

3 个答案:

答案 0 :(得分:1)

轻松!请勿使用syms并使用the general formula

t2 = [10:10:100];

%p = x^3 + 3*x - t2;
a = 1;
b = 0;
c = 3;
d = -t2;

D0 = b*b - 3*a*c;
D1 = 2*b^3 - 9*a*b*c + 27*a^2*d;
C  = ((D1+sqrt(D1.^2 - 4*D0.^3))/2).^(1/3);

C1 = C*1;
C2 = C*(-1-sqrt(3)*1i)/2;
C3 = C*(-1+sqrt(3)*1i)/2;

f  = -1/(3*a);
x1 = f*(b + C1 + D0./C1);
x2 = f*(b + C2 + D0./C2);
x3 = f*(b + C3 + D0./C3);

b = 0开始,您可以稍微简化一下:

% ... polynomial is the same

D0 = -3*a*c;
D1 = 27*a^2*d;

% ... the different C's are the same

f  = -1/(3*a);
x1 = f*(C1 + D0./C1);
x2 = f*(C2 + D0./C2);
x3 = f*(C3 + D0./C3);

答案 1 :(得分:0)

试验>> syms x p

试验>> EQUS = p == x ^ 3 + 3 * x - t2

未知您想要求解方程式或系统。 假设您想要解决一个系统。

试验>> solx = solve(Eqns,x)

但是,我不认为你能找到根源。 你可以解决一个方程式。

试验>> solx = solve(Eqns(3),x)

据我所知,Maple可以做到这一点。

答案 2 :(得分:0)

一般来说,应该避免循环,但这是目前唯一能解决我脑力的解决方案。

    t2=[10:10:100];
    pp=repmat([1,0,3,0],[10,1]);
    pp(:,4)=-t2;
    for i=1:10
    R(i,:) =roots(pp(i,:))';
    end