我有一个像这样定义的向量值函数:
eqns =@(z) [0.2178*z(7) + 1.96*sin(z(1)) == -0.2*z(9)*cos(z(1)),...
0.7*z(9) + 1.5*z(4) + 0.2*z(7)*cos(z(1)) - 0.2*z(2).^2*sin(z(1)) == z(5)]
这是一组两个方程,我希望z(7)和z(9)成为公式的主语。也就是说,我希望这两个方程的形式为z(7)= f1(z(1),z(2),z(3),z(4),z(5))和z(9) = f2(z(1),z(2),z(3),z(4),z(5))。
我试着这样做:
[f1,f2]= solve(eqns,z(7),z(9))
但它给了我错误"未定义的功能' z'对于类型的输入参数 '双'"
任何帮助都会受到很多关注
答案 0 :(得分:1)
如果没有声明z
作为符号变量,Matlab在尝试评估呼叫中的z
和z(7)
时,不知道z(9)
是什么解决。因此,必须在调用之前定义z
,并定义eqns
。此外,由于您将z
视为向量,因此最简单的方法是使用sym
而不是syms
来声明它:
z = sym('z',[9,1]);
最后,正如评论中所述,solve
的第一个输入是"specified as a symbolic expression or symbolic equation",因此不声明eqns
是匿名的,像你一样的向量值函数,例如fsolve
;简单地使用符号变量定义它,它将是一个符号表达式的构造。
所有这一切,这段代码为我提供了答案:
z = sym('z',[9,1]);
z([1,2,4,5]) = sym(rand(4,1));
eqns = [0.2178*z(7) + 1.96*sin(z(1)) == -0.2*z(9)*cos(z(1)),...
0.7*z(9) + 1.5*z(4) + 0.2*z(7)*cos(z(1)) - 0.2*z(2).^2*sin(z(1)) == z(5)];
[f1,f2]= solve(eqns,z(7),z(9));