필터 지우기
필터 지우기

Interpolation Error using interp1 for interval 30 minutes

조회 수: 1 (최근 30일)
Trung Hieu Le
Trung Hieu Le 2016년 6월 15일
답변: aastha gupta 2019년 10월 25일
Hi everyone,
Could you help me check my below code? I'm trying with many ways, however, It always met the error
% %%reset
clear all;
close all;
clc;
%delete NaN, continuously duplicated value and keep the last one
f=fopen('CLF1997.txt');
c=textscan(f , '%s%s%s%f' , 'Headerlines' , 1 , 'delimiter' , ' ');
fclose(f);
t =[diff(c{end})~=0;true];
C = [c{1:3}];
data = [C(t,:),num2cell(c{end}(t))];
clearvars -except data
%combine column date and time
day = data(1:end,2);
time = data(1:end,3);
ns = datenum(day, 'MM/dd/yyyy') + datenum(time, 'hh:mm:ss') - datenum('00:00:00','hh:mm:ss');
data=[data num2cell(ns)];
data(:,2:3)=[];
%data = cell2table(data,'VariableNames',{'Symbol','Price','DateTime'});
DTn = data(:,2);
ti = 1/(60/30 * 24); % Time Interval
DTiv = transpose(DTn{1}:ti:DTn{end}); % Interpolation Vector
Price = data(:,2); % Vector: Column #2 Of Table1
DT30 = interp1({DTn}, Price, {DTiv}); % Interpolated Column #2
NewTable1 = {datestr(DTiv, 'MM/dd/yyyy hh:mm:ss') DT30};
Result = [NewTable1{1} repmat(' ', size(NewTable1{2})) num2str(NewTable1{2}, '%.2f')];
Result5 = Result(1:5,:);
The error:
% Error using interp1 (line 109)
X must be a vector of numeric coordinates.
Error in Interval30minute (line 24) DT30 = interp1({DTn}, Price, {DTiv}); % Interpolated Column #2
Attached is file using this code.

채택된 답변

KSSV
KSSV 2016년 6월 15일
%%reset
clear all;
close all;
clc;
%delete NaN, continuously duplicated value and keep the last one
f=fopen('CLF1997.txt');
c=textscan(f , '%s%s%s%f' , 'Headerlines' , 1 , 'delimiter' , ' ');
fclose(f);
t =[diff(c{end})~=0;true];
C = [c{1:3}];
data = [C(t,:),num2cell(c{end}(t))];
clearvars -except data
%combine column date and time
day = data(1:end,2);
time = data(1:end,3);
ns = datenum(day, 'MM/dd/yyyy') + datenum(time, 'hh:mm:ss') - datenum('00:00:00','hh:mm:ss');
data=[data num2cell(ns)];
data(:,2:3)=[];
%data = cell2table(data,'VariableNames',{'Symbol','Price','DateTime'});
DTn = data(:,2);
ti = 1/(60/30 * 24); % Time Interval
DTiv = transpose(DTn{1}:ti:DTn{end}); % Interpolation Vector
Price = data(:,2); % Vector: Column #2 Of Table1
% Convert cell to matrix
DTn = cell2mat(DTn) ;
Price = cell2mat(Price) ;
% Arrange the matrix in order
[DTn,idx] = sort(DTn) ;
Price = Price(idx) ;
% Remove doubles
[DTn1,idx] = unique(DTn) ;
DTn = DTn1 ;
Price = Price(idx) ;
DT30 = interp1(DTn, Price, DTiv); % Interpolated Column #2
NewTable1 = {datestr(DTiv, 'MM/dd/yyyy hh:mm:ss') DT30};
Result = [NewTable1{1} repmat(' ', size(NewTable1{2})) num2str(NewTable1{2}, '%.2f')];
Result5 = Result(1:5,:);
  댓글 수: 2
Trung Hieu Le
Trung Hieu Le 2016년 6월 17일
Hi Dr. Siva Srinivas Kolukula,
After edit my data, it runs well at that time. Thanks a lots for your help
Trung Hieu Le
Trung Hieu Le 2016년 6월 17일
Hi!
Do you know how I can save the result to .txt or table? I need to divide it to 3 column for next steps. Thanks for your help.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

aastha gupta
aastha gupta 2019년 10월 25일
please help me with the code.I am getting an error in linear interpolation.
Error using interp1 (line 109)
X must be a vector of numeric coordinates.
V(1)= f(0)/b(0);
V(N+1) = f(1)/b(1);
W(1) = U(1) - V(1);
W(N+1) = U(N+1)-V(N+1);
for i = 2:N
V(i) = f(x(i))./b(x(i));
W(i) = U(i) - V(i);
end
backdW(2)= (W(2)-W(1))/h;
fordW(2)= (W(3)-W(2))/h;
backdW(N)= (W(N)-W(N-1))/h;
fordW(N)= (W(N+1)-W(N))/h;
secdW(2)= (fordW(2) - backdW(2))/h;
secdW(N)= (fordW(N) - backdW(N))/h;
for i = 3:N-1
backdW(i)= (W(i)-W(i-1))/h ;
fordW(i)= (W(i+1)-W(i))/h ;
secdW(i)= (fordW(i)-backdW(i))/h ;
end
avgsecdW(2)=secdW(2);
avgsecdW(N+1)=secdW(N);
for i=3:N
avgsecdW(i)= (secdW(i)+ secdW(i-1))/2 ;
end
for i=1:N
K = cumsum(h*sqrt(abs(avgsecdW(i+1))));
end
Q(2) = K + sqrt(abs(avgsecdW(2)));
Q(N+1) = K + sqrt(abs(avgsecdW(N+1)));
for i=3:N
Q(i)= K + sqrt(abs(avgsecdW(i)));
end
M(2) = h*Q(2);
for j = 3:N+1
for i = 2:j
M(j)= cumsum(h* Q(i));
end
end
Iteration = 0;
while( max(h*Q(i))/M(N+1)) > (2/N)
Iteration = Iteration + 1;
Y = linspace(0, M(N+1), N+1)';
x(1)=0; x(N+1)=1; % avoid issues with round-off
x = interp1(M, x, Y);
M(1)=0;
end

카테고리

Help CenterFile Exchange에서 Camera Views에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by