java - Java中带接口的微分函数
问题描述
我必须编写一个 Java 程序,该程序采用 f(x)=2x-5 之类的函数(但更复杂)并计算 f(x) 并区分为 f'(x)。为此,我必须实现接口函数:
public interface Function {
double evaluate(double x);
Function differentiate();
}
并在几个类中实现接口,例如(还不正确):
public class Constant implements Function {
private final int FS = 0;
@Override
public double evaluate(double n) {
return n;
}
@Override
public Function differentiate() {
return this;
}
public Constant(double value){
evaluate(value);
differentiate();
}
}
是程序所需的“产品”、“窦”等部分。我的问题是我不知道这应该如何工作,因为这些函数是一种抽象的(因为未知的 x),并且接口中的差异方法返回另一个我猜对我没有意义的接口。我是一名新程序员,希望在这里得到一些帮助。非常感谢!
解决方案
如果从字面上理解这项任务,您将需要编写一个表达式解析器,该解析器接受一个类似的字符串"2*sin(x)-5"
并将其转换为组成的调用
F.Sum(F.Prod(F.Cons(2),F.Sin(F.VarX)),F.Cons(-5))
其中F
是工厂类(或模块)的一个实例,其中每个调用都返回Function
相应抽象函数或操作的接口实现。(通过工厂进行操作允许簿记操作,例如检查重复的表达式。)
因此,例如Product
作为返回的对象,F.Prod
将需要Function
对象factor1, factor2
作为从构造函数参数初始化的成员字段。然后数值评估必须看起来像(为有效的函数声明添加通常的装饰)
evaluate(x) { return factor1.evaluate(x)*factor2.evaluate(x); }
并且符号/算法导数将象征性地实现莱布尼茨乘积规则
differentiate() { return Sum(Product(factor1, factor2.differentiate()), Product(factor1.differentiate(),factor2));
正如评论中所说,构造函数中Sine
需要一个参数Function
对象并存储为成员字段argument
。然后数值评估和符号微分看起来像
evaluate(x) {return Math.sin(argument.evaluate(x)); }
differentiate() { return Product(Cos(argument), argument.differentiate())); }
最后一个包括根据链式规则的内导数d/dx(sin(u(x))=cos(u(x))*u'(x)
。
在最低级别,您需要在评估中掉头,这可以使用 with 的子类明智地VariableX
完成Function
evaluate(x) { return x; }
differentiate { return Constant(1); ]
推荐阅读
- eyeshot - 样本的 Eyeshot Document 文件夹
- javascript - 即使被注释掉,Rails 也会渲染部分内容
- javascript - javascript - 带有 setInterval 的函数不会在页面加载时立即启动
- css - 如何使用 CSS 旋转 div 以实现这种类型的 3D 效果?
- r - 使用 R 的地区/城市的特定国家地图
- r - dplyr 不使用 flexdashboard 模板
- c - 无法通过 UDP 发送数据包
- string - 无法处理 Dapper 报价
- flutter - 颤振中的测试错误-断言失败:布尔表达式不能为空
- javascript - angular js ng-click ng-controller 和 ng-app