使用'解决'关于向量值函数

时间:2016-04-07 17:25:52

标签: matlab

我有一个像这样定义的向量值函数:

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'对于类型的输入参数 '双'"

任何帮助都会受到很多关注

1 个答案:

答案 0 :(得分:1)

如果没有声明z作为符号变量,Matlab在尝试评估呼叫中的zz(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));