How to interpolate a matrix

Essentially I didn't know how to ask this as it probably is simple but I don't quite know what to do.
Essentially I want to create a response function for an earthquake record, where ultimately I want to plot the peak displacement against a varying time period. I am using the Runge-Kutta Method to integrate to get displacement from the acceleration data.
I have got a range of values for the time period -T0 and have calculated the state-space matrix A from this.
essentially I am unsure if i need to interpolate my A matrix to be the same size as my Npts in order for the loop to work.
Hope it makes sense and hope you can help!
Thanks in advance!!
for i=0.1:0.1:4; % Range of Time Periods defined
T0=(i);% seconds
w = (2*pi)/T0(1:end); %rad/s
w2=w(1:end)*w(1:end);
zita=0.05;
m=773; % Mass in MG
A1=[0 1
-w2(1:end) -(2*zita*w(1:end))]; %state-space matrix of coefficients
b=[0
1/m]; %state-space load vector
end
ft = m*acc.'; %acceleration data- converting to force f=ma
dt = 0.02; %seconds
NPTS = size(ft); %no.of points
tf = (NPTS-1)*dt;
t = 0:dt:tf;
A=A1(1:end);
dt_interp = 0.0001;
t_interp = dt_interp:dt_interp:tf;
ft_interp = F_interp(t, ft, t_interp);
NPTS_interp = size(t_interp,2);
yt = zeros(2,t_interp);
for i=1:(NPTS_interp-1)% Runge-Kutta loop, i = incremental time step
g1 = A(1:end)*yt(:,i)+b*ft_interp(i);
g2 = A(1:end)*(yt(:,i)+ 0.5*g1*dt_interp)+0.5*b*(ft_interp(i)+ft_interp(i+1));
g3 = A(1:end)*(yt(:,i)+ 0.5*g2*dt_interp)+0.5*b*(ft_interp(i)+ft_interp(i+1));
g4 = A(1:end)*(yt(:,i)+g3*dt_interp)+b*ft_interp(i+1);
ynew = yt(:,i)+(g1+2*g2+2*g3+g4)*dt_interp/6;
yt(:,i+1)=ynew; %storage
ut=yt(1,:); %displacement values
vt=yt(2,:);%velocity values
[pks,locs]=findpeaks(ut,t_interp);
Max_displacement=max(pks);
end

5 Comments

Have you tried running the code yet? If so, what errors do you get?
Typically you don't have to have A match the number of points, as you can interpolate the specific value within the loop, but yes, you will ultimately need one input for each output.
Serena Solanki
Serena Solanki on 19 Feb 2018
Edited: Serena Solanki on 19 Feb 2018
Hi Bob I have run the code and do not get an error but in the output pane in the workspace, I do not get any outputs for my displacement or peaks-so it isn't quite working.
I want to interpolate my A matrix so that the number of values match the no. of values for the NPTS_interpolate for the RK4 loop.
is there another method?
Thanks
Bob Thompson
Bob Thompson on 19 Feb 2018
Edited: Bob Thompson on 19 Feb 2018
Do you know about the interp1() and interp2() commands? They are built in Matlab commands that I have used for interpolation purposes. These are both linear interpolators, so if you need something more complex you're probably going to need to get help from somebody other than me.
Stephen23
Stephen23 on 20 Feb 2018
Edited: Stephen23 on 20 Feb 2018
"... interp1() and interp2() commands? .... These are both linear interpolators..."
Reading the interp1 and interp2 documentation shows that they support a lot more than just linear interpolation, including variations of splines and cubic interpolation. The documentation is available online for everyone to read.
"essentially I am unsure if i need to interpolate my A matrix to be the same size as my Npts in order for the loop to work."
Writing code by guessing is not very efficient. Even before you get to writing code down you should first understand the algorithm that you want to implement. Even write it out on paper, and work through a few iterations by hand: this will give you something to compare your code's output against (you do confirm that your code is giving reasonable output values, don't you?) and it allows you to understand the prerequisites and conditions for the algorithm to work.
"How to interpolate a matrix"
Read the iterp1 and interp2 documentation carefully. Try the examples. Try it with your data.
Hi Stephen
Thanks for the advice
I have tried doing this and have found a nested loop may be a better way forward rather than interpolating as it isn't what I actually needed.
Writing it out definitely helped!

Sign in to comment.

Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Asked:

on 19 Feb 2018

Commented:

on 20 Feb 2018

Community Treasure Hunt

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

Start Hunting!