试图写一个程序在Java计算幂级数近似in(x)使用以下公式:
x - x^3/3! x^5/5!...x^n/n!
我是用while循环来做的,我似乎无法100%正确地得到sin近似值。你知道我哪里出错了吗?
{
double x = 0.0, sum = 1.0, y;
int n = 1, count = 1;
Scanner kb = new Scanner(System.in);
System.out.println("Enter positive odd integer");
n = kb.nextInt();
System.out.println(n);
System.out.println("Enter x");
x = kb.nextDouble();
y = x;
System.out.println(x);
while (true)
{
if (n == 1)
{sum = x;
}
count = count + 2;
sum = x + (x * -(x * x) / (count * (count - 1)));
x = sum;
if (count >= n)
count = count + 2;
sum = x + (x * -(x * x) / (count * (count - 1)));
x = sum;
break;
}
System.out.println("sum = " +sum);
System.out.printf("sin("+y+") = " +Math.sin(y));
}
这目前给了我以下输出:
Enter positive odd integer
99
Enter x
0.7
sum = 0.598559827320216
sin(0.7) = 0.644217687237691
表达式(计*(计-1))
不是计!
,远非如此。
当计
变成4时,你就开始出错了。因为4!
是24
但4 x 3
只有12
。当然,情况变得更糟:10 x 9
是90
但10!
是惊人的350万。
您的另一个问题是您的if(计数
if (count >= n)
count = count + 2;
sum = x + (x * -(x * x) / (count * (count - 1)));
x = sum;
break;
但是,缩进不能控制这一点,大括号可以。如果没有大括号,只有第一个缩进语句受
if
约束,所有其他语句在每次迭代中都会发生。
但是,尽管如此,您的代码逻辑似乎非常...呃,折磨。大多数无穷级数计算的伟大之处在于,你真的只需要担心总和以及当前项。当你有一个这样的循环时,不断地交换所有这些变量看起来很复杂:
double mult = 1.0;
while (count <= n) {
term = Math.pow(x,count) / facto (count);
sum += mult * term;
count += 2;
mult = -mult;
}
显示这一点的完整程序如下:
import java.util.Scanner;
public class Test {
public static double facto (int inum) {
double num = inum;
while (--inum > 1)
num *= inum;
return num;
}
public static void main(String[] args) {
double term = 0.0, sum = 0.0, x;
int n, count = 1;
Scanner kb = new Scanner(System.in);
System.out.print("Enter positive odd integer: ");
n = kb.nextInt();
if ((n < 1) || (n % 2) == 0) {
System.out.println("Apparently, someone can't read too well :-)");
n = (n < 1) ? 1 : n + 1;
}
System.out.println("Using " + n);
System.out.print("Enter x: ");
x = kb.nextDouble();
System.out.println("Using " + x);
double mult = 1.0;
while (count <= n) {
term = Math.pow(x,count) / facto (count);
sum += mult * term;
count += 2;
mult = -mult;
}
System.out.println("" + sum + " <-- sum");
System.out.printf("" + Math.sin(x) + " <-- sin(" + x + ")");
}
}
以及一个使用您的测试数据运行的示例,展示了它的作用:
Enter positive odd integer: 99
Using 99
Enter x: 0.7
Using 0.7
0.644217687237691 <-- sum
0.644217687237691 <-- sin(0.7)
你没有正确实现这个公式——我看不出幂n在哪里...
我希望你有类似 x = x (n^-1) * (x^(2*n)/fac( (2*n) ) ); 有 n
个步骤
请注意,^运算符不适用于双精度,但这不是复制/粘贴解决方案(从@paxDiablo(https://stackoverflow.com/users/14860/paxdiablo)中看到的,这只是有关如何解决问题的解决方案...
我有一个XDB时间序列数据库,我正在存储一个名为的度量。此度量有两个相关度量,和。每个度量也有一个标记,带有与其关联的供应商id。 每分钟,我都有一个服务,它会整理我调用
我有一对(封闭的)多边形,每个多边形被定义为一个点序列(顶点)。每个多边形都代表一块土地,由一条小河分开,所以溪流在两个多边形之间形成一个狭窄的缝隙。 我正在寻找一种算法,通过将两个多边形连接成一个连接的多边形来识别和消除间隙。 下图显示了一个示例,其中原始多边形为绿色和红色,生成的多边形显示为黄色。 到目前为止,我已经能够做到以下几点: 对于多边形A中的每条边,找到多边形B中最近的顶点。 找到多
这是我的代码: 但它不起作用并显示此错误:
编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 一般来说,我是一名新程序员,如果这个问题有一定的基础,请原谅我。 该程序的目标是简单地计算“最佳体重”,并在运行时在第35行的a和b字符串比较中不断抛出异常。我试图删除逻辑运算符,但这似乎仍然不是问题所在。我错在哪里?
我试图通过将此添加到plugins.sbt来使用sbt替罪羊: addSbtPlugin(“com.sksamuel.替罪羊”%%“sbt替罪羊”%”“1.0.4”) 我的scala版本是: 2.11.12 我的sbt版本是: 1.1.0 我得到了这个错误: 我还尝试在build中指定替罪羊版本(scapegoatVersion)。sbt: 替罪羊版本:=“1.3.4” 我正在使用IntelliJ
我试图在Java中使用这个正则表达式 ,以获取SQL中的表,我得到以下错误: 我找不到错误。 提前感谢您的帮助