对于微积分中的编程项目,我们被指示编写一个模拟辛普森1/3和3/8规则的程序。
我们应该接受一个多项式(即5x ^ 2 + 7x + 10),但我正在努力将其概念化。我已经开始使用扫描仪,但有没有更好的方法来正确读取多项式?
非常感谢任何示例或参考资料。
答案 0 :(得分:1)
一种简单的方法(让你开始)就是使用数组
在您的示例中:5x^2 + 7x + 10
将是:
{10,7,5}
即在索引0处,x ^ 0的因子10是索引1处的x ^ 0,对于x ^ 1,索引2处的因子是10,对于x ^ 2是10。
当然这不是最好的方法。想办法弄清楚如何代表x^20
答案 1 :(得分:1)
在java中,最简单的方法是预先设置输入格式,然后只需要求常量 - 例如,"请输入X ^ 2术语" (然后是X项,然后是常数)。
如果这是不可接受的,那么您将非常容易受到输入风格差异的影响。您可以通过+和 - 上的String.split [ting]分隔这些术语,这将留下如下内容:
[5x ^ 2],[7x],[10]
然后,您可以搜索包含" x ^ 2"的字符串。和" x"区分您的条款
首先删除空格和.toLowerCase()以反击用户差异。
当您分割字符串时,您需要识别 - 情况,以便您可以否定这些常量。
你可以做两个分裂,一个在+另一个上 - 。您还可以使用StringTokenizer选项来保留"令牌"这可能更直接但StringTokenizer让一些人有点不舒服,所以请选择适合你的任何东西。
请注意,即使用户键入" 5x ^ 2 + 10 + 7 x"这也会成功,这可能很方便。
答案 2 :(得分:1)
我建议您从一个Function接口开始,该接口接收许多输入值并返回一个输出值:
public interface Function {
double evaluate(double x);
}
写一个多项式实现:
public class Poly {
public static double evaluate(double x, double [] coeffs) {
double value = 0.0;
if (coeffs != null) {
// Use Horner's method to evaluate.
for (int i = coeffs.length-1; i >= 0; --i) {
value = coeffs[i] + (x*value);
}
}
return value;
}
}
将它传递给您的集成商并让它做它的事情。
答案 3 :(得分:0)
我相信解析是我的问题。我对java有些新意,所以这让我很烦恼。
您应该使用parser generator。
解析器生成器是一种读取语法规范并将其转换为可识别与语法匹配的Java程序的工具。除了解析器生成器本身之外,JavaCC还提供与解析器生成相关的其他标准功能,例如树构建(通过JavaCC附带的JJTree工具),操作,调试等。
JavaCC的常见问题解答回答How do I parse arithmetic expressions?
请参阅JavaCC附带的示例。
查看有关编译的任何文字。
请参阅Parsing Epressions by Recursive Descent和Theodore Norvell的教程。