Matlab中非线性方程组的解集

时间:2018-06-13 17:53:59

标签: matlab

我在Matlab中有一个非线性方程组,我想找到它的解集。该系统如下所示。 enter image description here

想象一下,Matlab函数solve可以与clear %SOME VALUES USED BELOW U1true=1; U2true=-1; U3true=-2; U4true=1; rhotrue=-0.5; mutrue=[0 0]; sigmatrue=[2*(1-rhotrue) 1-rhotrue; 1-rhotrue 2*(1-rhotrue)]; %SET VARIABLES syms U1 U2 U3 U4 rho %SOLVE SYSTEM WITH 6 EQUATIONS S=solve(mvncdf([ U1 -U2+U1], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([ U1true -U2true+U1true], mutrue, sigmatrue) ,... mvncdf([ U2 U2-U1], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([ U2true U2true-U1true], mutrue, sigmatrue),... mvncdf([-U1 -U2], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([-U1true -U2true], mutrue, sigmatrue),... mvncdf([ U3 -U4+U3], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([ U3true -U4true+U3true], mutrue, sigmatrue) ,... mvncdf([ U4 U4-U3], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([ U4true U4true-U3true], mutrue, sigmatrue),... mvncdf([-U3 -U4], [0 0], [2*(1-rho) 1-rho; 1-rho 2*(1-rho)])==mvncdf([-U3true -U4true], mutrue, sigmatrue)); %DISPLAY SOLUTIONS M=[S.U1,S.U2,S.U3,S.U4, S.rho]; 一起使用。我的方程组看起来像这样

mvncdf

这种方法显然不能用于多种原因,最重要的是因为solve不能与slicesample一起使用,例如here所述。

作为解决我的系统的另一种方法,我考虑使用%MAIN clear rng default Utrue=[1;-1;-2;1]; rhotrue=-0.5; number = 100000; initials=[Utrue;rhotrue]; %[U1;U2;U3;U4;rho] rnd = slicesample(initials,number,'pdf',@dens); %ANCILLARY FUNCTIONS TO SAVE function density=dens(param) T=10^(-6); if param(end)>=1 || param(end)<=-1 %rho outside (-1,1) density=0; %force density to be equal to zero else Utrue=[1;-1;-2;1]; rhotrue=-0.5; mutrue=[0 0]; sigmatrue=[2*(1-rhotrue) 1-rhotrue; 1-rhotrue 2*(1-rhotrue)]; truth=mvncdf([ Utrue(1) -Utrue(2)+Utrue(1);... Utrue(2) Utrue(2)-Utrue(1);... -Utrue(1) -Utrue(2) ;... Utrue(3) -Utrue(4)+Utrue(3);... Utrue(4) Utrue(4)-Utrue(3);... -Utrue(3) -Utrue(4)], mutrue, sigmatrue); density=exp(-criterion(param,truth)/T); end end function Q=criterion(param, truth) U=param(1:end-1); rho=param(end); mu=[0,0]; sigma=[2*(1-rho) 1-rho; 1-rho 2*(1-rho)]; candidates=mvncdf([ U(1) -U(2)+U(1);... U(2) U(2)-U(1);... -U(1) -U(2) ;... U(3) -U(4)+U(3);... U(4) U(4)-U(3);... -U(3) -U(4)], mu, sigma); Q=(candidates(1)-truth(1))^2+(candidates(2)-truth(2))^2+(candidates(3)-truth(3))^2+... (candidates(4)-truth(4))^2+(candidates(5)-truth(5))^2+(candidates(6)-truth(6))^2; %this is zero at a solution of the system end 如下

enter image description here

此代码实现了我的想法。

number

问题:使用我建议的方法,当我增加变量rho时,我得到越来越多的rho不同值的解决方案,这符合上面评论说,对于(-1,1)的每个值,系统只有一个且相对于U的解决方案。但是,为了涵盖rho的整个number间隔,在我看来,我需要将变量{{1}}设置得非常高。您是否有(i)可以帮助我改进上述代码以解决此问题的建议,或者(ii)提供我的方程组解决方案的更好方法?

0 个答案:

没有答案