欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用python写的调内参的简易程序

程序员文章站 2022-04-22 09:10:06
根据灰度值来推测调齐内参所需要的蛋白质浓度(以最简单的最小二乘法来计算):一开始上样的时候最好等体积上样(蛋白溶度调成一致)。确保每个样的上样体积一致。多做2个重复取平均值。然后采...

根据灰度值来推测调齐内参所需要的蛋白质浓度(以最简单的最小二乘法来计算):一开始上样的时候最好等体积上样(蛋白溶度调成一致)。确保每个样的上样体积一致。多做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)