用matlab解一个三元方程,但解代回原方程两边不等对matlab不熟悉,由于临时需要做一个方程组的求解才开始接触这个软件.方程组如下图,我解出结果后,将结果代回原先的方程组,方程两边却不相
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 12:48:25
用matlab解一个三元方程,但解代回原方程两边不等对matlab不熟悉,由于临时需要做一个方程组的求解才开始接触这个软件.方程组如下图,我解出结果后,将结果代回原先的方程组,方程两边却不相
用matlab解一个三元方程,但解代回原方程两边不等
对matlab不熟悉,由于临时需要做一个方程组的求解才开始接触这个软件.方程组如下图,我解出结果后,将结果代回原先的方程组,方程两边却不相等.
最好能给出matlab代码,
下面是我编写的m文件,其中x(1),x(2),x(3)分别对应上图中的R1、R2、R3:
function Test
clc
clear
options=optimset('Display','off');
options.TolFun=1e-30;
options.TolX=1e-16;
x0=[0.4;0.4;0.4]; %初值
[x,fval]=fsolve(@mf,x0,options)
function F=mf(x)
b0=0.611553; b1=1.746500; b2=1.860016; u = 6;
F = [1.0/(x(1)*x(2)*x(3))-b0;1.0/(x(1)*x(2))+(2-u)/(x(1)*x(3))+(3-u)/(x(2)*x(3))-b1;2.0/x(2)+(2-u)/x(3)+1.0/x(1)-b2];
得出的结果:
x =
0.7567
1.2281
11.1929
fval =
-0.5154
-1.3610
0.7326
可以看出,这三个x如果代回到第一个方程中,方程两边根本就不相等,而且差很多.
另外,是做什么的.
我晕,不能插入图片,我的方程组在图片上。不过没关系,m文件中已经给出方程组了。
要解的是这个三个方程组成的方程组:
1.0/(x(1)*x(2)*x(3))=b0
1.0/(x(1)*x(2))+(2-u)/(x(1)*x(3))+(3-u)/(x(2)*x(3))=b1
2.0/x(2)+(2-u)/x(3)+1.0/x(1)=b2;
那么我上面的F=[....]中是不是写的正确呢?
另外,是不是fval应该等于0才对呢,如果解是对的,那么代入方程后,方程自然应该等于0啊
可是我每一次选择初值,得到的fval(1)、fval(2)、fval(3)和0都差很多。从上面也能够看出来。
用matlab解一个三元方程,但解代回原方程两边不等对matlab不熟悉,由于临时需要做一个方程组的求解才开始接触这个软件.方程组如下图,我解出结果后,将结果代回原先的方程组,方程两边却不相
嗯,fval就是告诉你在取x值的时候方程mf的值
首先,你确定你要解的是F = 0 并且F的定义没有错
其次,这个方程的解不唯一,你手解也可以看到这一点.
你对TolFun,TolX的设置没有任用,应该设置:
options=optimset('MaxFunEvals',1e10,'MaxIter',1e10);
这个1e10你自己调,其实就是反复尝试的次数.
Add:
你写的没错,但是这个解不是唯一的.
等于零是理想情况,哪那么多理想情况呢?
何况这个解法,其实就是一个优化问题,你这个方程组有太多局部最小解,不选对一个合适的初始值x0,是得不到你想要的解的.
我建议你先手动把这三个方程组化简一下,化出来以后你就能对的关系有个很清楚认识了,本质上说这个方程组可以化简到只用x1和x2,在这种情况下你试一下吧.
化简到这个程度也可以,你试一下就可以得到解,但代入原方程却不正确:
F = [x(3)-4*x(2)-3*x(1)-b1/b0
2*x(1)*x(3)-4*x(1)*x(2) + x(2)*x(3)- b2/b0];
所以,x(1)*x(2)*x(3) = 1/b0 这个条件很伤人,化简之后,这个条件消失了.
在这种情况下,初始点选不对,得不到最优解.
最后补充:
我认为该方程无实数解.
主要是clear的原因,这下子好了:
function Test
options=optimset('Display','off');
options.TolFun=1e-30;
options.TolX=1e-16;
x0=[0.4;0.4;0.4]; ...
全部展开
主要是clear的原因,这下子好了:
function Test
options=optimset('Display','off');
options.TolFun=1e-30;
options.TolX=1e-16;
x0=[0.4;0.4;0.4]; %初值
[x,fval]=fsolve(@mf,x0,options)
test1=mf(x)
err=test1-fval
function F=mf(x)
b0=0.611553; b1=1.746500; b2=1.860016; u = 6;
F = [1.0/(x(1)*x(2)*x(3))-b0;1.0/(x(1)*x(2))+(2-u)/(x(1)*x(3))+(3-u)/(x(2)*x(3))-b1;2.0/x(2)+(2-u)/x(3)+1.0/x(1)-b2];
结果:
x =
0.8026
1.2176
11.0347
fval =
-0.5188
-1.3981
0.6660
test1 =
-0.5188
-1.3981
0.6660
err =
0
0
0
收起