我在我的例子中使用Math.PI,所以它是双倍的。这是一个简单的代码,但有一点我不知道该怎么做:
我希望代码计算X
或sin
函数的基本周期cos
,并使用用户给出的乘数值a
。 n
值初始化为n=1
,是一个整数值。
如果(2 * pi * n)/a = X
的结果低于pi
,那么n
应该递增,并且它应该一直持续到该数字是pi
的倍数,然后打印结果
只是为了澄清:a
是x
的乘数,它在函数sin
或cos
中是这样的:
cos(ax)
sin(ax)
我遇到麻烦的是弄清楚这个数字是pi
的倍数(假设它已经大于pi
,那就是)。
这是我所得到的,而且不完整。
public void printSinusoidalPeriod(double multiplier /* this would be `a` */){
double pi=Math.PI;
double p = (2 * pi * (double) n) / multiplier;
while(p<pi){
if(n%pi==0){
n=n+1;
System.out.println(n);
p = (2 * pi * (double) n) / multiplier;
}
}
p= (double)Math.round(p * 100) / 100;
System.out.println("period of function is = " + p + " and n = " + n);
}
似乎它没有进入if语句并陷入了while循环
答案 0 :(得分:1)
如果我理解正确
while((2 * pi * n)/a)<pi)
{
if(!(n%pi==0))
{
n++;
}
}
y的多个部分是您需要自己弄清楚的部分。但这应该有助于你理解逻辑,如果我理解你的话。
答案 1 :(得分:1)
如果我理解你的问题,我必须在使用php之前解决类似的问题。不确定javascript的正确语法是什么,但也许你应该保持一个持续的计数器,直到(x / pi)是一个整数,表明它是pi的倍数..
我知道这不是正确的代码,但是类似于:
while (!isint(x/pi)) {
x++;
}
if (isint(x/pi)) {
//CODE TO EXECUTE
}
答案 2 :(得分:1)
您似乎正在计算
(2 * pi * n)/a = m * pi where m is some integer multiple.
所以
2 * pi * n = m * pi * a
2 * n = m * a
n = m * a / 2
您的其他约束是
(2 * pi * n)/ a&lt; PI
所以
2 * pi * n < pi * a
2 * n < a
n < a / 2;
要使两个方程都为真,m必须是小于1的整数,但由于你从1开始为n,它永远不会是真的。
答案 3 :(得分:0)
好的,这是我最后在这里的建议的帮助下完成的。
public void printSinusoidalPeriod(double a){
double pi=Math.PI;
double p=m*pi;
while(n<a/2){
if((double)Math.round((n*pi)%pi)!=0.01){
n=n+1;
m = (int) Math.round(((2 * (double) n) / a));
p= (double)Math.round(m * pi * 100) / 100;
p=p*n;
}
}
System.out.println("period of function is = " + p + " and n = " + n);
System.out.println("Check: p/n = " + p/n);
}
如果您发现逻辑问题,请告诉我。我还没有经历过很多可能性,但我所做的那些,看起来对我来说还不错。