1 view (last 30 days)

Hello everyone,

I wrote a function and I would like to use it on many data at once, so I tried to use the function inside a for loop.

But I got this error

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

Kindly find the function and my code attached with sample files.

I appreciate your help.

Note: put all the files in the same folder and run the file "semimanual_matching.m".

Basically, I need to run this line

T(n) = V2(dinfo(n).name, V(n));

for several text files, For instance, the function "V2" will run for the first text file "dinfo(1).name" and will take the first value of "V(1)" and put the result in the first cell of "T" ---> T(1).

Currently the error is

Subscripted assignment dimension mismatch.

Error in semimanual_matching (line 12)

T(n) = V2(dinfo(n).name, V(n));

per isakson
on 21 Dec 2019

Edited: per isakson
on 21 Dec 2019

I have modified semimanual_matching so that I don't need to put your text files in a new folder and include that folder in the Matlab search path. My first execution of semimanual_matching_modified produced the following output in the command window (plus two figures with diagrams).

Weak Geomagnetic Storm.

Est. arrival time is 91.6667 hours.

Exp. transit time using G2001 model

is eaither 108.73 hours or 97.69 hours.

Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

Error in semimanual_matching_modified (line 16)

T(n) = V2(dinfo(n).name, V(n));

Next I set a breakpoint at the offending line and restarted semimanual_matching_modified. The execution halted before executing T(n) = V2(dinfo(n).name, V(n));. I selected V2(dinfo(n).name, V(n)) with the mouse, right clicked and chose Evaluate Selection from the contect menu. The function V2() returned a column vector. The left hand side, T(n), is a scalar, which explains the error. A vector cannot be assigned to a scalar.

I added the line T = nan(144,3); before the for-loop, replaced T(n) by T(:,n) and clicked Run Section with the cursor at the new line. Output in the command window:

Error using line

Vectors must be the same length.

Error in V2 (line 105)

line([t(row2) t(row2)], ylim, 'LineStyle','--', 'Color', 'g');

Error in semimanual_matching_modified (line 16)

T(:,n) = V2(dinfo(n).name, V(n));

That's a different error. It occured during the third iteration of the loop. n was 3. Part of the output was lost. I guess there is a clc somewhere in the code. Line 104 and 105 of V2 reads

[row2, ~] = find (na_np > 0.08);

line([t(row2) t(row2)], ylim, 'LineStyle','--', 'Color', 'g');

I set a breakpoint at line 105 (dbstop if error didn't work???) and clicked Run Section. The execution halted and I clicked Continue twice. The third time I inspected the values involved

K>> whos row2 na_np t

Name Size Bytes Class Attributes

na_np 144x1 1152 double

row2 0x1 0 double

t 144x1 1152 double

K>> max(na_np)

ans =

0.041

K>>

The error is obviously caused by row2 being empty, which is because max(na_np) is less than 0.08. That in turn has probably something to do with the data in the third text file.

>> dinfo(3).name

ans =

'16122009.txt'

Where semimanual_matching_modified.m now reads

close all; clear; clc

%% read all txt files' names in this folder

dinfo = dir('*.txt');

cac = regexp( {dinfo.name},'^\d+(?=\.txt)', 'start' );

dinfo( cellfun( @isempty, cac ) ) = [];

% filename = zeros(length(dinfo),1);

% for k = 1:length(dinfo)

% filename = dinfo(k).name;

% end

% clear k;

%%

load('matlab.mat');

T = nan(144,3);

for n = 1:3

T(:,n) = V2(dinfo(n).name, V(n));

end

And study

/R2018b

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 4 Comments

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780003

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780003

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780005

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780005

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780012

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780012

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780035

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/497619-how-to-loop-over-a-customized-function#comment_780035

Sign in to comment.