【问题标题】:Combine several matrices into one将多个矩阵合二为一
【发布时间】:2016-03-18 10:28:09
【问题描述】:

在我的简单代码中:

%%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 的结果

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

但我不擅长 Matlab,我从这门语言开始。具体我应该如何进行?这些小代码行适用于其他方程。

【问题讨论】:

  • 只是一个注释来简化你的代码。内部循环只是将符号变量的列向量转换为双精度的行向量。这可以使用vectSol=double(S).' 来实现
  • 对于您的函数p - x^2,您是否意识到解决方案不是真实的?例如,vectSol = 0.0000 + 2.2361i 0.0000 - 2.2361i 表示 p=-5。是否打算将它们绘制在 0 处?

标签: matlab matrix


【解决方案1】:

我认为作为初学者,了解正在发生的事情以及如何自己调试此类代码非常重要。 Matlab 有一个非常有用的功能,如果您输入dbstop if error,它将在发生错误的位置停止代码。

这样做你会注意到,p=0 是一个特例。只能找到一种解决方案。由于矩阵的每一行必须具有相同数量的元素,因此您不能在矩阵中插入一行一个元素。

我不知道您还想对数据做什么,但元胞数组可能有助于解决它,它可以存储不同大小的向量。

【讨论】:

  • 我尝试获得两个 Bifurcation diagram 'Equation 1 : x - p*x^2' 和 'Equation 2 : p - x^2' 但介于 -5 到 5 之间。
【解决方案2】:

这是因为当p = 0 时,等式eqn = x - p*(x^2) 简化为本质上是线性的eqn = x,而solve(*) 只给出one solution,即x = 0 因此这个解的大小是1X1 .在p 的所有其他情况下,等式本质上是quadratic,给出two solutions,其中大小为2X1。显然,它们不能附加。

根据具体情况,作为快速修复,您可以具体考虑p = 0length(S)==1 时的情况,只需将S 附加NaN 值即可。 p>

S = solve(eqn, x); 之后的以下代码将自动将适当数量的NaNs 附加到S

S = [S; NaN(2-length(S),1)];% 2 is the degree of the equation (may need to be changed for other equations)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2021-08-17
    • 2023-03-09
    • 2016-04-08
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多