我正在尝试使用MATLAB的符号工具箱来解决以下方程组。给出以下三个方程式
w+x+y+z==k1;
(w^2)+(x^2)+(y^2)+(z^2)==k2;
w*x*y*z==k3;
其中k1
,k2
和k3
是常量而w
,x
,y
和z
是变量。目标是仅在
p
和q
p==w+z;
q==(w*z)-(x*y);
也就是说,w
,x
,y
,z
应该在p
和q
等式中被消除以获得单个函数,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)
但输出是w
,x
等,而不是一个等式(根据变量p
和q
以及常量k1
,k2
和k3
)。如何实现这个单函数方程?
答案 0 :(得分:0)
运行代码
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.q
是k1
,k2
,k3
和p
的函数只有,所以你有q=f(k1,k2,k3,p)
。您可以使用q
轻松查看symvar(S.q)
仅依赖于这些变量,[ k1, k2, k3, p]
会返回f=S.q-q
。这就是你想要的,你总是可以f(k1,k2,k3,p,q)=0
得到类似q
的东西。
基本上,事实证明w
的解决方案不是x
,y
,z
或S
,所以你不要我不得不担心解决方案S=solve(eqn1,eqn2,eqn3,eqn4,eqn5,w,x,y,z,q)
的那些部分。您可以通过执行k1
来强制执行此操作,k2
会根据k3
,p
,docker build --build-arg APP_SRC=$BUILD_CONTEXT -y tag .
和$APP_SRC
来编写所有变量。
答案 1 :(得分:0)
我将提取一个函数,它将得到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