For Loop Iteration With Part of Vector

I want to use a row vector to index in a for loop. But, I want to switch to a different function when the index reaches a certain element in the vector. My row vector (t) is 1x1271810. I would like to use my first function in a for loop up to element 945665 in the vector, and then use a different function for the rest of the for loop (or another for loop) from element 945666 to 1271810. Is this possible? Here is how I have my for loop written so far, how would I modify it?:
[a,b] = size(t);
for i = 1:a
for j = 1:b
PredCurrFun(i,j) = p(4).*((1-calcPinf(p,t(i,j),Co(i),Diff)).* ...
exp(-calcLambda(p,t(i,j),Co(i),Diff) .* t(i,j)) + calcPinf(p,t(i,j),Co(i),Diff));
end
end
"second function I would like to use is a 1 - exponential"

 Accepted Answer

I would suggest using one for loop the length of 't' and a conditional statement to switch between the functions. As an example
for i=1:width(t)
if i<945665
% function 1
else
% function 2
end
end

4 Comments

Hey Charles, thanks for the response! I get the error: Index exceeds array bounds. Here is my new code:
for i = 1:length(t)
if i < 945665
PredCurrFun(i) = p(4) .* ((1 - calcPinf(p,t(i),Co(i),Diff)) .* exp(-calcLambda(p,t(i),Co(i),Diff) .* t(i)) + calcPinf(p,t(i),Co(i),Diff));
else
PredCurrFun(i) = exp(-calcLambda(p,t(i),Co(i),Diff) .* t(i));
end
end
end
The error is gone with this code, but I'm not sure if the second function is actually being used:
[a,b] = size(t);
for i = 1:a
for j = 1:b
if j <= 945665
PredCurrFun(i,j) = p(4) .* ((1 - calcPinf(p,t(i,j),Co(i),Diff)) .* exp(-calcLambda(p,t(i,j),Co(i),Diff) .* t(i,j)) + calcPinf(p,t(i,j),Co(i),Diff));
else
PredCurrFun(i,j) = exp(-calcLambda(p,t(i,j),Co(i),Diff) .* t(i,j));
end
end
end
end
I'm glad I was able to get you a little further along.
I see why my first answer was confusing, since I did not include both dimensions of the array 't'. You did good by nesting the two for loops on i and j. My answer should have been
[a,b]=size(t)
for i=1:a
for j=1:b
if j<945665
% function 1
else
% function 2
end
end
end
as you already have.
It's hard for me to troubleshoot your code segment above without being able to run it, so I cannot provide a definitive answer on why the second function isn't being used. I would suggest using a conditional breakpoint to stop the if statement when j=945665 to see what's going on. Then, you can manually step the code to see if the second function is being calculated. Conditional breakpoints are under the 'Editor'-->'Breakpoints'-->'Set Breakpoint'. The 'Debug' menu will appear under 'Editor' after the code runs with the breakpoint.
Great, thanks for the advice! That was very helpful.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!