将几个矩阵合二为一

时间:2015-12-12 15:38:41

标签: matlab matrix

在我的简单代码中:

%%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;'

如果我删除等式1的结果 Result of code without equation 1

我收到错误消息:Error using vertcat Dimensions of matrices being concatenated are not consistent.。在网站Matlab Answers上,一个人解释"当你将几个矩阵组合成一个大矩阵时,单个矩阵的维度必须匹配。在你的情况下,他们不是。这是错误信息所说的内容。"

但我在Matlab上并不强大,我从这种语言开始。具体我应该如何进行?这些小代码行适用于其他方程式。

2 个答案:

答案 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)==1S时专门考虑这种情况,只需在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)