while using interp1 for matrix type data the following error found

Error using griddedInterpolant The grid vectors must contain unique points.
Error in interp1 (line 161) F = griddedInterpolant(X,V,method);
Error in sample1 (line 40) thr_new(j,:) = interp1(trq(j,:),thr,trq_new,'linear','extrap')

 Réponse acceptée

thr_new = zeros(17,13) ;
mf_new = zeros(17,13) ;
new_mf_trq = zeros(17,13) ;
for j = 1:17
[C1,ia1,ib1] = unique(trq(j,:)) ;
thr_new(j,:) = interp1(C1,thr(ia1),trq_new,'linear','extrap') ;
mf_new(j,:)= interp1(thr,mf(j,:),trq_new,'linear','extrap') ;
new_mf_trq(j,:) = interp1(thr_new(j,:),mf_new(j,:),trq_new,'linear', 'extrap') ;% new mf values corr. to new torq value
end

1 commentaire

hello sir, i have following data thr = [0 10 20 30 40 50 60 70 80 90 100]; % throttle trq_new = [0 10 20 30 40 50 60 70 80 90 100 110 120]; % new torque trq = [0 0.1 29.9 87.6 99.8 101 105.6 105.4 106.1 110 120; 0 0.1 22.8 85.6 105.2 107 110 110.5 110.3 110.31 110.4; 0 0.1 17 80.6 106.1 110 112.01 112.02 112.03 112.2 112; 0 0.1 22 82.8 106 108 108.5 110 109 110 109; 0 0.1 16 79 105 110 114 114.01 113 113.01 114; 0 0.1 16.9 82.4 108 115 120.5 120.501 120.3 120.301 120.7; 0 0.1 11.4 72 105.5 115.2 120.3 120.8 120.8 120.7 120.8; 0 0.1 9 68 103.8 112.5 115.8 115.801 116.4 116 116.4; 0 0.1 6.5 63.2 103.8 109.8 111.6 111.8 111.2 112 111.8; 0 0.1 3.1 58.7 102.3 110 110.2 110.4 110.5 110.3 110.5; 0 0.1 0.2 54.6 100.5 108.6 109.5 109.6 109.601 109.602 109.3; 0 0.1 0.2 49.3 98.1 107.2 108.5 108.501 108.502 108.503 108.504; 0 0.1 0.2 47.4 95.9 106.2 107.4 107.6 107.7 107.6 107.601; 0 0.1 0.2 44.8 94.2 104 105.7 105.8 106 106.1 106.101; 0 0.1 0.2 39.4 90.1 102.4 104.5 104.501 104.6 104.601 104.602; 0 0.1 0.2 35.8 86.4 100 102.4 102.2 102.201 102.4 102.3; 0 0.1 0.2 33 83.5 97.3 100.1 100 100.1 99.5 99;]; %torq value mf = [0.1 0.11 0.49 1.1 1.28 1.32 1.53 1.54 1.53 1.54 1.55; 0 0.11 0.5 1.22 1.5 1.52 1.78 1.77 1.79 1.78 1.77; 0 0.1 0.47 1.28 1.66 1.72 2.01 2.011 1.99 2 2.01; 0 0.14 0.6 1.46 1.82 1.93 2.22 2.23 2.24 2.22 2.2; 0 0 0.6 1.56 2.03 2.14 2.53 2.52 2.54 2.55 2.54; 0 0 0.69 1.79 2.31 2.43 2.85 2.86 2.85 2.851 2.852; 0 0 0.63 1.74 2.45 2.75 3.12 3.11 3.1101 3.1102 3.12; 0 0 0.66 1.8 2.59 2.9 3.19 3.18 3.201 3.202 3.203; 0 0 0.64 1.84 2.83 3.02 3.25 3.29 3.3 3.8 3.3; 0 0 0.66 1.88 2.98 3.23 3.58 3.58 3.6 3.56 3.58; 0 0 0.65 1.91 3.12 3.42 3.83 3.8301 3.8302 3.84 3.82; 0 0 0.1 1.92 3.26 3.6 4.04 4.0401 4.05 4.04 4.05; 0 0 0.1 1.99 3.42 3.83 4.29 4.3 4.301 4.302 4.29; 0 0 0.1 2.05 3.64 4 4.53 4.5301 4.54 4.55 4.52; 0 0 0.1 2.01 3.74 4.22 4.74 4.75 4.76 4.75 4.74; 0 0 0.1 2.01 3.78 4.45 4.89 4.8901 4.8901 4.88 4.89; 0 0 0.1 2.02 3.83 4.61 4.95 4.97 4.96 4.97 4.97;]; %fuel value i need to find the "new throttle" value from thr,trq_new, and trq value tables using interpolation and also i need to find the "new_mf" from mf, new throttle,trq_new values using interpolation. please help me

