求怎么用计算机算lnx+x=a的解

tcziflw2010 2013-11-11 12:41:52
有没有直接算x公式或其他方法
...全文
2136 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
turing-complete 2013-11-11
  • 打赏
  • 举报
回复
坐等专业人士吧 这个方程还是比较狠的
mLee79 2013-11-11
  • 打赏
  • 举报
回复
引用 9 楼 tcziflw2010 的回复:
[quote=引用 8 楼 mLee79 的回复:] 最后一行弄成 return x; 整理代码的时候弄错了..
这种方法我看对哪种解方程都适用[/quote] 大部分方程都适用, 不过要考虑函数的单调性和导数的连续性, 不然迭代的结果有可能发散..
cjfdqchwhj 2013-11-11
  • 打赏
  • 举报
回复
楼主,用计算机来处理一些数学问题,本人在项目实施过程中会经常遇到。 计算机的本质就是一个机器,是一个擅长数字运算的机器。它的数字计算是有损失的,只要达到精度要求即可。 你先要把这个问题编程给计算机,让计算机去处理。 7楼的朋友,赞一个
tcziflw2010 2013-11-11
  • 打赏
  • 举报
回复
引用 8 楼 mLee79 的回复:
最后一行弄成 return x; 整理代码的时候弄错了..
这种方法我看对哪种解方程都适用
mLee79 2013-11-11
  • 打赏
  • 举报
回复
最后一行弄成 return x; 整理代码的时候弄错了..
mLee79 2013-11-11
  • 打赏
  • 举报
回复
牛顿法就可以了, 精度, 速度都还是可以的, 像这样子.

double slove(double a)
{
	double x, diff, prec;

	if(a>1e20)
		return a;	/* overflow */

	if(a < -715)
		return 0.;	/* underflow */

	if(a > 1)
		x = a, prec = a * 1e-10;
	else if(fabs(a) <= 1)
		x = .567, prec = 1e-10;
	else
		x = exp(a), prec = -a * 1e-10;

	do 
	{
		diff = log(x)+x-a;			
		x -= diff / (1/x + 1);
	} while(fabs(diff) > prec);

	return x - diff / (1/x + 1);
}
lpcads 2013-11-11
  • 打赏
  • 举报
回复
法1 迭代
法2 牛顿弦切
worldy 2013-11-11
  • 打赏
  • 举报
回复
就是求f(x)=lnx+x-a 曲线的解
还有多远 2013-11-11
  • 打赏
  • 举报
回复 1
引用 2 楼 ken_scott 的回复:
要先算好: x = f(a) 其中f(a)中不含x 剩下的才是计算机的工作 这种问题最好用数学工具,比如Matlab语言之类的来做
原式等价于lnx = a - x; 在matlab中先将y = lnx的图像画出,再将y = a - x的图像画出,只要取的点集足够密,就是能够找到符合要求经度的解了
tcziflw2010 2013-11-11
  • 打赏
  • 举报
回复
有大神没?
ken_scott 2013-11-11
  • 打赏
  • 举报
回复
要先算好: x = f(a) 其中f(a)中不含x 剩下的才是计算机的工作 这种问题最好用数学工具,比如Matlab语言之类的来做

65,182

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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