尝试计算电压在哪些频率下达到最大值,我能够打印出最近的最大值,但可能存在能够达到最大电压的较低频率值。
我可以通过以 10 为增量将循环从 + 切换到 - 从 1000000 或切换到 1000000 来获得最高或最低频率。
尝试在 VO > voMax
中嵌套 if 语句
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define PI 3.14f
#define Vi 5
#define L 4.3e-4
#define C 5.1e-6
int getFreq();
long getResist();
float getVO(float XL, float XC, int R);
float getXC(int f);
float getXL(int f);
int main()
{
long resist, freq, fMax;
float XL, XC, VO, voMax;
voMax = 0;
fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{
XL = getXL(freq);
XC = getXC(freq);
VO = getVO(XL, XC, resist);
if (1000000 == freq)
{
fMax = freq;
voMax = VO;
}
else if (VO > voMax)
{
fMax = freq;
voMax = VO;
}
}
printf("VO = %f Frequency = %d\n", voMax, fMax);
getch();
return 0;
}
float getXL(long f)
{
float XL;
XL = 2 * PI * f * C;
return XL;
}
float getXC(long f)
{
float XC;
XC = 1 / (2 * PI * f * C);
return XC;
}
float getVO(float XL, float XC, long R)
{
float VO;
VO = (Vi * R) / sqrt((XL - XC) * (XL - XC) + R * R);
return VO;
}
int getFreq()
{
int freq;
freq = 0;
printf("please enter a frequency:");
scanf("%d", &freq);
return freq;
}
long getResist()
{
int resist;
resist = 0;
printf("please enter a resistance:");
scanf("%d", &resist);
return resist;
}
我希望电压在多个频率下打印最大值。
最佳答案
那么,您想要的是生成“大量”数据,然后进行一些分析。我实际上会分两步实现它:
- 生成数据(并将其保存在数组或文件中)
- 根据您的需要对该数据进行任何分析。
在使用这种明确的方法获得所需结果后,您可以进入下一步并根据您需要的任何优化规则尝试优化算法。
I want the voltage to print max at multiple freq.
我认为您需要一个小的代码更新。您有以下顺序:
voMax = 0;
fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{
你应该有:
fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{
voMax = 0;
(我将“voMax = 0;”移到了“for”中)。
通过这种方式,您可以计算所有频率的最大电压,而不会受到其他频率的干扰。
关于c - 如何使用循环打印多个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249689/