Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab求解动态矢量的带参数方程组_Matlab_Vector_Solver_Symbolic Math - Fatal编程技术网

用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))