在我的简单代码中:
%%EQ1
syms x p;
matSol=[];
pvec=[]
for p=-5:5
eqn = x - p*(x^2);
S = solve(eqn, x);
%%STOCK S VALUES
vectSol=[0];
for j=1:size(S)
vectSol(j)=S(j);
end
pvec(p+6)=p;
matSol = [matSol; vectSol]; %% Error using vertcat Dimensions of matrices being concatenated are not consistent.
end
%PLOT
subplot(1,2,1); plot(pvec, matSol); xlabel('p'); ylabel('x');
title('Equation 1 : x - p x²');
hold on;
%%EQ2
%% same code works with 'eqn = p - x^2;'
我收到错误消息:Error using vertcat Dimensions of matrices being concatenated are not consistent.
。在网站Matlab Answers
上,一个人解释"当你将几个矩阵组合成一个大矩阵时,单个矩阵的维度必须匹配。在你的情况下,他们不是。这是错误信息所说的内容。"
但我在Matlab上并不强大,我从这种语言开始。具体我应该如何进行?这些小代码行适用于其他方程式。
答案 0 :(得分:2)
我认为作为初学者,了解正在发生的事情以及如何自行调试此类代码非常重要。 Matlab有一个非常有用的功能,如果你输入dbstop if error
,它将完全停止错误发生的位置。
这样做你会注意到,p=0
是一个特例。只找到一种解决方案。由于矩阵的每一行必须具有相同数量的元素,因此不能在矩阵中插入一行元素。
我不知道你还想对数据做些什么,但是单元格数组可能有助于解决它,它可以存储不同大小的向量。
答案 1 :(得分:0)
这是因为当p = 0
时,等式eqn = x - p*(x^2)
会缩减为eqn = x
,这本质上是线性的,而solve(*)
只会给出one solution
x = 0
1X1
因此,此解决方案的大小为p
。在quadratic
的所有其他情况下,等式为two solutions
,性质为2X1
,其中大小为p = 0
。显然,它们不能被追加。
根据具体情况,作为快速解决方法,您可以在length(S)==1
或S
时专门考虑这种情况,只需在NaN
附加{ {1}}值。
S = solve(eqn, x);
之后的以下代码会自动将适当数量的NaN
添加到S
。
S = [S; NaN(2-length(S),1)];% 2 is the degree of the equation (may need to be changed for other equations)