需要求反函数的类怎么写?

Gere Yeung 2010-04-07 09:11:50
数学中总是会求反函数,如:
写了一个 y=f(x)的类,但是现在要求 x=f(Y), 这个类怎么写呢?
如现有一个 矩形类, 用 长、宽构造, 使用 get求的 周长和面积,
但是现在要通过 周长或面积求长或宽,怎么办呢?

public class Rectangle {
// constructor
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
//求周长
public double getPerimeter() {
return 2 * length + 2 * width;
}
//求面积
public double getArea() {
return length * width;
}
private double length; //长
private double width; //宽
}
...全文
380 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx8813443 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zangxt 的回复:]
s = w*h
c = 2*(w+h)
数学解方程,求出w和h的表达式,带入程序。
[/Quote]
整理 w^2-(c/2)w+s=0
a=1 b=-c/2 c=s
公式: (-b+-根号b^2-4ac)/2a
Gere Yeung 2010-04-11
  • 打赏
  • 举报
回复
justlearn兄,说得有理,静态方法比较好,
就像 java.math.*;

看来我还是把要用的公式建一个包。
justlearn 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wenzee 的回复:]
对不起各位,是我说错了,不是要写各类求通用反函数,而是说:
比如这个 Rectangle 类,通过面积或周长以及任意一边,求另一边的数学公式我是知道的,
但是这个类怎么组织呢?
因为要 new 一个对象,首先要用 length, width 构造一个对象,
// constructor
public Rectangle(double length, double width) {
……
[/Quote]

方案1应该是不可行的,或者说不太好,因为一旦你构造了这个类,就可以调用public方法了。这是如果你设了个周长,却去调了取面积之类的方法,虽然说是用户的误操作,但是能防止的还是尽量防止这种可能。

个人觉得,set,get方法可以取消,构造方法也取消,这个类就全部静态方法,传参数,算结果。
本身就是很简单的计算,没必要再分几步操作了,你需要new一个类,set长,宽,再取面积,周长。。。
不如直接一个方法,传入长宽,取得面积,周长。
b11ght 2010-04-08
  • 打赏
  • 举报
回复
通用方法不太肯能把,任意一个函数的反函数形式不一样,求的方法也不一样啊。
Gere Yeung 2010-04-08
  • 打赏
  • 举报
回复
对不起各位,是我说错了,不是要写各类求通用反函数,而是说:
比如这个 Rectangle 类,通过面积或周长以及任意一边,求另一边的数学公式我是知道的,
但是这个类怎么组织呢?
因为要 new 一个对象,首先要用 length, width 构造一个对象,
// constructor
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
现在的 length或width需要通过 get方法 求得。
比如需要通过 周长 求 length, 我现在又两个办法,
1. 利用 周长 作为 setLength 的参数,然后返回 length,见
public double getLengthByAPerimeter(double perimeter) 方法。
2. 使用静态方法, 见
public static double getLengthByPerimeterAndWidth() 方法。
public class Rectangle {
// constructor
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
//第一种方法,通过setLength求的:
public double getLengthByAPerimeter(double perimeter) {
this.setLength((perimeter - 2 * this.width) / 2);
return this.length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getPerimeter() {
return 2 * length + 2 * width;
}
public double getArea() {
return length * width;
}
//第二种方法,通过静态方法求的:
public static double getLengthByPerimeterAndWidth(
double perimeter, double width) {
return (perimeter - 2 * width) / 2;
}
private double length;
private double width;
}

以上两种哪一种好呢?
还是两个都不好,有一个非常潇洒的方法?
请指教,各位。
Gere Yeung 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fish1112 的回复:]

解议程组呀。
LZ是不是想要找个通用的方法啊。
[/Quote]
是!
zliuzz 2010-04-08
  • 打赏
  • 举报
回复
对 应该不行 这个反射是不一样的
littlegang 2010-04-08
  • 打赏
  • 举报
回复
学过数学的应该知道求反函数是个很难的问题
joaryyu 2010-04-07
  • 打赏
  • 举报
回复
解议程组呀。
LZ是不是想要找个通用的方法啊。
justlearn 2010-04-07
  • 打赏
  • 举报
回复
反过来求会有多个结果哦,得有个限定吧
ZangXT 2010-04-07
  • 打赏
  • 举报
回复
s = w*h
c = 2*(w+h)
数学解方程,求出w和h的表达式,带入程序。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