Integration of Known Dataset to specific value
    20 views (last 30 days)
  
       Show older comments
    
Hello, 
So I was working on a problem, and while I found a solution that works, its very ineligant and I was wondering out of pure curosity if anyone knows of a better method. I did my best to describe my problem below, and added a photo for better understanding. 
I have a large matrix of data (i,j) where each cell holds the density value at a node as it evolves with time where time occupies i and space occupies j. The cell density is held at each cell position (i,j). The x-positions are discretized so that the distance between two nodes  is 50ft. My goal is to find the x position where an integral of the density*length = an area. It should be noted that the units are not standard units, but density is cars/ft and length is ft. I want to find when an integrated area is equal to a specific value (in this case = 1) when starting from the right side and working towards the left. I know that this explaination may be hard to follow, so I have included a hand drawn sketch of the situation below. In the photo, I have some values from a single row added because I was doing my own math, but every single row of the matrix holds a series of density values similar to what I have drawn. The slope between two points is not consistent and I am looking for an x position inbetween nodes. 

Here is the code I ended up writing: 
                for h = 1:t_span % does this for each time level 
                    area = 0;
                    for i = x_span:-1:26
                        x_1 = x_range(i-1);
                        x_2 = x_range(i);
                        y_1 = store_p(h,i-1);
                        y_2 = store_p(h,i);
                        x = [x_1; x_2];
                        y = [y_1; y_2];
                        Q = trapz(x,y);
                        area = area + Q;
                        if abs((area-1))<0.01
                            if s == 1
                                first_car_location_1(1,h) = x_1;
                            elseif s == 2 
                                first_car_location_2(1,h) = x_1;
                            else 
                                first_car_location_3(1,h) = x_1;
                            end 
                            break
                        else 
                            new_length = 45;               
                            if area >= 1
                                overshoot = area - 1;
                                for j = 1:25
                                a_1 = 0;
                                a_2 = new_length;
                                a = [a_1;a_2];
                                b_1 = y_1;
                                b_2 = (y_2-y_1)*a_2/50 + y_1;
                                b = [b_1; b_2];
                                new_area = trapz(a,b);
                                    if new_area - overshoot > 0.001
                                        new_length = new_length-2;
                                    else
                                        if s == 1
                                            first_car_location_1(1,h) = x_range(i-1)+a_2;
                                        elseif s == 2 
                                            first_car_location_2(1,h) = x_range(i-1)+a_2;
                                        else 
                                            first_car_location_3(1,h) = x_range(i-1)+a_2;
                                        end 
                                        break                                        
                                    end 
                                end %end for loop for new length
                                break % kick out of if area >= 1 statment 
                            end
                        end   
                     end
                end
            end
OF NOTE: store_p is the matrix itself, where the dimensions are (time t, position x), t_span is the i dimension length, x_span is the j dimension length. I stop at 26 because in my x_range thats where x becomes negative and thus is a bound of the problem. 
If you are interested in why im doing this, its an analysis of the traffic equation for a class. 
Again, my solution works and gives me the answers I need, but my answer seems very barbaric, just looking for ways to do something similar in the future a little more neatly. 
Thank you, Braden
0 Comments
Answers (1)
  Prudhvi Peddagoni
    
 on 28 Dec 2020
        Hi,
It basically gives you the vector of all the area values up until that point.
Hope this helps.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
