我有一个字符序列,我与 Matlab 函数“multialign”进行了多对齐。结果是一个带有多对齐序列的 char 矩阵:
例如,只有 3 个序列。
----GC
AT--GC
ATGCGC
接下来,我根据序列之间的相似性对比对的每一列进行评分。在前面的例子中:在第一列中,“A”是最常见的符号,它出现了 3 次中的 2 次,所以得分是 2/3,在最后一列中,字母“C”每次出现,所以我得分它1,依此类推。最终得分是单项得分的平均值。
现在真正的问题是:我使用一个函数创建这些序列,该函数使用一个阈值来决定是否添加一个字符,所以我可以有更短或更长的序列。这是另一个具有不同阈值的示例,我以相同的方式评分:
-----ATATGGCGC
AT-ATGCA-G-C--
ATG-TGC--G-C--
我想使用 fminsearch 来搜索最佳阈值,但我的问题是仅稍微改变阈值,分数不会改变,因此 fminsearch 使用的算法不起作用(例如,如果您从 10 开始选择的值下一步是类似于 9.75...)。
这是我所做的伪 Matlab 代码:
[bestthr, bestscore] = fminsearch(@(x) fcnthr(data,x),[10]);
function score = fcnthr(data,thr)
sequences = generateSequencesFromData(data,thr);
multialignmatrix = multialign(sequences);
score = scorealignments(multialignmatrix);
score = 1/score; %I want to find the maximum score so fminsearch searches the minimum of 1/score.
end
有人能帮我吗?