1

我有一个字符序列,我与 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

有人能帮我吗?

4

0 回答 0