How Can I Fix Indexing Issues in My Matlab Code for Radioactive Decay?

  • Context: MATLAB 
  • Thread starter Thread starter Pythagorean
  • Start date Start date
  • Tags Tags
    Matlab Request
Click For Summary
SUMMARY

This discussion focuses on resolving indexing issues in MATLAB code related to modeling radioactive decay using the Euler method and Runge-Kutta method. The user encounters a problem where the arrays for time (t) and the number of particles (Ne) have mismatched lengths, causing errors during plotting. The user seeks solutions to either truncate the arrays to equal lengths or correctly append a final value to the arrays after the loop execution. The discussion highlights the importance of proper indexing and array management in MATLAB for numerical simulations.

PREREQUISITES
  • Understanding of MATLAB programming and syntax
  • Familiarity with numerical methods, specifically the Euler method and Runge-Kutta method
  • Basic knowledge of radioactive decay modeling
  • Experience with MATLAB plotting functions
NEXT STEPS
  • Research MATLAB array manipulation techniques to ensure equal lengths for plotting
  • Learn about MATLAB's 'length' and 'size' functions for array dimension management
  • Explore advanced numerical methods in MATLAB, focusing on Runge-Kutta implementations
  • Investigate debugging techniques in MATLAB to identify and resolve runtime errors
USEFUL FOR

Students, educators, and researchers involved in computational modeling, particularly those using MATLAB for numerical simulations in physics or engineering contexts.

Pythagorean
Science Advisor
Messages
4,430
Reaction score
327
I'm having a helluva time trying to build the index for this code.

First of all, this is homework, I'll admit, but I've done all I could
to research the problem on my own, so I understand the question I'm trying to ask by now, but I still haven't found an answer

Basically, I'm modeling Radioactive Decay in several different ways on
one plot. The issue I'm having is with the Euler method, because it's a numerical approach, and the last three years of my college life has been studying continuous.

Also, I have to use a while loop.

here is the code, followed by my question:

%----------------------------------------------------------------
%EULER
%----------------------------------------------------------------
i=1
t(1)=0
Ne(1)=100

while t>=ti & t<=tf %<---tf and ti are previously defined
t(i)=delt*(i-1)
Ne(i+1)=(1-lam*delt)*Ne(i)
i=i+1
end
plot(t,Ne,'ro')
------------------------------------------------------------------

Before plot even comes on, I can see that Ne will have one more
value than t does, and when I run it (when I run it, it says the matrices must must have an equal amount of elements and such, and if I scroll
through the run, i can see that Ne has (as I assumed) one more value
than t.

So I try plot(t,Ne(i-1),'ro'), hoping it will return to the whole indix set one period ago for Ne, but no, it just takes the scalar of Ne at the i-1 index and gives me a nice flat line.

Question: How do I cut off the end of the matrices (Ne and t) to the same length like a paper cutter does with paper

OR

How do I enter a final value for one last indice after the loop has created a table (this would go after the 'end' of the loop and before the 'plot'.
 
Physics news on Phys.org
to select the the 15 first components of a vector t, type t(1:15).
 
I've spent many hours on this code since then. What I actually did was made the line:

t(i)=delt*(i-1)

to say:

t(i+1)=delt*(i)

therefore bumping t up one index (since the first index is already defined as an initial value) which opened up a couple other little problems I had to fix

I'm actually on to Runge-Kutta now. Our teacher gave us an easy three step code for it, but it won't work for me.

I think I have my slope formula wrong. It's supposed to be Radioactive decays first derivative, I thought, but the line doesn't even go in the right direction, so I don't know. I'll be spending all day today trying to figure it out.

i=1
t(1)=ti
Nrk(1)=Not
while Nrk>0 & Nrk<=Not
t(i+1)=ti+delt*i
s=-lam*Nrk(i)*exp(-lam*t(i))
k1=delt*s
k2=(Nrk(i)+k1/2)*delt
Nrk(i+1)=Nrk(i)+k2/2
i=i+1
end
plot(t,Nrk,'b')
clear all
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
8K
  • · Replies 9 ·
Replies
9
Views
5K
  • · Replies 29 ·
Replies
29
Views
5K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 41 ·
2
Replies
41
Views
10K