我试图获得机械系统的分析控制输入的衍生物。我的问题可以压缩到以下问题:
我有一个等式,包括必须为a
解决的时间因变量da/dt
。
我的代码中的上述部分是我解决此问题的理想方式。我不工作,因为我无法设法获得solve
函数来解决时间因变量。我可以使用下面的解决方法,首先使用自变量并在求解调用之后替换实际的时间相关变量。由于我有很多变量(以及变量的向量等),我想知道是否有更直接的方式来做这个而不需要替换。
syms a(t) b(t)
equation = a + 3*b == 7;
% a = solve(equation, a) % <- this line isn't working. solve finds no solution
% a_dot = diff(a);
% "work around" by extra substitution
syms at bt
equation = at + 3*bt == 7;
at = solve(equation, 'at');
a = subs(at, bt, b);
a_dot = diff(a);
答案 0 :(得分:0)
您的第一个案例不起作用,因为a
和b
属于symfun
类 - 有效地发挥作用。即使它看起来很简单,因为a
和b
不是值,solve
不知道这些函数的属性以便应用代数的基本规则(例如,联想的,分配的)。例如,它不知道a(t)
是返回实数值还是复数值,函数是否可以是某个t
处的单值或多值,函数是返回标量还是向量或矩阵当然,如果您明确定义a
和b
,那么solve
可能会正常工作,但您需要解决函数中的变量而不是a
和b
自己。
在第二种情况下,solve
假设at
和bt
是标量代数变量。这不是“解决方法”,而是如何做你想要的。对不起,如果这似乎不满意。我唯一的改变就是你不需要为你要解决的变量名使用一个字符串(如果你想要的话,可以组合一些行):
syms at bt b(t)
equation = at + 3*bt == 7;
at = solve(equation, at);
a = subs(at, bt, b);
a_dot = diff(a);
注意,将来“这条线不起作用。解决找不到解决方案”没有帮助。您应该发布完整的错误/警告消息,以便每个人都知道您正在看到的内容并确认它们是相同的。