用Matlab求解动态矢量的带参数方程组
我试图解一个符号向量的方程组。不过,方程式中包含参数。运行附带的代码会给我带来许多错误的解决方案。我猜函数也将第二个输入假定为方程:用Matlab求解动态矢量的带参数方程组,matlab,vector,solver,symbolic-math,Matlab,Vector,Solver,Symbolic Math,我试图解一个符号向量的方程组。不过,方程式中包含参数。运行附带的代码会给我带来许多错误的解决方案。我猜函数也将第二个输入假定为方程: Warning: 4 equations in 3 variables. ans = a_tilde2: [1x1 sym] a_tilde3: [1x1 sym] p1: [1x1 sym] 我可以通过单独列出a_tilde_sym(iRange)的条目来解决此问题,如: solve(bounday_conditio
Warning: 4 equations in 3 variables.
ans =
a_tilde2: [1x1 sym]
a_tilde3: [1x1 sym]
p1: [1x1 sym]
我可以通过单独列出a_tilde_sym(iRange)
的条目来解决此问题,如:
solve(bounday_conditions, a_tilde_sym(iRange(1)), a_tilde_sym(iRange(2)), etc.)
但是由于这个向量的长度取决于函数输入,所以我不能动态地这样做。有什么建议吗
%function variation_polynomial ( sysord, reldeg )
sysord = 2;
reldeg = 1; % e.g.
% setting up symbolic variables
disp('calculating variation from desired trajectory');
fprintf('N =%3.0f, R =%3.0f\n', sysord, reldeg);
iRange = reldeg+1:2*reldeg+1;
jRange = 1:sysord-reldeg;
syms T_sym real % maneuver time
syms t_sym real % time
p_sym = sym('p', [sysord-reldeg, 1]); % parameters of polynom
assume(p_sym, 'real');
a_tilde_sym = sym('a_tilde', [iRange(end), 1]); % parameters of polynom
assume(a_tilde_sym, 'real');
y_tilde = sym('derivatives', [reldeg+1, 1]);
% setting up system of equations
i_polynomial_sum = 0;
for iIdx = iRange
i_polynomial_sum = i_polynomial_sum + a_tilde_sym(iIdx)*(t_sym/T_sym)^iIdx;
end
j_polynomial_sum = 0;
for jIdx = jRange
j_polynomial_sum = j_polynomial_sum + p_sym(jIdx)*(t_sym/T_sym)^(jIdx + 2*reldeg + 1);
end
y_tilde(1) = i_polynomial_sum + j_polynomial_sum;
for rIdx = 1:reldeg
y_tilde(rIdx+1) = diff(y_tilde(1), t_sym, rIdx);
end
% solving
bounday_conditions = subs(y_tilde, t_sym, T_sym);
for runIdx = 1:reldeg+1
bounday_conditions(runIdx) = bounday_conditions(runIdx) == 0;
end
bounday_conditions = simplify(bounday_conditions);
solve(bounday_conditions, a_tilde_sym(iRange))
是的,
solve
将您的第二个输入,a_tilde_sym(iRange)
作为一组方程,而不是要求解的变量。这是有充分理由的。前两个方程(bounday\u conditions
(sic))是以标量变量a_tilde2
和a_tilde3
表示的,而不是向量[a_tilde2;a_tilde3]
。可以通过显式指示变量来解决此问题:
s = solve(bounday_conditions, a_tilde_sym(2), a_tilde_sym(3))
或
[a_tilde2,a_tilde3] = solve(bounday_conditions, a_tilde_sym(2), a_tilde_sym(3))