【问题标题】:Algebraic simultaneous equations using symbolic toolbox in MATLAB在 MATLAB 中使用符号工具箱的代数联立方程
【发布时间】:2015-11-11 16:14:28
【问题描述】:

我正在尝试使用 MATLAB 的符号工具箱来求解以下方程组。给定以下三个等式

w+x+y+z==k1;
(w^2)+(x^2)+(y^2)+(z^2)==k2;
w*x*y*z==k3;

其中k1k2k3 是常量,wxyz 是变量。目标是仅在

p==w+z;
q==(w*z)-(x*y); 

也就是说,wxyz 应该在 pq 方程中被消除以获得单个函数 f(p,q,k1,k2, k3)。

我以如下方式使用代码:

syms w x y z p q
eqn1 = w+x+y+z==k1;
eqn2 = w*x*y*z==k2;
eqn3 = (w^2)+(x^2)+(y^2)+(z^2)==k3;
eqn4 = w+z-p==0;
eqn5 = (w*z)-(x*y)-q==0;
solve(eqn1,eqn2,eqn3,eqn4,eqn5)

但输出是针对wx 等而不是一个方程(就变量pq 以及常数k1k2k3 而言) .这个单函数方程如何实现?

【问题讨论】:

  • solve(eqn1,eqn2,eqn3,eq4,eqn5,p,q) 工作吗?

标签: matlab symbolic-math


【解决方案1】:

我要提取一个函数,它会得到 p 并给出 q。

假设我们有 (k1,k2,k3,p) 然后我们想要 q。

所以方程是:

[k1,k2,k3,p]=f(w,x,y,z);

我们想要反转 f 函数。这意味着我们有 [k1,k2,k3,p] 并且我们想要 [x,y,z,w](4 个方程和 4 个未知变量)。然后我们可以使用 [x,y,z,w] 来计算 q。

使用以下代码。请记住,没有单一的答案。方程有 2 个答案。

    clc
    clear all

    syms w x y z p q k1 k2 k3
    eqn1 = w+x+y+z-k1;
    eqn2 = w*x*y*z-k2;
    eqn3 = (w^2)+(x^2)+(y^2)+(z^2)-k3;
    eqn4 = w+z-p;

    s=solve(eqn1,eqn2,eqn3,eqn4);
    x=s.x;
    y=s.y;
    z=s.z;
    w=s.w;

    q=(w.*z)-(x.*y); 

    %Removing repeated answers
    i=1;
    while i<=length(q)
        v=(simplify(q(i)-q)==0)&(1:length(q)~=i).';
        if any(v)
            q(v)=[];
            i=1;
        else
            i=i+1;
        end
    end
    %Displaying unique answers
    for i=1:length(q)
        fprintf('Answer %d\nq=%s\n\n',i,char(q(i)));
    end

【讨论】:

    【解决方案2】:

    运行你的代码

    syms w x y z p q k1 k2 k3
    eqn1 = w+x+y+z==k1;
    eqn2 = w*x*y*z==k2;
    eqn3 = (w^2)+(x^2)+(y^2)+(z^2)==k3;
    eqn4 = w+z-p==0;
    eqn5 = (w*z)-(x*y)-q==0;
    S=solve(eqn1,eqn2,eqn3,eqn4,eqn5)
    

    返回(至少在 R2015a 上)

    S = 
        q: [8x1 sym]
        w: [8x1 sym]
        x: [8x1 sym]
        y: [8x1 sym]
        z: [8x1 sym]
    

    每个都有8个字段(对应8个解决方案),S.qk1k2k3p的函数,所以你有q=f(k1,k2,k3,p)。您可以通过使用返回[ k1, k2, k3, p]symvar(S.q) 轻松看到q 仅依赖于这些变量。这就是你想要的,你总是可以通过f=S.q-q 得到类似f(k1,k2,k3,p,q)=0 的东西。

    基本上,事实证明q 的解决方案不是wxyz,因此您不必担心解决方案的那些部分S。您可以通过执行S=solve(eqn1,eqn2,eqn3,eqn4,eqn5,w,x,y,z,q) 来强制执行此操作,这将按照k1k2k3p 写入所有这些变量。

    【讨论】:

    • 谢谢。不知何故,q 没有出现。只有一个查询 - 如果我们必须通过代入 k1=1、k2=2、k3=3 来简化 q 的表达式,该怎么做?
    • 要么在开始时将它们定义为 1、2 和 3,要么使用 subs(S.q,{k1 k2 k3},{1 2 3}) 是你只想替换一组 k 值,或者 sq=matlabFunction(S.q);sq(1,2,3,p) 如果你想替换很多不同的k's 和p's。
    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多