POJ1045 Bode Plot

题目来源:http://poj.org/problem?id=1045

题目大意:

  

  如图所示的交流电路,假设电路处于稳定状态,Vs为电源电压,w是频率,单位为弧度每秒,t表示时间。

则:V1 = Vs * cos (wt); V2 = VR * cos(wt + q). 其中VR为电阻R两端电压下降的幅度,q是相位。写一个程序确定不同的w对于的VR值。相关的两个电学公式:

欧姆定理:V2 = i*R, i为电流大小

i = C d/dt(V1 - V2).

输入:包括一行或多行。第一行包括三个实数和一个非负整数。实数按顺序是VS,R,C。整数n是测试用例个数。接下来的n行,每行一个实数,表达w的值。

输出:每行对应一个VR值,结果精确到小数点后三位。


Sample Input

1.0 1.0 1.0 9
0.01
0.031623
0.1
0.31623
1.0
3.1623
10.0
31.623
100.0

Sample Output

0.010
0.032
0.100
0.302
0.707
0.953
0.995
1.000
1.000

此题虽然给出的是物理背景,但其实是一道不折不扣的数学题(高中最算不清楚的就是三角函数啊T^T,直接用了别人现成的结果了)。VR公式的推导:

V2 = iR = CR d/dt (VS*cos(wt)-VR*cos(wt+q))=VRcos(wt+q)
      = CR w (sin(wt+q)-sin(wt))=VRcos(wt+q)
下面用到高中数学当中的计算方法,分别令 t=0 和 wt+q=0 ,得到 CRw tan b = 1 和 VR=CRw VS sin b ,
然后利用三角函数中的万能公式,求得 :VR = CRw VS / sqrt (1+ (CRw) ^ 2 ))

 1 //////////////////////////////////////////////////////////////////////////
 2 //        POJ1045 Bode Plot
 3 //        Memory: 160K        Time: 0MS
 4 //        Language: C++        Result: Accepted
 5 //////////////////////////////////////////////////////////////////////////
 6 
 7 #include "cstdio"
 8 #include "math.h"
 9 
10 using namespace std;
11 
12 int main() {
13     int n, i;
14     double vs, r, c, w, vr;
15     scanf("%lf%lf%lf%d", &vs, &r, &c, &n);
16     for (i = 0; i < n; ++i) {
17         scanf("%lf", &w);
18         vr = c * r * w * vs / sqrt(1 + (c * r * w * c * r * w));
19         printf("%.3lf\n", vr);
20     }
21 } 
View Code
posted @ 2013-08-08 19:40  小菜刷题史  阅读(404)  评论(0编辑  收藏  举报