社区
研发管理
帖子详情
如何对工程中的数值和单位建模?(另外奉送100分)
fengfeng2003
2003-07-02 07:13:11
一个最简单的例子:
理想气体状态方程PV=RT
已知PVT中的两个可求其余一个参数。若PVT可允许任何合法单位,则在设计过程中应
设计一个单位类将参数的数值部分和单位部分分开(根据:《UML和模式应用》)
具体如何设计呢?
请各位大侠帮忙!多谢!
如给出满意解释或源码说明,另外奉送100分。
...全文
52
12
打赏
收藏
如何对工程中的数值和单位建模?(另外奉送100分)
一个最简单的例子: 理想气体状态方程PV=RT 已知PVT中的两个可求其余一个参数。若PVT可允许任何合法单位,则在设计过程中应 设计一个单位类将参数的数值部分和单位部分分开(根据:《UML和模式应用》) 具体如何设计呢? 请各位大侠帮忙!多谢! 如给出满意解释或源码说明,另外奉送100分。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
digital1
2003-07-06
打赏
举报
回复
有两种方法
1 都在operand中实现,使用方便但是扩展性不好,每次有新操作的时候需要在operand中加函数
2 在operand中实现getstandard(),然后:
int main()
{
Operand V=new Operand(ConcreteUnit1());
Operand T=new Operand(ConcreteUnit2());
const double R=123.4;
Operand P=T*cos(R.getStandard())/sin(V.getStandard());
}
我觉得第二种方式好些
所有程序都是伪代码,没有上机测试,可能存在问题
fengfeng2003
2003-07-06
打赏
举报
回复
To digital1(d_jt)
问题又来了,
如果是一个角度量,定义Operand时不仅有+,-,×,/还要有sin,cos...操作
这些函数要是都定义的话,就会有很多成员函数,这应该怎么办啊。
digital1
2003-07-05
打赏
举报
回复
to stonespace(stonespace)
不建议在客户端
SimpleUnit mmHg("mmHg",10130);
客户端尽量少的知道内容
to fengfeng2003()
traits是stl中实现不一致性的。
如一般的加法都一样,但long double的就不一样,可以用traits
另外,我觉得象单位这种永远不变的东西,无所谓你用多少类来实现,一个原则,客户端使用方便才是最重要的,
unit类我给出的是最简单的实现,如果你要考虑效率和资源占用问题,可以使用singleton模式来实现
如果不想麻烦,我觉得我前面给出的实现方式对本问题是最优考虑
stonespace
2003-07-05
打赏
举报
回复
很简单,就象你说的定义一个Unit基类,也不一定要用template,直接定义为类就行。原来template的参数作为构造函数的参数就行。然后还是原来的思路,用实例定义一个单位:
class SimpleUnit :public Unit
{
public:
virtual double ConvertToStandardUnit(double dbValue);
virtual string Print(double dbValue);
public:
SimpleUnit(string UnitName,double ConversionFactor);
};
SimpleUnit MPa("MPa",1e6);
SimpleUnit mmHg("mmHg",10130);
如果某各单位比如SUnit1不能用比例换算的,可以专门定义一个派生类:
class SUnit1 :public Unit
{
public:
virtual double ConvertToStandardUnit(double dbValue);
virtual string Print(double dbValue);
public:
SUnit1();
};
SUnit1 unit;
overwrite单位换算函数,但是还是用实例表示单位。
其实我认为单位只影响到I/O,所以Unit类只需要有一个把当前单位换算为标准单位的方法就行,然后再有格式化输入输出的方法。
如果要做得很灵活,这些表示单位的实例可以放在一个表中,比如vector<Unit *> vtAllUnit中,然后界面输入输出数据的时候,先在vtAllUnit选择一个单位,用选中单位实例把数据转换之后,再进一步处理。
做的好的话,Unit还应该有一个方法,取得单位适用的物理量的类别,比如是V还是P等等。
digital1
2003-07-04
打赏
举报
回复
另外
PressureUnit<"mmHg",10130> mmHg;
还需要客户知道10130等具体内容,这很不好啊
digital1
2003-07-04
打赏
举报
回复
这种方法挺好的,我也考虑过,不过,单位换算不是只有简单的比例啊,比如温度,华氏,绝对温度之间等等,你是不是还要用traits?
其实类多一点也无所谓啊,
呵呵,其实对大量的相同的简单换算可以gp,其他的就不要用gp了
stonespace
2003-07-04
打赏
举报
回复
>我初步考虑这样:为压力,温度等每一个物理量单位建立类,不知你的想法怎样?
我认为这样处理最好。在设计阶段考虑的类,应该从实现角度去考虑,设计阶段的类应该可以处于不同的状态,并且用数据成员保存状态。“单位”对人来说是一个概念,但是很明显,一个特定的单位本身是没有任何可变化的属性,如果强行设计为一个类,会发现这个类不需要有数据成员,而只有方法。通常如果方法不是很多的话,这种情况不应该设计为类,而应该当作一个“值”,即用一个实例表示,就像你设计的PressureUnit<"MPa",1e6> MPa一样。MPa这个实例表示一个单位。
fengfeng2003
2003-07-04
打赏
举报
回复
To stonespace
这只是我的初步设想,但是具体的实现应该怎样呢,能麻烦你解释一下吗?
我想应该设计一个纯虚构的Unit基类,PressureUnit,TemperatureUnit从Unit派生
得到,而后再生成PressureUnit等的各个具体单位。
还有就是,不是比例换算应如何处理呢?
fengfeng2003
2003-07-04
打赏
举报
回复
To digital1:
对啊,如果不是简单的比例怎么办啊?
你说的traits是什么意思,能给我解释一下吗?
多谢!
digital1
2003-07-03
打赏
举报
回复
说明
Operand(IUnit unit)构造函数少了一个参数,就是operand的数值
在operator*/中调用unit的getstandart方法,或者在operand类中增加getstandart方法,
fengfeng2003
2003-07-03
打赏
举报
回复
压力,温度,比容三个物理量常用的单位加起来有十多个,每一个都派生一个类的话
岂不是要有十多个类,如果在实际应用中变量再多的话,是不是造成了类的爆炸。
我初步考虑这样:为压力,温度等每一个物理量单位建立类,不知你的想法怎样?
template<string UnitName,double ConversionFactor>
class PressureUnit
{
.......
};
PressureUnit<"MPa",1e6> MPa;
PressureUnit<"mmHg",10130> mmHg;
.......
digital1
2003-07-02
打赏
举报
回复
interface IUnit
{
public double getStandard(double in);//根据输入数值计算标准单位数值
}
class ConcreteUnit:public IUnit //某个具体的单位,实现interface中的方法
class Operand//操作数
{
Operand(IUnit unit);
operator*
operator/
}
int main()
{
Operand V=new Operand(ConcreteUnit1());
Operand T=new Operand(ConcreteUnit2());
const double R=123.4;
Operand P=T*R/V;
}
PowerDesigner数据库设计与
建模
适合人群: 从事软件系统开发设计人员、高等院校计算机科学与技术、软件
工程
专业、信息系统专业师生参考 课程目标: 学习PowerDesigner
中
常用模型的建立方法和过程,并完成数据库
分
析
建模
的工作 课程简介: 本课程...
[UML]
建模
是什么?为什么要
建模
?
对于
建模
,百度百科上是这样解释的:
建模
就是建立模型,就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。也就是说,
建模
是对现实的简化。为什么要
建模
?就好比如若你自己要建造一座小房子...
[
数值
计算-1]:数学
建模
、科学计算、
数值
计算的关系
数学
建模
与
数值
计是利用数学来解决实际理论和
工程
问题必须的两种工具。 深度学习算法和传统的机器学习算法,本质是就是数学
建模
与
数值
计算在人工智能领域的应用,数学
建模
与
数值
计算能够为理解深度学习的算法提供...
什么是模型?什么是
建模
?
查看了维基百科
中
建模
词条,发现维基百科没有对其做明确的描述,进而给出了可能的“数学
建模
”和“
数值
建模
”,还是不太明白。 直观理解,“
建模
”也就是“建立模型”,那就查一下模型词条吧。该词条
中
也对模型进行...
零基础如何入门数学
建模
?
什么,是数学
建模
?
研发管理
1,265
社区成员
28,324
社区内容
发帖
与我相关
我的任务
研发管理
软件工程/管理 管理版
复制链接
扫一扫
分享
社区描述
软件工程/管理 管理版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章