有关用matlab求解表达式方程组的问题。希望大侠给与指点,谢谢。

问题描述:pt1,pt2,pr是三个需要求解的变量,最终结果希望用M,D来表示。pt1,pt2,pr满足下面三个关系式即(1)'2*pr*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) - 2*pr*pt1*pt2*(M - 1)*(1 - pt1)^(M - 2)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1)=0,(2)'2*pr*pt1*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) + 2*pr^2*pt1*pt2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)=0,(3'2*pt1*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) +2*pr*pt1*pt2^2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)=0'。希望求解出pt1,pt2,pr。但是运行结果提示找不到解,但是别的论文上是有解的,不知怎么得到的。matlab程序如下所示:
close all;
clc;
clear;
syms M D
[pt1,pt2,pr]=solve('2*pr*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) - 2*pr*pt1*pt2*(M - 1)*(1 - pt1)^(M - 2)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1)=0',...
'2*pr*pt1*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) + 2*pr^2*pt1*pt2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)=0',...
'2*pt1*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) +2*pr*pt1*pt2^2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)=0')

根据我的经验,可能和MATLAB版本有关。MATLAB的符号数学工具箱不一定版本高的就比版本低的好用(当然,另一方面,也不一定更差)。

就我所知,MATLAB的符号运算早期使用的是Maple内核,后来更换为MuPad内核。更换的原因很复杂,有技术方面的,也有商业方面的。最后一个使用Maple内核的版本是R2008a(符号数学工具箱版本是3.2.3),而从R2007b+开始(注意后面有个加号,不是2007b),则开始使用MuPad内核(符号数学工具箱版本4.9)。

我使用6.5版求解结果如下:
pt1 =
[ 0]
[ pr]
[ 0]
[ pr]
[ 1/pt2]
[ -1/pt2/(D-M)]

pt2 =
[ 0]
[ 0]
[ pt1]
[ 1]
[ pt1]
[ 1/M]

pr =
[ pt2]
[ 0]
[ 0]
[ pt2]
[ pt2]
[ pt2]

而且求解速度很快;但在2010a版上面求解则报告Explicit solution could not be found。建议你换个稍低一些的版本试试,或者如果只想知道结果的话,可以直接使用我上面贴出的内容(提醒一下:未验证是否确实为原方程组的解,一般来说问题不大)。追问

这个有问题啊,pt1,pt2,pr为变量,那么他们的解中就不应该包含这些变量,而应该只是M,D的函数啊。

追答

哦,抱歉,我没注意看你的变量,直接复制能运行就回答了。

如果要求的是pt1,pt2,pr三个变量,那么你上面写的表达式有问题,应该指定要求解的变量(我重新改写了一下,并在后面加了验算):

syms M D
eq1 = '2*pr*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) - 2*pr*pt1*pt2*(M - 1)*(1 - pt1)^(M - 2)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1)';
eq2 = '2*pr*pt1*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) + 2*pr^2*pt1*pt2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)';
eq3 = '2*pt1*pt2*(1 - pt1)^(M - 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 1) +2*pr*pt1*pt2^2*(1 - pt1)^(M - 1)*(D - M + 1)*(1 - pr*(pt2 - 1) - pr)^(M - D - 2)';
[Pr,Pt1,Pt2]=solve(eq1, eq2, eq3, 'pr','pt1','pt2')
for i=1:length(Pr)
pr=Pr(i);
pt1=Pt1(i);
pt2=Pt2(i);
V = simple([eval(eq1), eval(eq2), eval(eq3)])
end

这样在R2008a上(Maple内核)求出的结果是:
Pr =
pr
0
0
1/pt2
pr
pr

Pt1 =
0
pt1
0
pt1
1
1/M

Pt2 =
0
0
pt2
pt2
pt2
pt2

在2012b(MuPad内核)仍然无解。

但是需要注意,在R2008a上尽管有解,但是:
1、有提示 Warning, solutions may have been lost;
2、上面的验算对于第5、6组解的结果非零,也就是实际上不满足方程组;
3、对于前四组解,每一组中至少包含pr、pt1、pt2三个未知量之一,所以实际上也不是有效解。
综上,目前我求解的结论是无显式解(Explicit solution)。

前面回答的关于符号数学工具箱的有关说法仍然是有参考价值的,但是对于这个问题而言,我现在的尝试只能得到上面这个令人失望的结论。

如果你在别的论文上看到有解,建议你把解代入方程组进行验证,看是否你输入的方程组有误,或者原作者给的解不正确。如果经检验,你的输入无误,而且经验证原作者所给解也正确,那么你可以试试联系原作者,看他是用哪个版本(也可能是别的软件)求解的。我能提供的帮助就这么多了,祝你好运。

温馨提示:答案为网友推荐,仅供参考
相似回答