用matlab如何解此方程:ln(x/50)/ln(v/29)=ln(0.5)/ln(0.8)其中v已知.

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/01 04:05:01
用matlab如何解此方程:ln(x/50)/ln(v/29)=ln(0.5)/ln(0.8)其中v已知.
xVISG+RqYf4ĖSYIU9;5ڌb$v IHbfSF6c<3:/Pd8KU@Og}`T19oУ]P՟4V7GDYX  .]Sr4L^{GlQݻ_DIrcFb\[0ax0xX0v-KwXn.N>Rl6Ǯ;#o7->ݹ[nFb+〟[ܶ,mǪdVHP/@r e&@&('#)h٧Z'tN@ƚzBgp|r f!eB3)}Zc7.VQ֋?Jld^yNj4IvE_͓E,kS}e5t#ןjf$OvZJ$akzD ؠщб-Х}]SI'4Fi;t`&m\3[T5 i}Hd`)IWзjE dOK^lȚ}[nQn7[ ]Axcq̐yD̻_ċN"׉Q 3GIPx;%.j,g@}ofP? qj6b{xeP6 KgWQruiâ 9GX|̺k3irᾶZ3)76 4Gy7.LZM8'9ȁQܽDu%lwnqγ͌x2YX6JN=PG,еCZ~ѪCT&Ե pL1:,+6 =#)h Z}z}M;ʮ~h'&W12OKf n|#60mۇM(E瓰yM:; fa`joH/*NMgD"Ԟk6szZ-m:#tm-BWV#)A;Om撝2]!%h? У&mvԬ| PTp轧n+NsvQd4x_WF>N9:>Ǔ+s]x]WuN'X5w~۱sț)+ 6-FiD՗Մ44JgE ki'Z/; |PkK:4WScƼ^xjU"F*t%lq #N?sʳP_ӦM6\4 MO&hGVh@,z@!o,K 8܄ҀXM L`%S,YJ*sbK#zR)o>,,Vxx<DUy<9m-I Q%|L=|{ZM\0Mć)ȤGs׉)) Zl$ghK J]$4Q7e4@T}j? OE1hzv }Ͻ: +$}R$1yeWv;dۣ"C!_=aȒKNI HOXU

用matlab如何解此方程:ln(x/50)/ln(v/29)=ln(0.5)/ln(0.8)其中v已知.
用matlab如何解此方程:ln(x/50)/ln(v/29)=ln(0.5)/ln(0.8)其中v已知.

用matlab如何解此方程:ln(x/50)/ln(v/29)=ln(0.5)/ln(0.8)其中v已知.
参考代码:
>> syms x v
>> solve(log(x/50)/log(v/29)-log(sym(0.5))/log(sym(0.8)),'x')
ans =
    50*exp(log(2)*log(1/29*v)/log(5/4))
 
要点在于,对0.5和0.8取对数之前,先用sym将其转换为符号量,如果直接用 log(0.5)/log(0.8) 则会按照浮点数进行计算,则会造成精度损失,无法得到上面的解析结果.
 
另外有一个问题值得注意,上面的结果是在MATLAB 6.5版得到的(该版本的符号运算内核为Maple),然而在2008b(符号运算内核为MuPad)上得到的结果却是:
    50/exp((log(v/29)*log(2))/log(4/5))
经在多个版本上实测,Maple内核的版本(如6.5、2008a)和MuPad内核的版本(2008b、2101a、2012b)得到的结果的确不同,如果进行验算:
    syms x v
    x=solve(log(x/50)/log(v/29)-log(sym(0.5))/log(sym(0.8)),x)
    simple(log(x/50)/log(v/29)-log(sym(0.5))/log(sym(0.8)))
可已发现,Maple内核的结果没有问题,但MuPad内核的验算结果并不是0!
 
这个结果让我有些震惊,尽管多数用过MATLAB符号运算的人都倾向于认为Maple内核优于MuPad内核,但在这样一个简单的问题上MuPad内核居然会给出一个错误的结果,而且多年未改?那也太可怕了!
 
如果对求解结果做进一步分析,可以知道,其实两种结果是一致的:由于log(5/4)=-log(4/5),而exp(-x)=1/exp(x),所以两种结果其实是等效的.
 
上面的验算之所以MuPad内核结果非0,问题的原因出在进行化简的函数simple上,而且事实上,MuPad内核得到的结果要比Maple内核更严密,例如,如果声明符号变量x v为正,则验算的结果就没问题了:
    syms x v positive
    x=solve(log(x/50)/log(v/29)-log(sym(0.5))/log(sym(0.8)),x)
    simple(log(x/50)/log(v/29)-log(sym(0.5))/log(sym(0.8)))
 
通过这个尝试,也解开了我之前的一个疑惑:
>> syms y
>> (y^3)^(1/3)
ans =
    (y^3)^(1/3)
 
>> syms y positive
>> (y^3)^(1/3)
ans =
    y

之前我一直批评MuPad的符号运算化简功能差,现在看来,应该为MuPad正名才对.
 
本来看上去一个并不复杂的问题,却引申出这么多的分析,想必看的有些不耐烦了吧.其实这些问题我也是开始时感到困惑,后来经过很多分析研究才基本搞明白的,所以就顺手把这个过程写了出来,希望对看到的朋友有帮助(当然,也许本来这些其实很简单,只是我孤陋寡闻而已).

使用solve函数和subs函数可以完成方程运算。

程序在附件中:

结果如下:

当v=5时,