upadted cgft文件。
循环错误与“独特”和“interp1”
2视图(30天)
显示旧的评论
亲爱的Matlab-Experts,
试图找到50%的门槛为乙状结肠形曲线为一组受试者使用interp1。设法做单一的主题:
负载cgft
负载cgsx
大小(cgft)
大小(cgsx)
nsub = 8;
[~,ind1] =独特(cgft);%印第安纳=指数首次出现的重复值
yc (nsub:) = interp1 (cgft (ind1) cgsx (ind1), 50,“线性”,“extrap”);
但我循环所有53个科目失败:
%对所有科目:
负载cgft
负载cgsx
主题= [1:53];
nbsubjects =长度(主题);
为nsubs = 1: nbsubjects
nsub =主题(nsubs);
[~,ind1] =独特(cgft (nsub:));
yc (nsub:) = interp1 (cgft (ind1 (nsub,:)), cgsx (ind1 (nsub,:)), 50,“线性”,“extrap”);
结束
会有人知道为什么循环不跑吗?(我是一个matlab戏水者……不是一个普通用户…)
(错误使用matlab.internal.math.interp1
插值至少需要两个采样点为每个网格尺寸。)
接受的答案
明星黾
2023年4月30日
为了避免所有的问题有独特价值的一个向量,选择插值的一个狭窄的范围内。(几乎总是,在大多数情况下,总是在这里)可以防止这个问题。
试试这个,
LD1 =负载(“cgsx.mat”);
cgxs = LD1.cgsx;
LD2 =负载(“cgft.mat”);
cgft = LD2.cgft;
为k = 1:尺寸(cgxs, 1)
% qv = cgft (k,:)
% Q =[马克斯(cgft (k,:));min (cgft (k,:)))
val50 (k) = 0.5 * (max (cgft (k,:))分钟(cgft (k,:))) +分钟(cgft (k,:));%检测50%的一系列特定的cgft向量
ix50 =找到(diff(标志(cgft (k,:) -val50 (k))));%近似指数的值
ix50-1 idxrng = max (1): min(元素个数(cgxs (k,:)), ix50 + 1);%指数范围内插
cgxs50 (k) = interp1 (cgft (k, idxrng) cgxs (k, idxrng) val50 (k));%插入范围
结束
midrange_and_cgxs_values = [val50;cgxs50]
图
情节(cgxs。“cgft。”)
%的阴谋(cgxs (:, (1 2)), cgft (:, (1 2)))
%的阴谋(cgxs ([1 - 2],:)。”,cgft ((1 2):)。)
持有在
情节(cgxs50 val50,“老”)
持有从
网格
包含(“cgxs”)
ylabel (“cgft”)
如果你想严格'全球' y值的插入
0.5
,替换
“val50”
在我的代码。我的代码范围
50%
价值与个人的范围
“cgft”
向量。
。
2的评论
明星黾
2023年4月30日
像往常一样,这是我的荣幸!
我相信你,就像我一样,必要时。我寻求帮助时开发这种方法插入一个准周期性的函数,必须为每个时间信号交叉定义个别interpolatioon地区特定的阈值。它很好地对其他类型的问题,一,实际上似乎使代码更高效,因为它缩小插值区域。