realyw 发表于 2009-3-2 13:52

当变量数值太大时如何化简使得matlab能够计算?

需要计算以下式子的函数值,log(exp(x)+exp(y)+exp(z)),因为x,y和z的数值都非常大,以至于matlab中exp(x)的计算结果显示为lnf,请问大家有没有什么办法可以对log(exp(x)+exp(y)+exp(z))进行化简,从而使得可以计算?

friendchj 发表于 2009-3-2 14:13

用rocwoods兄的方法,参见http://forum.vibunion.com/forum/thread-77042-1-1.html
例如:
clear
clc
x0=1000;
y0=1200;
z0=1400;
x1=sym(x0);
y1=sym(y0);
z1=sym(z0);
a1=log(exp(x0)+exp(y0)+exp(z0));
a2=log(exp(x1)+exp(y1)+exp(z1));
disp()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[                               Inf, 1400.0000000000000000000000000000]

realyw 发表于 2009-3-2 14:32

因为还需要用最优化的命令来估计参数,我试了一下,这样好像不行,matlab提示输入的数据不能是字符型的

friendchj 发表于 2009-3-2 14:42

回复 板凳 realyw 的帖子

a2=double(a2)转化为数据,再试试

realyw 发表于 2009-3-2 14:48

转化为数据后就是lnf了,呵呵

friendchj 发表于 2009-3-2 15:01

看样子数据是特别大啊,不太清楚接下来的运算能否转化为符号运算。

realyw 发表于 2009-3-2 17:06

是啊,我都快急死了,怎么办啊?!!!

ChaChing 发表于 2009-3-2 19:06

可否告知x,y,z各为多少?

w89986581 发表于 2009-3-2 19:33

试试mathematica

realyw 发表于 2009-3-2 20:28

x,y和z都是包含待定系数的变量,如x=a+1000b,y=c+1050d,z=e+1100f
其中,a,b,c,d,e,f是我需要估计的参数。

ChaChing 发表于 2009-3-2 23:00

无法知道并了解LZ原始问题的全貌, 工程直觉, 以为应该在某些地方应即可简化才是!

rocwoods 发表于 2009-3-3 09:02

同意ChaChing的观点。工程直觉上感觉应该在某些地方应即可简化。
如果直接做的话建议,找出x,y,z中最大值,譬如z,log(exp(x)+exp(y)+exp(z)) = log(exp(z) (1+exp(y-z) + exp(x-z)) ) = z+log(1+exp(y-z) + exp(x-z) )
(1+exp(y-z) + exp(x-z) ) 是1+p型的问题,p是很小的一个正数
利用log1p函数可以比较准确求log(1+p),p是很小的一个正数的问题。log1p是MATLAB7.0以后增加的函数,具体了解看其帮助文档。

[ 本帖最后由 rocwoods 于 2009-3-3 14:34 编辑 ]
页: [1]
查看完整版本: 当变量数值太大时如何化简使得matlab能够计算?