我试图在MATLAB中解决这组方程式,并得到一个空的sym
对象:
equations = {'I2B+I2EQAB=I22B+I2EQBC',...
'I2A=I2EQAB+I2EQAC+I22A',...
'I2C+I2EQBC+I2EQAC=I22C',...
'I22B=IZB+IC1B',...
'IZB=IC2B+IZBB',...
'I22C=-I2C*Z2C*YC/2+IZC',...
'IZC=IC2C+IZCC',...
'I22A=IC1A+IZA1',...
'IC4A+IZA2=IZBB+IZCC',...
'IZB*Z2LB+IC2B*2/YB=IC1B*2/YB',...
'I2C*Z2C=-IC2C*2/YC+IZC*Z2LC',...
'IZA1*m*Z2LA+IC2A*2/(m*YA)=IC1A*2/(m*YA)',...
'IC4A*2/((1-m)*YA)=IC2A*2/(m*YA)+IZA2*(1-m)*Z2LA',...
'I2EQBC*Z2EQBC+IZC*Z2LC=IZB*Z2LB',...
'I2B*Z2B+IC1B*2/YB',...
'I2C*Z2C+IC1C*2/YC',...
'I2A*Z2A+IC1A*2/(m*YA)',...
'IZB*Z2LB+(1-m)*Z2LA*IZA2=IZA1*m*ZL2A-I2EQAB*Z2EQAB',...
'IZA1*m*Z2LA=IZA2*(1-m)*Z2LA+IZC*Z2LC+I2EQAC*Z2EQAC',...
'IC4A/((1-m)*YA)=IC2C/YC'};
variables = {'m','I2A','I2B','I2C','I2EQAB','I2EQAC','I2EQBC',...
'IZA1','IC1A','IC2A','IZA2','IC4A','IC1B','IZB',...
'IC2B','IZBB','IZC','IC2C','IZCC'};
LL = solve(equations{:},variables{:})
你能帮我弄清楚出了什么问题吗?
答案 0 :(得分:2)
Warning: 20 equations in 19 variables.
> In solve at 139
Warning: Explicit solution could not be found.
> In solve at 170
LL =
[ empty sym ]
我认为这是自解释的,如果没有查看与DSOLVE相关的文档,其中:
诊断如果dsolve找不到 它是一个方程的解析解 打印警告:警告:明确 无法找到解决方案。和 返回一个空的sym对象。
答案 1 :(得分:1)
solve()与大写字母一样存在大写字母变量名称的问题。
请参阅http://www.mathworks.com/matlabcentral/newsreader/view_thread/303201
答案 2 :(得分:0)
我尝试重新格式化方程式并直接输入到符号工具箱中,求解函数只是吐出所有方程式,因此它无法解决当前方程式所代表的那些变量。
您对所有这些变量的域或约束有任何了解吗?如果你这样做,我会考虑指定所有这些,也许它会让求解器为你找到一个解决方案。
为了让您在符号工具箱中快速启动并运行,这里您的等式重新格式化为适合:
equations := {
I2B + I2EQAB = I22B + I2EQBC,
I2A = I2EQAB + I2EQAC + I22A,
I2C + I2EQBC + I2EQAC = I22C,
I22B = IZB + IC1B,
IZB = IC2B + IZBB,
I22C = -I2C * Z2C * YC / 2 + IZC,
IZC = IC2C + IZCC,
I22A = IC1A + IZA1,
IC4A + IZA2 = IZBB + IZCC,
IZB * Z2LB + IC2B * 2 / YB = IC1B * 2 / YB,
I2C * Z2C = -IC2C * 2 / YC + IZC * Z2LC,
IZA1 * m * Z2LA + IC2A * 2 / (m * YA) = IC1A * 2 / (m * YA),
IC4A * 2 / ((1 - m) * YA) = IC2A * 2 / (m * YA) + IZA2 * (1 - m) * Z2LA,
I2EQBC * Z2EQBC + IZC * Z2LC = IZB * Z2LB,
I2B * Z2B + IC1B * 2 / YB,
I2C * Z2C + IC1C * 2 / YC,
I2A * Z2A + IC1A * 2 / (m * YA),
IZB * Z2LB + (1 - m) * Z2LA * IZA2 = IZA1 * m * ZL2A - I2EQAB * Z2EQAB,
IZA1 * m * Z2LA = IZA2 * (1 - m) * Z2LA + IZC * Z2LC + I2EQAC * Z2EQAC,
IC4A / ((1 - m) * YA) = IC2C / YC
}:
variables := {
m, I2A, I2B, I2C, I2EQAB, I2EQAC ,I2EQBC,
IZA1, IC1A, IC2A, IZA2, IC4A, IC1B, IZB,
IC2B, IZBB, IZC, IC2C, IZCC
}:
solve(equations, variables)
要指定所有已知变量都是实数,请使用以下命令:
assume(variables, Type::Real)
另请注意,我在方程中计算了36个唯一变量(除非我犯了一个错误),如果求解器能够产生结果,那么你将得到一个巨大的“假设”列表。我会看看你的方程式,看看你是否可以将它们分组并用较小的数组来解决它们。
答案 3 :(得分:-2)
Matlab,符号解决:solve()
我认为符号变量存在问题,这些变量的名称不止一个。
a-z有效,但无论何时我尝试用两个字母或更多字母来解决它只会吐出来 退出空集。
例如,像solve('xy * 10 = 1','xy')这样简单的东西不起作用:(