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

24 ビュー (過去 30 日間)
Xinxin Wang
Xinxin Wang 2016 年 10 月 6 日
コメント済み: Walter Roberson 2016 年 10 月 6 日
When trying to make a regression function by using a function that is manually created, I have this error alerting: In an assignment A(:) = B, the number of elements in A and B must be the same.
The code I have are included below(ols is a function created by me) and I am pretty sure it is no the problem in the function.
% code
for i=1:11;
[estimates(i), error(i), estvar(i), stderror(i),Tvalues(i),R2(i),R2_adj(i)]=ols(rt(2:end,i),rt(1:end-1,i),0);
estimates_all=[estimates_all estimates(i)];
error_all=[error_all error(i)];
estimates_all=[estvar_all estvar(i)];
stderror_all=[stderror_all stderror(i)];
Tvalues_all=[Tvalues_all Tvalues(i)];
R2_all=[R2_all R2(i)];
R2_adj_all=[R2_adj_all R2_adj(i)];
end
  1 件のコメント
Robert
Robert 2016 年 10 月 6 日
Separate from my answer, I recommend you re-think your storage variables. The way you index into estimates and the others looks like your are creating an array in which to store the results, but then you also append those results to a different array. You don't need to do both and saving them with indices is much better because it allows you to pre-allocate the array.
What you have now is equivalent to
result_all = [];
for ii = 1:3
result(ii) = ii;
end
disp(result_all)
for which the response is
[ 1 1 2 1 2 3 ]
What you really want is more like
N = 3;
result = nan(1,N);
for ii = 1:N
result(ii) = ii;
end
disp(result)
which yields
[ 1 2 3 ]
You can shorten this by reversing the order of the loop. That way, the first pass through the loop makes the full size array results and MATLAB doesn't spend time resizing the array each time. In the prior example we achieved the same result by pre-allocating with nan.
for ii = 3:-1:1
result(ii) = ii;
end
disp(result)
which also yields
[ 1 2 3 ]
Following this, your code would become something like
for ii=11:-1:1;
[estimates(ii), error(ii), estvar(ii),...
stderror(ii),Tvalues(ii),R2(ii),R2_adj(ii)]=...
ols(rt(2:end,i),rt(1:end-1,i),0);
end

サインインしてコメントする。

回答 (1 件)

Robert
Robert 2016 年 10 月 6 日
It looks like one of the outputs of your function ols is not a scalar. The error you are seeing is the same as if you executed
a(1) = [1,1]
  1 件のコメント
Walter Roberson
Walter Roberson 2016 年 10 月 6 日
Note: the error can also occur if you try to store an empty array into a definite location, such as
b = [];
a(1) = b;
The empty array needs size 0 to store but a(1) is size 1.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by