我有一系列字符,我使用Matlab函数'multialign'进行多对齐。结果是带有多对齐序列的char矩阵:
e.g。只有3个seqences。
----GC
AT--GC
ATGCGC
接下来,我根据序列之间的相似性对比对的每一列进行评分。在前面的示例中:在第一列中,'A'是最常见的符号,它出现3次中的2次,因此得分为2/3,在最后一列中每次出现字母“C”所以我得分它1,依此类推。最终得分是单个得分的平均值。
现在真正的问题:我使用一个函数创建这些序列,该函数使用阈值来决定是否添加char,因此我可以使用更短或更长的序列。这是另一个具有不同阈值的示例,我以相同的方式得分:
-----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
有人可以帮助我吗?