Matlab code but i'm having problems puting in a loop

Click For Summary

Discussion Overview

The discussion revolves around a MATLAB coding issue where a participant seeks assistance in converting a block of code into a loop. The focus is on handling arrays of varying sizes and extracting specific columns from these arrays.

Discussion Character

  • Technical explanation
  • Mathematical reasoning
  • Homework-related

Main Points Raised

  • One participant shares their initial code and expresses difficulty in looping through file names to load data and extract a specific column.
  • Another participant attempts to simplify the extraction process but encounters an "Index exceeds matrix dimensions" error when trying to access the data.
  • A different approach is proposed using the eval function to dynamically reference variable names, but this leads to a "Subscripted assignment dimension mismatch" error.
  • Ultimately, one participant reports success with a working loop but invites others to suggest better solutions.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best method for implementing the loop, as multiple approaches are discussed, each with its own challenges and errors.

Contextual Notes

Participants mention issues related to variable sizes and matrix dimensions, indicating that the arrays being processed may not be uniform in size, which complicates the looping process.

manicwhite
Messages
6
Reaction score
0
Hi. i have seen similar questions on here but can't quite get them to apply to my problem

i have wrote some MATLAB code but I'm having problems puting in a loop

heres my code
-----------------------------------------------------------------------------------------

clear
clc
for i=1:10
name=['C:\Documents and Settings\john\My Documents\matlabfiles\t2\p',num2str(i),'t2a.asc'];
load(name);

end
clear name

track1=findvarible(p1t2a,31);
track2=findvarible(p2t2a,31);
track3=findvarible(p3t2a,31);
track4=findvarible(p4t2a,31);
track5=findvarible(p5t2a,31);
track6=findvarible(p6t2a,31);
track7=findvarible(p7t2a,31);
track8=findvarible(p8t2a,31);
track9=findvarible(p9t2a,31);
track10=findvarible(p10t2a,31);
--------------------------------------------------------------------------------
i would like to put the last block into a loop

the files pit2a are arays of varying size (x,66). i want to take one column of interest out
i have tried puting these values into an aray 'track' like this.

---------------------------------------------------------------------------
% track=zeros(85,66)
% for i=1:10
% track(:,i)=findvarible(eval(['p',int2str(i),'t4a']),31);
% end
--------------------------------------------------------------------------
this caused me problems because the variables were of different sizes so i tried pre defining the aray to the biggest varible but that didnt work


the function findvarible is(see below). its in there for an adition i intend to add later
-------------------------------------------------------------------
function [ varible ] = findvarible( filename,var )
varible=filename(:,var);
end
--------------------------------------------------------------------

i have tried using a lop to do it like the top bit automaticaly but i just can't get it to work.


so anyways. any help that puts me in the right direction to geting that top block into a loop would be helpfull

hope that wasnt to wishywashy
 
Physics news on Phys.org


tried this

%track(:,1)=p1t4a(:,31);% this line checks it can work works

for i=1:10
name=['p',int2str(i),'t4a']
track(:,i)=name(:,31)
end
got this error

? Index exceeds matrix dimensions.

Error in ==> test4compare at 14
track(:,i)=name(:,31)
 


i think i already mentioned something similar to this

for i=1:10
name=['p',int2str(i),'t4a']
track(:,i)=eval(['p',int2str(i),'t4a(:,31)'])
end

the first one runs then i get an error saying
? Subscripted assignment dimension mismatch.

Error in ==> test4compare at 14
track(:,i)=eval(['p',int2str(i),'t4a(:,31)'])
 


for i=1:10
name=['p',int2str(i),'t4a']
eval(['track', int2str(i) '=p',int2str(i),'t4a(:,31)'])
end

ok i have a working loop. i am happy. if you have a better solution to the problem please still post
 

Similar threads

  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 4 ·
Replies
4
Views
7K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
7K