【问题标题】:How can I use the solve function to solve vectors instead of scalar如何使用求解函数来求解向量而不是标量
【发布时间】:2021-10-22 08:25:03
【问题描述】:

我有矩阵方程,我需要求解方程以获得这些向量的值,当我使用函数求解时,它给我的错误如下: 使用 sym.getEqnsVars>checkVariables 时出错(第 92 行) 第二个参数必须是符号变量的向量。

Error in sym.getEqnsVars (line 56)
    checkVariables(vars);

Error in sym/solve>getEqns (line 429)
[eqns, vars] = sym.getEqnsVars(argv{:});

Error in sym/solve (line 226)
[eqns,vars,options] = getEqns(varargin{:});

这是我正在使用的代码:

clear all; clc; 
w2 = rand(2,2); 
w3 = rand(2,2); 
F2 = rand(2,2); 

w5 = rand(2,2); 
w6 = rand(2,2); 
F5 = rand(2,2);

w8 = rand(2,2); 
w9 = rand(2,2); 
F8 = rand(2,2);

y1 = rand(2,1); 
y2 = rand(2,1); 
y3 = rand(2,1);

syms x2 x3 s2 
solve(-w2*x2 - w3*x3 + F2*s2 == y1, -w5*x2 - w6*x3 + F5*s2 == y2, -w8*x2 - w9*x3 + F8*s2 == y3);

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    这主要是语法错误。求解函数采用(可以采用)符号参数(您尝试求解的参数)作为参数。由于您用逗号分隔方程,Matlab 将其理解为函数求解的次要参数。您需要使用矩阵括号,请查看以下修改后的表格:

    sol = solve([-w2*x2 - w3*x3 + F2*s2 == y1, -w5*x2 - w6*x3 + F5*s2 == y2, -w8*x2 - w9*x3 + F8*s2 == y3], [x2, x3, s2]);
    

    此代码运行,但函数无法为这些参数集找到解决方案。意思是,sol 返回一个包含 3 个空成员的结构。

    【讨论】:

    • 但我认为该函数无法解决 x2 , x2 和 s2 因为它们是向量,而不是标量!其次,矩阵是随机生成的,在所有情况下,所有 sol 都是 3 个空成员,这不符合逻辑。
    • 你写函数的方式不正确;我已经给了你正确的表格。如果找不到解决方案,则该函数不返回任何内容,因此返回空矩阵“[]”。这里真的没有什么可以进一步讨论的了。
    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多