我试图在MATLAB上同时解决非线性方程系统。我得到的错误是:"逗号分隔的列表扩展有一个不是单元格的数组的单元格语法"。
逗号分隔的列表扩展有一个数组的单元格语法不是单元格"。
该错误的截图附后。
我的代码如下
syms x y z T
x1=1;
x2=1;
x3=1;
x4=1;
y1=1;
y2=1;
y3=1;
y4=1;
z1=1;
z2=1;
z3=1;
z4=1;
c=1;
t1=1;
t21=1;
t31=1;
t41=1;
eq1 = ((x1 - x)^2 + (y1 - y)^2 + (z1 - z)^2 )^1/2 - (c * t1) + (c * T)==0;
eq2 = ((x2 - x)^2 + (y2 - y)^2 + (z2 - z)^2 )^1/2 - (c * t21) - (c*t1) + (c*T)==0;
eq3 = ((x3 - x)^2 + (y3 - y)^2 + (z3 - z)^2 )^1/2 - (c * t31) - (c*t1) + (c*T)==0;
eq4 = ((x4 - x)^2 + (y4 - y)^2 + (z4 - z)^2 )^1/2 - (c * t41) - (c*t1) + (c*T)==0;
sol = solve(eq1, eq2, eq3, eq4);
xSol = sol.x
ySol = sol.y
zSol = sol.z
TSol = sol.T
当我运行你的代码时,在我的MATLAB 2020a中没有错误。
然而,它返回一个空的解决方案。这是正常的,你的方程无法求解。检查 eq1
和 eq2
. 对于你的价值观,他们是。
eq1 = ((1 - x)^2 + (1- y)^2 + (1 - z)^2 )^1/2 - (1) + (1 * T)==0;
eq2 = ((1 - x)^2 + (1- y)^2 + (1 - z)^2 )^1/2 - (2) + (1 * T)==0;
这当然是没有办法的,就像你说的那样。
eq1= ((1 - x)^2 + (1- y)^2 + (1 - z)^2 )^1/2 + (1 * T)==1
eq2= ((1 - x)^2 + (1- y)^2 + (1 - z)^2 )^1/2 + (1 * T)==2
两者不能共存
有可能你使用的是MATLAB的旧版本,当解决方案不存在时,它就会发出警告,并且不允许你以后读取它,你的错误就发生在这里。