plot在matlab中插入两种不同类型曲线之间的曲线

时间:2016-12-06 07:12:36

标签: matlab plot

我有以下数据预测两条曲线中间的曲线,这条曲线具有不同的方程和数据。我还需要对中间曲线的曲线进行样条和平滑处理 我已尝试在stackoverflow中搜索其他代码,但这是最接近正确的解决方案。到目前为止,两条曲线的图是正确的,但插值点给出了错误的图。

我试图找到val = 30的图,假设(a25,vel25)= 25和(a50,vel50)= 50。请帮我排除故障并获取生成的插值曲线的数据表(x,y)。谢谢你的帮助 generated plot using this program

a50=[1.05
0.931818182
0.931818182
0.968181818
1.045454545
1.136363636
1.354545455
1.568181818
1.718181818
1.945454545
2.159090909
2.454545455
2.772727273
];
vel50=[0.85
0.705555556
0.605555556
0.533333333
0.472222222
0.45
0.427777778
0.45
0.477777778
0.533333333
0.611111111
0.711111111
0.827777778
];
a25=[0.5
0.613636364
0.686363636
0.795454545
0.918181818
0.963636364
1.090909091
1.236363636
1.304545455
1.431818182
1.545454545
1.659090909
1.818181818
];
vel25=[0.425555556
0.354444444
0.302222222
0.266666667
0.233333333
0.226666667
0.211111111
0.222222222
0.237777778
0.266666667
0.311111111
0.35
0.402222222
];
plot(a25,vel25,'b-');
hold on
plot(a50,vel50,'g-');
minX = min([a25 a50]);
maxX = max([a25,a50]);
xx = linspace(minX,maxX,100);
vel25_inter = interp1(a25,vel25,xx);
vel50_inter = interp1(a50,vel50,xx);
val = 30; % The interpolated point
interpVel = vel25_inter + ((val-25).*(vel50_inter-vel25_inter))./(50-25);
plot(xx,interpVel,'r-');

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题,导致它无法正常执行。我刚刚对您的代码进行了很少的更改并使其运行,

clc
%13
a50=[1.05
0.931818182
0.932
0.968181818
1.045454545
1.136363636
1.354545455
1.568181818
1.718181818
1.945454545
2.159090909
2.454545455
2.772727273
];
%13
vel50=[0.85
0.705555556
0.605555556
0.533333333
0.472222222
0.45
0.427777778
0.45
0.477777778
0.533333333
0.611111111
0.711111111
0.827777778
];
%13
a25=[0.5
0.613636364
0.686363636
0.795454545
0.918181818
0.963636364
1.090909091
1.236363636
1.304545455
1.431818182
1.545454545
1.659090909
1.818181818
];
%13
vel25=[0.425555556
0.354444444
0.302222222
0.266666667
0.233333333
0.226666667
0.211111111
0.222222222
0.237777778
0.266666667
0.311111111
0.35
0.402222222
];
plot(a25,vel25,'b-');
hold on
plot(a50,vel50,'g-');
minX = min([a25 a50])
maxX = max([a25 a50])
%xx = linspace(minX,maxX);
xx = linspace(0.5,2.7727,100);
vel25_inter = interp1(a25,vel25,xx);
vel50_inter = interp1(a50,vel50,xx);
val = 30; % The interpolated point
interpVel = vel25_inter + ((val-25).*(vel50_inter-vel25_inter))./(50-25);
plot(xx,interpVel,'r-');

有问题

  1. 您要插入的时间间隔为xx = linspace(minX,maxX);,但它会出现类型错误,
  2.   

    矩阵尺寸必须达成一致。

    因为您为起点指定了两个值,而为结束点指定了两个值。所以我将其替换为xx = linspace(0.5,2.7727,100);,其中起点是两个最小minX的最小值,maxX

    的最小值
    1. a50(0.931818182)的值重复产生以下错误
    2.   

      网格向量并非严格单调递增。

      我更改了其中一个值,并将其替换为0.932

      输出不是那么有希望,但假设你想要的那个?

      enter image description here