Connectez-vous pour commenter.

Plus de réponses (3)

Let x, y be your x and y data.
[xx,ia,ic] = unique(x,'legacy')
yy = y(ia) ;
Now use interp1 on xx and yy
Lohith k j
Lohith k j le 3 Avr 2018
Modifié(e) : KSSV le 3 Avr 2018
clc
thr = [0 10 20 30 40 50 60 70 80 90 100]; % throttle
trq_new = [0 10 20 30 40 50 60 70 80 90 100 110 120]; % new torq
trq = [0 0.1 29.9 87.6 99.8 101 105.6 105.4 106.1 110 120;
0 0.1 22.8 85.6 105.2 107 110 110.5 110.3 110.3 110.4;
0 0.1 17 80.6 106.1 110 112 112 112 112.2 112;
0 0.1 22 82.8 106 108 108.5 110 109 110 109;
0 0.1 16 79 105 110 114 114 113 113 114;
0 0.1 16.9 82.4 108 115 120.5 120.5 120.3 120.3 120.7;
0 0.1 11.4 72 105.5 115.2 120.3 120.8 120.8 120.7 120.8;
0 0.1 9 68 103.8 112.5 115.8 115.8 116.4 116 116.4;
0 0.1 6.5 63.2 103.8 109.8 111.6 111.8 111.2 112 111.8;
0 0.1 3.1 58.7 102.3 110 110.2 110.4 110.5 110.3 110.5;
0 0.1 0.2 54.6 100.5 108.6 109.5 109.6 109.6 109.6 109.3;
0 0.1 0.2 49.3 98.1 107.2 108.5 108.5 108.5 108.5 108.5;
0 0.1 0.2 47.4 95.9 106.2 107.4 107.6 107.7 107.6 107.6;
0 0.1 0.2 44.8 94.2 104 105.7 105.8 106 106.1 106.1;
0 0.1 0.2 39.4 90.1 102.4 104.5 104.5 104.6 104.6 104.6;
0 0.1 0.2 35.8 86.4 100 102.4 102.2 102.2 102.4 102.3;
0 0.1 0.2 33 83.5 97.3 100.1 100 100.1 99.5 99;]; %torq value
mf = [0.1 0.11 0.49 1.1 1.28 1.32 1.53 1.54 1.53 1.54 1.55;
0 0.11 0.5 1.22 1.5 1.52 1.78 1.77 1.79 1.78 1.77;
0 0.1 0.47 1.28 1.66 1.72 2.01 2.01 1.99 2 2;
0 0.14 0.6 1.46 1.82 1.93 2.22 2.23 2.24 2.22 2.2;
0 0 0.6 1.56 2.03 2.14 2.53 2.52 2.54 2.55 2.54;
0 0 0.69 1.79 2.31 2.43 2.85 2.86 2.85 2.85 2.85;
0 0 0.63 1.74 2.45 2.75 3.12 3.11 3.11 3.11 3.12;
0 0 0.66 1.8 2.59 2.9 3.19 3.18 3.2 3.2 3.2;
0 0 0.64 1.84 2.83 3.02 3.25 3.29 3.3 3.8 3.3;
0 0 0.66 1.88 2.98 3.23 3.58 3.58 3.6 3.56 3.58;
0 0 0.65 1.91 3.12 3.42 3.83 3.83 3.83 3.84 3.82;
0 0 0.1 1.92 3.26 3.6 4.04 4.04 4.05 4.04 4.05;
0 0 0.1 1.99 3.42 3.83 4.29 4.3 4.3 4.3 4.29;
0 0 0.1 2.05 3.64 4 4.53 4.53 4.54 4.55 4.52;
0 0 0.1 2.01 3.74 4.22 4.74 4.75 4.76 4.75 4.74;
0 0 0.1 2.01 3.78 4.45 4.89 4.89 4.89 4.88 4.89;
0 0 0.1 2.02 3.83 4.61 4.95 4.97 4.96 4.97 4.97;]; %mf
for j = 1:17
++j;
thr_new(j,:) = interp1(trq(j,:),thr,trq_new,'linear','extrap')
mf_new(j,:)= interp1(thr,mf(j,:),trq_new(j,:),'linear','extrap')
new_mf_trq(j,:) = interp1(thr_new(j,:),mf_new(j,:),trq_new,'linear', 'extrap')% new mf values corr. to new torq value
end
interp1() is meant for vectors, not matrices.
Why are you trying to use a matrix?
Use interp2() or scatteredInterpolant() or griddedInterpolant() instead.

1 commentaire

"interp1() is meant for vectors, not matrices."
Where is this stated? The interp1 documentation that I can find states that "If v is a matrix or an array, then each column contains a separate set of 1-D values", and has worked perfectly on matrices every time I have used it.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Interpolation dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by