使用python写的调内参的简易程序
根据灰度值来推测调齐内参所需要的蛋白质浓度(以最简单的最小二乘法来计算):一开始上样的时候最好等体积上样(蛋白溶度调成一致)。确保每个样的上样体积一致。多做2个重复取平均值。然后采用灰度分析进行内参调整,从而调整之后的上样量。
自变量与因变量的一系列对应数据,(x1,y1),(x2,y2),(x3,y3),...(xn,yn),分别是已经做好的实验的蛋白质浓度和相对应的灰度值。Input,以数组来存储这些数据,然后的output就是根据最小二乘法得出的调内参的最适浓度。
假设存在和实际数据最拟合的函数,y=f(x),使得实际数据和理论曲线的离差平方和:∑[yi-f(xi)]^2(从i=1到i=n相加)为最小,一般我们假设是线性关系,以线性回归方程表示如Y= a0 + a1 X ;∑(X--X平)(Y--Y平)=∑XY--nX平Y平;∑(X --X平)^2=∑X^2--nX平^2;
当∑[yi-f(xi)]^2(从i=1到i=n相加)最小时,可用函数 φ 对a0、a1求偏导数,令这两个偏导数等于零。得到的两个关于a0、 a1为未知数的两个方程组,解这两个方程组得出:a0 = (∑Yi) / m - a1(∑Xi) / m ;a1 = [∑Xi Yi - (∑Xi ∑Yi)/ m] / [∑Xi2 - (∑Xi)2 / m)]
得到不同孔道对应的不同线性关系,然后我们可以选定一个我们需要的灰度值Y,反过来求解每个孔特定蛋白质的浓度Xi。
我目前只是弄出来最简易的,完全是面向过程的简易程序,需要一个个数据自己敲进去,然后再计算处理理论上想要调齐内参的蛋白质加样浓度;进一步的可以将数据记录在txt或者excel文件中,然后读取出来再进行计算,还是有很大的进步空间嘛!
a=input("请输入该孔道的三次蛋白质加样量,以逗号隔开:") b=input("请输入该孔道的三次灰度值,以逗号隔开:") aim=int(input("目标内参的灰度值=")) c=[] d=[] for i in a.split(','): c.append(float(i)) for i in b.split(','): d.append(float(i)) l=0.0 m=0.0 n=0.0 p=0.0 e=0.0 f=0.0 for i in c: l=l+i #x的加和Σx:l for i in d: m=m+i #y的加和Σy:m for i in c: n=n+l*l #x平方的加和Σx^2:n p=p+l*m #x*y的加和Σxy:p e=(p-l*m/3.0/(n-l*l/3.0) #最小二乘法公式:a=(Σxy-ΣxΣy/N)/(Σx^2-(Σx)^2/N),a是斜率 f=m/3.0-e*l/3.0 #b=y(平均)-a*x(平均);b是截距 aimcon=(aim-f)/e print(e,f) print("线性回归方程是:y=",e,"x+",f) print(aimcon)
b=input("请输入该孔道的三次灰度值,以逗号隔开:") aim=int(input("目标内参的灰度值=")) c=[] d=[] for i in a.split(','): c.append(float(i)) for i in b.split(','): d.append(float(i)) l=0.0 m=0.0 n=0.0 p=0.0 e=0.0 f=0.0 for i in c: l=l+i #x的加和:l n=sum([ i*i for i in c])#x平方的加和:n for i in d: m=m+i #y的加和:m p=sum([c[i]*d[i] for i in range(0,3)])#x*y的加和:p e=(p-l*m/3)/(n-l*l/3) #最小二乘法公式:a=(Σxy-ΣxΣy/N)/(Σx^2-(Σx)^2/N),a是斜率 f=m/3.0-e*l/3.0 #b=y(平均)-a*x(平均);b是截距 aimcon=(aim-f)/e print(l,m,n,p,e,f)#用于测试各个量是否正确 print("线性回归方程是:y=",e,"x+",f) print("理论上的加样量=",aimcon)
下一篇: 常用的正则表达式实例整理