求解时间因变量的方程

时间:2014-01-28 13:57:57

标签: matlab variables time solver symbolic-math

我试图获得机械系统的分析控制输入的衍生物。我的问题可以压缩到以下问题:

我有一个等式,包括必须为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);

1 个答案:

答案 0 :(得分:0)

您的第一个案例不起作用,因为ab属于symfun类 - 有效地发挥作用。即使它看起来很简单,因为ab不是值,solve不知道这些函数的属性以便应用代数的基本规则(例如,联想的,分配的)。例如,它不知道a(t)是返回实数值还是复数值,函数是否可以是某个t处的单值或多值,函数是返回标量还是向量或矩阵当然,如果您明确定义ab,那么solve可能会正常工作,但您需要解决函数中的变量而不是ab自己。

在第二种情况下,solve假设atbt是标量代数变量。这不是“解决方法”,而是如何做你想要的。对不起,如果这似乎不满意。我唯一的改变就是你不需要为你要解决的变量名使用一个字符串(如果你想要的话,可以组合一些行):

syms at bt b(t)
equation = at + 3*bt == 7;
at = solve(equation, at);
a = subs(at, bt, b);
a_dot = diff(a);

注意,将来“这条线不起作用。解决找不到解决方案”没有帮助。您应该发布完整的错误/警告消息,以便每个人都知道您正在看到的内容并确认它们是相同的。