吴老师,您好!请教您一个问题。
我想求下面方程组的解:
quadl(@(x) exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-1;
quadl(@(x) x.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m1;
quadl(@(x) x.^2.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m2;
quadl(@(x) x.^3.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m3;
quadl(@(x) x.^4.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m4;
其中m1=0.0177;m2=1.0494;m3=0.0448;m4=3.4693;
(积分上下限本来是正负无穷大,这里用足够大的数代替的)
要求a参数的值,我写了以下的代码求解:
function l=shuju()
a0=[0,0,0,-0.002,-0.000207];
[a,fvar]=fsolve(@f,a0);
function F=f(a)
m1=0.0177;
m2=1.0494;
m3=0.0448;
m4=3.4693;
F=[quadl(@(x)exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-1;
quadl(@(x)x.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m1;
quadl(@(x)x.^2.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m2;
quadl(@(x)x.^3.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m3;
quadl(@(x)x.^4.*exp(a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4),-100,100)-m4];
end
a
fvar
end
但是运行出来的结果一直不是很正确,可能是问题非常依赖与初值的选取吧,会出现:
Maximum function count exceeded; singularity likely.
或者:Optimizer appears to be converging to a minimum that is not a root:
Sum of squares of the function values is > sqrt(options.TolFun).
Try again with a new starting point.
而且改变上下限积分后经常会出现积分为零的情况。
不知道吴老师对于这种问题有没有什么好的建议或者经验。是不是只能通过改变初值来进行试探的求解?或者是不是有更好的方法或者函数可以使用,不知道quadl是不是适合这种问题。
我把方程组转换为优化问题求解,目标函数设定为五个方程的平方和,然后用fmincon求解,出来结果显示:
Optimization terminated: first-order optimality relative error
less than options.TolFun, and relative constraint violation less
than options.TolCon.
但是不论我怎么减小TolFun的值,最后的函数值还是很大,没有收敛。优化方法采用内点法和Active-set方法都是这样。
如果老师有什么建议或者好的想法情不吝赐教,非常感谢!