Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:插值误差_Matlab_Debugging_Sampling - Fatal编程技术网

Matlab:插值误差

Matlab:插值误差,matlab,debugging,sampling,Matlab,Debugging,Sampling,我想对以下曲线进行基于帧的分析,该曲线表示时间和浓度之间的关系(x轴:以分钟为单位的时间;y轴:以Mbq为单位的浓度): 对于上述曲线,我希望通过将曲线拆分为19帧来执行基于帧的采样: 19 frames: 4 frames : Each of 15 seconds time interval 2 frames : Each of 30 seconds time interval 2 frames : Each of 60 seconds time interval 11 frames

我想对以下曲线进行基于帧的分析,该曲线表示时间和浓度之间的关系(x轴:以分钟为单位的时间;y轴:以Mbq为单位的浓度):

对于上述曲线,我希望通过将曲线拆分为19帧来执行基于帧的采样:

19 frames:
 4 frames : Each of 15 seconds time interval
 2 frames : Each of 30 seconds time interval
 2 frames : Each of 60 seconds time interval
11 frames : Each of 200 seconds time interval
我已经为框架分析编写了以下插值函数
c_t
是存储上图中表示的信号的位置:

function c_i = Frame_analysis(a1,a2,a3,b1,b2,b3,td,tmax,k1,k2,k3)


t= 0:6:3000; % The original sample time, in seconds
t_i =[0:15:60,90:30:120,180:60:240,440:200:2240];% The interpolated sample time for first 4 frames of 15 second interval

K_1   = (k1*k2)/(k2+k3);
K_2   = (k1*k3)/(k2+k3);
%DV_free= k1/(k2+k3);




c_t = zeros(size(t));

ind = (t > td) & (t < tmax);

c_t(ind)= conv(((t(ind) - td) ./ (tmax - td) * (a1 + a2 + a3)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');

% Y_i = interp1(t,c_t(ind), t_i); % Interpolation for first frame




ind = (t >= tmax);

c_t(ind)=conv((a1 * exp(-b1 * (t(ind) - tmax))+ a2 * exp(-b2 * (t(ind) - tmax))) + a3 * exp(-b3 * (t(ind) - tmax)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');

c_i = interp1(c_t(ind),t_i);% Interpolation for Next consequtive frames



figure;
plot(t_i,c_i);
axis([0 3000 -2000 80000]);
xlabel('Time[secs]');
ylabel('concentration [Mbq]');
title('My signal');

%plot(t,c_tnp);

end

这里有多个问题,如何解决这些问题将由您决定。
这就是我能提供的:

  • 不为打印命令指定x坐标。这是可以做到的,但是,Matlab将使用x轴的矢量索引。例子:如果你有

    y = 1:2:6;
    plot(y);
    hold on;
    y = 1:1:6;
    plot(y);
    
    你会看到区别。
    这如何适用于你的情况?您可以指定分辨率更高的矢量(
    t\u i
    ,而不是
    t
    ),但在plot命令中,您没有为x坐标提供此新矢量

  • 您对
    c\u t
    的定义提供了非常小的值(顺序为
    10^-77
    )。从t>60,输出与0无关。
    这对插值有何影响?
    您指定间隔
    [0 60]
    的步长为15-这不会给您带来很多分辨率:

    您可能希望更改为以下内容:

    t_i =[0:0.5:60,90:30:120,180:60:240,440:200:2240];  
    
    这将为您提供以下绘图:

  • 在任何一种情况下,我都不理解为什么您选择60以上的数据范围(一直到3000)作为您试图绘制的数据。这就解释了为什么你看不到有轴限制的任何东西
    axis([0 3000-2000 80000])
    远远超过y值的范围,并掩盖了小x的非零数据项


  • 这可能只是一个缩放问题吗?在第二个图中,x轴范围为0到3000,而在原始图形中,x轴范围为0到50。此外,在x=50时,您已经处于0-因此对于任何x>50,您可以期望在任何插值后处于0(这是您在第二个图中看到的)。图中有意义的部分可能是非常接近x=0的尖峰。@Schorsch,我已经解决了缩放问题,但我仍然遇到了同样的问题,缩放可以在分钟或秒内完成,是的,尖峰将在tmax时间,大约80秒,如果可能的话,请您告诉我一种方法,我可以将曲线采样到19帧。当我复制/粘贴您的示例时,我得到以下错误:
    使用GriddedInterplant时出错-插值要求每个维度至少有两个采样点。
    在您第一次计算
    Y\u i
    的行中。问题似乎是,根据您提供的,
    c_t(ind)
    是一个标量(而不是向量)。@Schorsch:我已经重新编辑了代码,请检查它并在什么时候查看?如您所见,我之前的评论比您上次编辑的评论更新。最后一次机会……DayySua请考虑接受这个回答或评论什么对你不起作用。为延迟响应道歉,我失去了我的用户帐户,所以我不能回应你,关于这个问题,我选择了3000秒的时间跨度,因为这是扫描时间,病人经历PET扫描,上图中的特征示踪剂的化学动力学在执行PET扫描时,我对逐帧分析示踪剂的特征感兴趣,因此我需要将示踪剂的动力学行为采样到19帧中,然后将噪声添加到数据中,你的答案不适用于我你所说的答案不是我需要的,确切地说,我需要将输出曲线采样到19帧,每帧都有如上所述的特定持续时间,我必须用采样数据绘制输出特性。。我在你的答案中看到的并不完全是我想要实现的,我在不同的时间点执行插值以获得采样数据,如果您认为我需要以不同的方式处理此问题,请让我知道如何将输出曲线采样为19个不同的采样点frames@DaryushShah我不会也不能解决你的具体问题。我试图回答你问的问题。您正在显示一个似乎不显示插值的绘图。我提供了一个关于您提供的示例的问题的答案。您可以选择您想要的秒数-这不会改变您在问题中显示的数据在60秒后不会发生任何事情的事实。剩下2940秒的零。
    t_i =[0:0.5:60,90:30:120,180:60:240,440:200:2240];