Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 解决超参数化系统中的变量

我正在尝试编写一个Matlab程序,该程序可以从用户那里接受系统的变量,但是变量多于系统参数。具体来说,三个方程式中包含六个变量:

w - d - M = 0 l - d - T = 0 N - T + M = 0 这可以用矩阵形式表示为A*x=0 ,其中

A = [1 0 0 -1 0 -1; 0 1 0 -1 -1 0; 0 0 1 0 -1 1]; x = [wl N d TM]'; 给定变量的已知子集,我希望能够解决该系统。例如,如果用户给出d , T , M ,则系统将对其他三个变量进行简单求解。如果用户提供w , N , M ,则它将成为可解决的3-DOF系统。等等。 (如果用户指定的系统过多或不足,则可能会导致错误。)

给定这些组合中的任何一种 ,(先验)使用矩阵代数来计算未知量很简单。但是除了使用符号工具箱(出于兼容性原因,我不愿意这样做)之外,我不知道如何解决一般情况。

当我开始使用这种方法时,我认为这一步很容易,但是我的线性代数是生锈的。我缺少一些简单的东西吗?


回答:
首先,令x为具有未知值NaN的向量。这使您可以使用ISNAN查找未知变量 。如果仅针对用户指定的术语计算A*x ,则将为您提供一列常数b。将这些常数放在等式的右侧,您将拥有A*x = -b形式的等式。

A = [1 0 0 -1 0 -1; 0 1 0 -1 -1 0; 0 0 1 0 -1 1]; idx = ~isnan(x); b = A(:,idx)*x(idx); % user provided constants z = A(:,~idx)\(-b); % solution of Ax = -b x(~idx) = z; 例如,使用输入x = [NaN NaN NaN 1 1 1]' ,您将得到结果[2 2 0 1 1 1]' 。它使用MLDIVIDE ,我不太熟悉线性代数,无法知道PINV还是其他更好的方法。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 12:37


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.