【问题标题】:Matlab error: In an assignment A(I) = B, the number of elements in B and I must be the same [closed]Matlab错误:在赋值A(I)= B中,B和I中的元素数必须相同[关闭]
【发布时间】:2012-12-12 15:47:59
【问题描述】:

我有一个大小为 9 b 的数组,我正在尝试将值分配给它。

r=a(7)+u*(b(8))+v*(b(9))
b(7)=r

我知道r 确实是一个 1X1 值,但对于 b(7)=r 我仍然知道:

Error in ==> myFunction at 37
    b(7)=r

In an assignment  A(I) = B, the number of elements in B and
I must be the same.

以下是 myFunction 的代码(带有 % 的 for 循环是我想要工作的)

function b=myFunction(u,v,a)
    b(8)=0;
    b(9)=0
    r=a(7)+u*(b(8))+v*(b(9));
    size(a)
    size(b)
    size(r)
    b(7)=r
    r=a(6)+u*b(6+1)+v*b(6+2);
    b(6)=r;
    b(5)=a(5)+u*b(5+1)+v*b(5+2);
    b(4)=a(4)+u*b(4+1)+v*b(4+2);
    b(3)=a(3)+u*b(3+1)+v*b(3+2);
    b(2)=a(2)+u*b(2+1)+v*b(2+2);
    b(1)=a(1)+u*b(1+1)+v*b(1+2);
    %for i=7:-1:1
    %    b(i)=a(i)+u*b(i+1)+v*b(i+2);
    %end
end

【问题讨论】:

  • 你能打印 size(a) 和 size(b) 和 size(r) 吗?
  • 怎么样?我做了display(sprintf(' sizes: %d %d %d',size(a),size(b),size(r))); 并没有得到任何帮助?
  • 我得到了 ans = 1 7 ans = 1 9 ans =1 1 分别代表 b 和 r。这是否意味着我需要b(1,7) 而不是b(7)
  • 那里没有问题。这让我怀疑您没有发布 a、b 和 r 的实际尺寸。可以贴一下myFunction的代码吗?
  • 刚刚做了,注释的 for 循环是我想要做的工作。实际编写的代码是相同的,只是没有使用 for 循环。

标签: matlab matlab-guide


【解决方案1】:

我无法重现您的问题。下面的代码对我有用。您是否使用标量 uv 调用 myFunction()

function myTestFunction()

a = 1:7;
u = 3;
v = 4;
b = myFunction(u,v,a)

end

function b=myFunction(u,v,a)
    b(8)=0;
    b(9)=0
%     r=a(7)+u*(b(8))+v*(b(9));
%     size(a)
%     size(b)
%     size(r)
%     b(7)=r
%     r=a(6)+u*b(6+1)+v*b(6+2);
%     b(6)=r;
%     b(5)=a(5)+u*b(5+1)+v*b(5+2);
%     b(4)=a(4)+u*b(4+1)+v*b(4+2);
%     b(3)=a(3)+u*b(3+1)+v*b(3+2);
%     b(2)=a(2)+u*b(2+1)+v*b(2+2);
%     b(1)=a(1)+u*b(1+1)+v*b(1+2);
    for i=7:-1:1
       b(i)=a(i)+u*b(i+1)+v*b(i+2);
    end
end

输出如下

b =

     0     0     0     0     0     0     0     0     0


b =

  Columns 1 through 8

       29128        7281        1821         454         114          27           7           0

  Column 9

           0

【讨论】:

  • 我定义了a=[2 -5 7 -10 7 -5 2];(将其更改为 a=[0 0 2 -5 7 -10 7 -5 2];没关系)。那么现在呢?
  • @user44874 啊,我错过了a 只有七个值的事实。现在改变了。我仍然可以运行它。您可以使用您的 a、u 和 v 值运行此代码吗?
  • 原来是与特定库有关的东西,并且在我所在的特定计算机上使用。非常感谢大家
【解决方案2】:

该错误意味着您正在尝试将向量或矩阵保存到大小不正确的空间中。

当您键入 a(1) = X; 时,X 必须是 scalar 或单个值。您在 cmets 中报告的有关此问题的大小表明您正在尝试将 vector 分配给 scalar。你需要做类似b(7) = r(a_single_index)

【讨论】:

  • OP 声称 size(r) 为 [1 1]
  • 我知道这是问题所在。我只是不知道为什么 r 被认为是一个标量。我定义了r=a(7)+u*(b(8))+v*(b(9)); 我如何确定它是一个标量?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
相关资源
最近更新 更多