循环错误与“独特”和“interp1”

2视图(30天)
菲利普
菲利普 2023年4月30日
评论道: 明星黾 2023年4月30日
亲爱的Matlab-Experts,
试图找到50%的门槛为乙状结肠形曲线为一组受试者使用interp1。设法做单一的主题:
负载cgft
负载cgsx
大小(cgft)
ans = 1×2
53 101
大小(cgsx)
ans = 1×2
101年8
nsub = 8;
[~,ind1] =独特(cgft);%印第安纳=指数首次出现的重复值
ind1 = 5215×1
69 122 175 228 281 334 387 440 493
yc (nsub:) = interp1 (cgft (ind1) cgsx (ind1), 50,“线性”,“extrap”);
指数超过数组元素的数量。指标不得超过808人。
但我循环所有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
插值至少需要两个采样点为每个网格尺寸。)
3评论
菲利普
菲利普 2023年4月30日
嗨Torsten,谢谢你的回应。即使cgsx和cgft是相同的大小,它不运行(只有主题的主题而非循环)。为什么我得去与“独特”是因为流氓主题8有一个非常陡峭的s曲线(用红色,忽略蓝色- Capture.jpg)。

登录置评。

接受的答案

明星黾
明星黾 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]
midrange_and_cgxs_values = 2×53
0.5576 0.5230 0.6505 0.4590 0.5960 0.5204 0.5932 0.6040 0.5709 0.5737 0.5642 0.6004 0.4945 0.4715 0.5386 0.4730 0.5525 0.4805 0.5025 0.5074 0.5127 0.6481 0.5234 0.6650 0.4954 0.6038 0.5425 0.6186 0.5018 0.5007 -4.6388 -5.5379 -5.4702 -3.4883 -3.0775 -2.6008 -4.4204 -5.9967 -4.6340 -4.1576 -4.6189 -4.0925 -4.3689 -5.7246 -4.3695 -3.1981 -3.9748 -4.1278 -3.7345 -3.1610 -5.0923 -4.1742 -3.9194 -4.9551 -6.6970 -4.1372 -5.7243 -4.4820 -4.8218 -3.9935
情节(cgxs。“cgft。”)
%的阴谋(cgxs (:, (1 2)), cgft (:, (1 2)))
%的阴谋(cgxs ([1 - 2],:)。”,cgft ((1 2):)。)
持有
情节(cgxs50 val50,“老”)
持有
网格
包含(“cgxs”)
ylabel (“cgft”)
cgxs50 = 1×53
-4.6388 -5.5379 -5.4702 -3.4883 -3.0775 -2.6008 -4.4204 -5.9967 -4.6340 -4.1576 -4.6189 -4.0925 -4.3689 -5.7246 -4.3695 -3.1981 -3.9748 -4.1278 -3.7345 -3.1610 -5.0923 -4.1742 -3.9194 -4.9551 -6.6970 -4.1372 -5.7243 -4.4820 -4.8218 -3.9935
如果你想严格'全球' y值的插入 0.5 ,替换 “val50” 在我的代码。我的代码范围 50% 价值与个人的范围 “cgft” 向量。
2的评论
明星黾
明星黾 2023年4月30日
像往常一样,这是我的荣幸!
我相信你,就像我一样,必要时。我寻求帮助时开发这种方法插入一个准周期性的函数,必须为每个时间信号交叉定义个别interpolatioon地区特定的阈值。它很好地对其他类型的问题,一,实际上似乎使代码更高效,因为它缩小插值区域。

登录置评。

答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2023年4月30日
cgft (nsub:)都是相同的值第二独特的输出只有一个条目
1评论
菲利普
菲利普 2023年4月30日
你好沃尔特-谢谢你的回复。我上传一个cgft更新文件。它会跑到主题8(但yc的输出是错误的主题3)。你不会知道什么可能是错的吗?

登录置评。

类别

找到更多的在调整和重塑矩阵帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!