题目来源: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 ", vr); 20 } 21 }