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')

 采纳的回答

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 个评论

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

请先登录,再进行评论。

更多回答(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
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 个评论

"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.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Interpolation 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by