求解T的值, 这个算法该如何解?

C、C++和Java语言
回复
zta8507
帖子: 2
注册时间: 2013-02-16 23:16
系统: Win7+Ubuntu12.04
送出感谢: 0
接收感谢: 0

求解T的值, 这个算法该如何解?

#1

帖子 zta8507 » 2013-02-16 23:27

表达式中, d,c1,c2,c3,c4,c5,c6,c7都是已知数,请教各位大虾,该如何计算T的值?
其中, ln(T) 可通过数学函数 log(T) 计算.
附件
t.jpg
表达式中, d,c1,c2,c3,c4,c5,c6,c7都是已知数,该如何计算T的值?
头像
枫叶饭团
论坛版主
帖子: 14685
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
送出感谢: 1 次
接收感谢: 132 次
联系:

Re: 求解T的值, 这个算法该如何解?

#2

帖子 枫叶饭团 » 2013-02-16 23:39

数学家在哪里。。。
我数学不好= =:(
meng0987
帖子: 40
注册时间: 2012-11-11 20:08
系统: mavericks
送出感谢: 0
接收感谢: 3 次

Re: 求解T的值, 这个算法该如何解?

#3

帖子 meng0987 » 2013-02-17 0:06

牛顿切线法?
换白苹果后。。配置都不会写了。。
处理器:
内存:
显卡:
声卡:
无线网卡:
有线网卡:
系统:
MacOS 10.9
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
送出感谢: 5 次
接收感谢: 13 次
联系:

Re: 求解T的值, 这个算法该如何解?

#4

帖子 tangboyun » 2013-02-17 8:52

要算法还是软件还是库?
算法可以参考http://en.wikipedia.org/wiki/List_of_algorithms 中2.5.8节的Root finding 一节相关介绍。(要实际应用不要自己去写这类算法。)
库的话可以读下 GNU Scientific Library (or GSL )的manual,至于软件,几乎所有数学软件都有相关部分,搜下manual
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
送出感谢: 1 次
接收感谢: 89 次
联系:

Re: 求解T的值, 这个算法该如何解?

#5

帖子 cuihao » 2013-02-17 9:05

……用万能的牛顿法。
对于这道具体的题目,导函数算是已知的,好写多了。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
zta8507
帖子: 2
注册时间: 2013-02-16 23:16
系统: Win7+Ubuntu12.04
送出感谢: 0
接收感谢: 0

Re: 求解T的值, 这个算法该如何解?

#6

帖子 zta8507 » 2013-02-17 23:21

谢谢大家的帮助,这个公式已经通过牛顿迭代法解决了,下面是C语言代码片段:

double f(double c1, double c2, double c3, double c4, double c5, double c6, double c7, double d, double T)
{
return (c1 + c2*T + c3*pow(T,2) + c4*pow(T,3) + c5*pow(T,4) + c6*pow(T,5) + c7*log(T)*T - d*T);
}

double f1(double c2, double c3, double c4, double c5, double c6, double c7, double d, double T)
{
return (c2 + 2*c3*T + 3*c4*pow(T,2) + 4*c5*pow(T,3) + 5*c6*pow(T,4) + c7*log(T) - d);
}

double newton_ddf()
{
double T;
doubel eps;

T = (double)473.15; // 初值设定很重要
eps = 1E-5;
//初始化c1,c2,c3,c4,c5,c6,c7,d

// 原始表达式 : d= c1/T + c2 + c3*T + c4*T^2 + c5*T^3 + c6*T^4 + c7*ln(T)
// 转换表达式1 : 0 = c1/T + c2 + c3*T + c4*T^2 + c5*T^3 + c6*T^4 + c7*ln(T) - d
// 转换表达式2 : 0 = c1 + c2*T + c3*T^2 + c4*T^3 + c5*T^4 + c6*T^5 + c7*ln(T)*T - d*T
do
{
T1 = T;
T = T1 - f(c1, c2, c3, c4, c5, c6, c7, d, T1) / f1(c2, c3, c4, c5, c6, c7, d, T1);
} while (fabs(T-T1) >= eps);


printf("T: %lf\n", T);
zhugejunqing
帖子: 23
注册时间: 2013-04-17 0:03
系统: ubuntu和windows8和rhel
送出感谢: 0
接收感谢: 0

Re: 求解T的值, 这个算法该如何解?

#7

帖子 zhugejunqing » 2013-04-28 20:22

感觉是数值计算方法里的题目。。。一般用matlab编程,自动求解。。。
红颜易凋零,相知得常青。愿得一人心,白首不相离
头像
b33e
论坛版主
帖子: 3866
注册时间: 2011-06-07 14:20
系统: Mint18
送出感谢: 16 次
接收感谢: 62 次

Re: 求解T的值, 这个算法该如何解?

#8

帖子 b33e » 2013-04-28 20:42

嗯,是我就用matlab
头像
月下叹逍遥
论坛版主
帖子: 33999
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
送出感谢: 8 次
接收感谢: 63 次
联系:

Re: 求解T的值, 这个算法该如何解?

#9

帖子 月下叹逍遥 » 2013-04-28 20:52

Fortran和mathematica...
心似浮云常自在,意如流水任东西。
此事背后一定有个天大的咪咪
广告:
1、走过路过,不要错过,dropbox网盘2.25G大放送
py大法好,退C保平安
java多妖孽,VB本异端
日诵一千遍,快活似神仙
回复

回到 “C/C++/Java”