2020年4月14日学习日志

学习了有关RC充电电路的知识:http://blog.sina.com.cn/s/blog_5640a5320102v9vw.html

进入正题前,我们先来回顾下电容的充放电时间计算公式,假设有电源Vu通过电阻R给电容C充电,V0为电容上的初始电压值,Vu为电容充满电后的电压值,Vt为任意时刻t时电容上的电压值,那么便可以得到如下的计算公式:        

 Vt = V0 + (Vu – V0) * [1 – exp( -t/RC)] 

 

如果电容上的初始电压为0,则公式可以简化为:       

 Vt = Vu * [1 – exp( -t/RC)] (充电公式)
  
由上述公式可知,因为指数值只可能无限接近于0,但永远不会等于0,所以电容电量要完全充满,需要无穷大的时间。     当t = RC时,Vt = 0.63Vu; 
  
    当t = 2RC时,Vt = 0.86Vu;  

    当t = 3RC时,Vt = 0.95Vu;   

   当t = 4RC时,Vt = 0.98Vu; 
    当t = 5RC时,Vt = 0.99Vu; 
    可见,经过3~5个RC后,充电过程基本结束。  


    当电容充满电后,将电源Vu短路,电容C会通过R放电,则任意时刻t,电容上的电压为: 
            Vt = Vu * exp( -t/RC)       (放电公式)

 

对于电路时间常数RC的计算,可以归纳为以下几点:   
       1).如果RC电路中的电源是电压源形式,先把电源“短路”而保留其串联内阻; 
       2).把去掉电源后的电路简化成一个等效电阻R和等效电容C串联的RC放电回路,等效电阻R和等效电容C的乘积就是电路的时间常数; 
       3).如果电路使用的是电流源形式,应把电流源开路而保留它的并联内阻,再按简化电路的方法求出时间常数(将电流源等效变换为电压源分析);   
       4).计算时间常数应注意各个参数的单位,当电阻的单位是“欧姆”,电容的单位是“法拉”时,乘得的时间常数单位才是“秒”。  
   对于在高频工作下的RC电路,由于寄生参数的影响,很难根据电路中各元器件的标称值来计算出时间常数RC,这时,我们可以根据电容的充放电特性来通过曲线方法计算,前面已经介绍过了,电容充电时,经过一个时间常数RC时,电容上的电压等于充电电源电压的0.63倍,放电时,经过一个时间常数RC时,电容上的电压下降到电源电压的0.37倍。 

明天把信号发射电路部分画完。

 

最大子列和问题

四种方法,由慢到快。

#include<stdio.h>
#define MAXN 100000
int MaxSubSeqSum1(int N,int A[])
{
    int i,j,k;
    int ThisSum = 0;
    int MaxSum = 0;
    i=0;
    j=0;
    k=0;
    for(i=0; i<N; i++)
    {
        for(j=i; j<N; j++)
        {
            ThisSum = 0;
            for(k=i; k<j; k++)
            {
                ThisSum += A[k];
                if(ThisSum > MaxSum)
                    MaxSum = ThisSum; 
            }
        }
    }
    return MaxSum;
}
int MaxSubSeqSum2(int N,int A[])
{
    int i,j,k;
    int ThisSum = 0;
    int MaxSum = 0;
    i=0;
    j=0;
    for(i=0; i<N; i++)
    {
        ThisSum = 0;
        for(j=i; j<N; j++)
        {
            ThisSum += A[j];
            if(ThisSum > MaxSum)
                MaxSum = ThisSum; 
        }
    }
    return MaxSum;
}

int DivideAndConquer(int A[],int left,int right)
{
    int lans,rans,ans;
    int mid;
    int lmax,rmax,sum;
    int i;
    if(left==right)
    {
        return A[left];
    }
    
    mid = (left + right)/2;
    lans = DivideAndConquer(A,left,mid);
    rans = DivideAndConquer(A,mid+1,right);

    sum = 0;
    lmax = A[mid];
    rmax = A[mid+1];
    for(i=mid; i>=left; i--)
    {
        sum += A[i];
        if(sum > lmax) lmax = sum;
    }
    sum = 0;
    for(i=mid+1; i<= right; i++)
    {
        sum += A[i];
        if(sum > rmax) rmax = sum;
    }
    
    ans = rmax + lmax;
    if(lans > ans) 
    {
        return lans;
    }
    else if(rans > ans)
    {
        return rans;
    }

    return ans;


    
}

int MaxSubSeqSum3(int N,int A[])
{
    return DivideAndConquer(A,0,N-1);
}



int MaxSubSeqSum4(int N,int A[])
{
    int ThisSum = 0;
    int MaxSum = 0;

    int i = 0;
    for(i = 0; i<N; i++)
    {
        ThisSum += A[i];
        if(ThisSum > MaxSum)
            MaxSum = ThisSum;
        else if(ThisSum < 0)
        {
            i++;
            ThisSum = A[i];
        }
    }
    return MaxSum;
}

int main()
{
	int K, i;
	int a[MAXN] = {0};
	
	scanf("%d", &K);
	for ( i = 0; i < K; i++ )
		scanf("%d", &a[i]);
	printf("%d", MaxSubSeqSum3( K, a ));    //不同方法此处修改函数名即可。
	
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值