function lambda=calc_lambdacostmessage_lengthn l3=1e+3; m3=doublemessage_length + 1; iterations=0; while m3message_length l3=l32; p=exp-l3cost1+exp-l3
这段代码是用来计算一个参数lambda的函数。该lambda值是通过二分法来逼近满足特定条件的lambda值。
首先,函数接受三个参数:cost、message_length和n。其中,cost是一个代价数组,message_length是所需的消息长度,n是一个常数。
代码中的变量l3被初始化为1000,表示lambda的上界。变量m3初始化为message_length + 1,用来记录当前lambda值对应的消息长度。
然后,进入一个循环,直到m3小于等于message_length为止。在循环中,l3的值每次翻倍,p被计算为exp(-l3cost) / (1 + exp(-l3cost)),m3被计算为binary_entropyf(p)。
binary_entropyf(p)函数用于计算二进制熵。它接受一个概率数组p作为参数,计算每个概率对应的二进制熵,并将所有二进制熵相加得到总熵Ht。
在循环结束后,如果迭代次数超过了10次,则返回当前的l3作为lambda的值。
接下来,l1被初始化为0,m1被初始化为n,lambda被初始化为0,alpha被计算为message_length除以n。
然后,进入一个循环,循环条件是(m1-m3)/n大于alpha的千分之一,并且迭代次数小于30。在循环中,lambda被计算为l1与l3的中间值。
然后,p被计算为exp(-l3cost) / (1 + exp(-l3cost)),m2被计算为binary_entropyf(p)。
如果m2小于message_length,则将l3更新为lambda,m3更新为m2;否则,将l1更新为lambda,m1更新为m2。
最后,迭代次数增加1。
循环结束后,返回lambda作为结果。
总结起来,这段代码通过二分法来逼近满足特定条件的lambda值。其中,lambda的选择是通过计算二进制熵的方式来调整的,直到满足条件为止
原文地址: https://www.cveoy.top/t/topic/iQSG 著作权归作者所有。请勿转载和采集!