Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB或Python中求解大型非线性方程组? 问题描述_Python_Matlab_Nonlinear Optimization - Fatal编程技术网

如何在MATLAB或Python中求解大型非线性方程组? 问题描述

如何在MATLAB或Python中求解大型非线性方程组? 问题描述,python,matlab,nonlinear-optimization,Python,Matlab,Nonlinear Optimization,我试图解非线性方程组: 我有60个方程(3个方程的变化和中替换的测量数据)和10个复数未知量(分解为20个幅值/相位未知量) 震级以dB为单位指定,应为介于-80和0之间的实际值,标记为s11db、s21db、s22db、s31db、s32db、s33db、s41db、s42db、s43db、s44db 相位以弧度表示,应为介于0和2*pi之间的实值,标记为s11ph、s21ph、s22ph、s31ph、s32ph、s33ph、s41ph、s42ph、s43ph、s44ph 4个附加约束方程强

我试图解非线性方程组:

  • 我有60个方程(3个方程的变化和中替换的测量数据)和10个复数未知量(分解为20个幅值/相位未知量)
  • 震级以dB为单位指定,应为介于-80和0之间的实际值,标记为s11db、s21db、s22db、s31db、s32db、s33db、s41db、s42db、s43db、s44db
  • 相位以弧度表示,应为介于0和2*pi之间的实值,标记为s11ph、s21ph、s22ph、s31ph、s32ph、s33ph、s41ph、s42ph、s43ph、s44ph
  • 4个附加约束方程强制执行被动性
    • | s11 | ^2+| s21 | ^2+| s31 | ^2+| s41 | ^2='))
      #方程。附加(Rel(s21ph,0,'>='))
      #方程.附加(Rel(s22ph,0,'>='))
      #附加(Rel(s31ph,0,'>='))
      #附加(Rel(s32ph,0,'>='))
      #附加(Rel(s33ph,0,'>='))
      #方程.附加(Rel(s41ph,0,'>='))
      #方程.附加(Rel(s42ph,0,'>='))
      #方程.附加(Rel(s43ph,0,'>='))
      #方程.附加(Rel(s44ph,0,'>='))
      #方程.附加(Rel(s11ph,2*sympy.pi,'
      
      
          %% fbnd.m
          function F = fbnd(x)
              mr1=[0.016748068572860958+0.02165573563670993j
                  0.3524499197684044+1.01318272809286j
                  0.9902384965572285-0.4090088119125726j
                  0.9902384965572285-0.4090088119125726j
                  0.8639480592070746-0.6312186830903206j
                  0.8481899405540196-0.6521365553445038j
                  0.8639480592070746-0.6312186830903206j
                  0.8483474812536963-0.6520564750063542j
                  0.8599389505285947-0.6367147924208255j
                  0.844854651665744-0.6565142490941961j
                  0.8599389505285947-0.6367147924208255j
                  0.8596032944139899-0.6370905579072205j
                  0.12178304066817838+0.23419002409258938j
                  0.25810610017732+0.11233917791430391j
                  -0.7881852138612478+0.2941231164148775j
                  0.8537371705084078+0.46722896692551863j
                  0.14050135652671147+0.3073232683089746j
                  0.09456025715651947+0.3638487655929115j
                  0.7994228601750994+0.36132988231302926j
                  -0.5729577316366177+0.3829110562916974j];
              mr2=[0.01886638946281557+0.02291153736938316j
                  0.41115632130362006+0.9904544135078267j
                  -1.0602110266293787+0.12873002023570793j
                  -1.0602110266293787+0.12873002023570793j
                  0.12178304066817838+0.23419002409258938j
                  0.25810610017732+0.11233917791430391j
                  -0.7881852138612478+0.2941231164148775j
                  0.8537371705084078+0.46722896692551863j
                  0.14050135652671147+0.3073232683089746j
                  0.09456025715651947+0.3638487655929115j
                  0.7994228601750994+0.36132988231302926j
                  -0.5729577316366177+0.3829110562916974j
                  0.8639480592070746-0.6312186830903206j
                  0.8481899405540196-0.6521365553445038j
                  0.8639480592070746-0.6312186830903206j
                  0.8483474812536963-0.6520564750063542j
                  0.8599389505285947-0.6367147924208255j
                  0.844854651665744-0.6565142490941961j
                  0.8599389505285947-0.6367147924208255j
                  0.8596032944139899-0.6370905579072205j];
              ms11p=[-0.06420852176004949+0.007606136138496574j
                    -0.537896794882235+0.4041100722456898j
                    0.1412012055714567+0.5635279161255173j
                    0.1937727600367866+0.4292234886620929j
                    0.1469515332766462+0.5314862612846253j
                    0.1518709241016716+0.5310052159365275j
                    0.1578520689668907+0.5331598663019053j
                    0.1540581804228726+0.5392467784421259j
                    0.1431331385368337+0.5325073157781589j
                    0.1535928910517443+0.5342246999907136j
                    0.1512448255547076+0.5392322097605335j
                    0.1473241418663376+0.5318193110512432j
                    -0.2363809027693515+0.1174058767406709j
                    -0.163391416393593+0.08774117501580507j
                    -0.4568108580888767-0.2143100180166485j
                    0.193345944206058-0.04761628164099008j
                    -0.237571999125396+0.1195031741294373j
                    -0.2034191332391219+0.1681349627984851j
                    0.03011118465025885-0.09412680418431373j
                    -0.04464063283385059+0.3528230797332958j];
              ms21p=[-0.003180197204485371-0.002823666341755482j
                    -0.1906367035405745+0.0686968862920421j
                    -0.05526246736964503+0.02635489796438511j
                    0.002518013584325512+0.06590835456839306j
                    -0.03537661863079149+0.08706407624479129j
                    -0.01805052294769753+0.08243849033759301j
                    -0.07056927627440178+0.03869620150023408j
                    0.02738173375006136+0.04029812368020189j
                    -0.02971165660146774+0.08491907637374546j
                    -0.02737424760484992+0.09187392180460466j
                    0.001038602543646932+0.03696165082008047j
                    0.01181224381379054+0.1271817903117702j
                    -0.03214857971468995+0.1284805218320462j
                    -0.01717410586879602+0.1297380448848506j
                    -0.03433798336733016+0.06369364773628092j
                    0.043654417400282+0.1396753864320528j
                    -0.03468050284302436+0.1289630391584528j
                    -0.03705274246077175+0.1366485542793229j
                    0.02030699854620357+0.1217902270543576j
                    -0.0236005339029794+0.1770862461678967j];
              ms22p=[-0.1624942212974896-0.004693967380702952j
                    -0.284542316854743-0.7064738951728178j
                    0.4536543123936424-0.4578177740567013j
                    -0.1024338501849106-0.1979272945233151j
                    -0.1097995580875526-0.198389196010508j
                    -0.07902213390718082-0.08677717201029744j
                    0.3602007967821697-0.4162898752449462j
                    0.1822099768155973+0.3712680606767835j
                    -0.09809454238916153-0.1552338582896147j
                    -0.1688279742308047-0.115960920204985j
                    0.2331637616249181+0.1528931729845114j
                    -0.4800053258074745+0.09873053685139994j
                    -0.7738872200476685-0.04023055998635539j
                    -0.7721863083906342-0.02871292187380659j
                    -0.7821436668003945-0.03478684929877463j
                    -0.7693920578775125-0.04497757228074708j
                    -0.7737959107116188-0.03930039783428967j
                    -0.7721735572720234-0.03995110444341842j
                    -0.7729703027226912-0.04204217380573128j
                    -0.766856877704361-0.04045169338481738j];
              F = zeros(60);
      
      
      
              for n=1:length(ms22p)
                  r1 = mr1(n);
                  r2 = mr2(n);
                  s11p = ms11p(n);
                  s21p = ms21p(n);
                  s22p = ms22p(n);
      
                  s11db = x(1);
                  s21db = x(2);
                  s22db = x(3);
                  s31db = x(4);
                  s32db = x(5);
                  s33db = x(6);
                  s41db = x(7);
                  s42db = x(8);
                  s43db = x(9);
                  s44db = x(10);
      
                  s11ph = x(11);
                  s21ph = x(12);
                  s22ph = x(13);
                  s31ph = x(14);
                  s32ph = x(15);
                  s33ph = x(16);
                  s41ph = x(17);
                  s42ph = x(18);
                  s43ph = x(19);
                  s44ph = x(20);
      
                  s = @(db,ph) 10.^(db/10) * exp(1j*ph);
      
                  index = 3*(n-1)+1;
                  F(index) = ((s(s11db,s11ph) * (1 - (s(s43db,s43ph) * r2 * s(s43db,s43ph) * r1 + s(s33db,s33ph) * r1 + s(s44db,s44ph) *  r2) ...
                      + (s(s33db,s33ph) * r1 * s(s44db,s44ph) * r2)) + s(s31db,s31ph) * r1 * s(s31db,s31ph) * (1-(s(s44db,s44ph) * r2)) ...
                      + s(s31db,s31ph) * r1 * s(s43db,s43ph) * r2 * s(s41db,s41ph) + s(s41db,s41ph) * r2 * s(s41db,s41ph) * (1-( s(s33db,s33ph) * r1)) ...
                      + s(s41db,s41ph) * r2 * s(s43db,s43ph) * r1 * s(s31db,s31ph)) / (1 - (s(s43db,s43ph) *  r2 * s(s43db,s43ph) * r1 ...
                      + s(s33db,s33ph) * r1 + s(s44db,s44ph) * r2) + (s(s33db,s33ph) * r1 * s(s44db,s44ph) * r2))) - s11p;
                  index = 3*(n-1)+2;
                  F(index) = ((s(s32db,s32ph)*r1*s(s31db,s31ph)*(1-(s(s44db,s44ph)*r2)+0)+s(s32db,s32ph)*r1*s(s43db,s43ph)*r2*s(s41db,s41ph)+s(s42db,s42ph)*r2 ...
                         *s(s41db,s41ph)*(1-(s(s33db,s33ph)*r1))+s(s42db,s42ph)*r2*s(s43db,s43ph)*r1*s(s31db,s31ph)+s(s21db,s21ph)*(1 ...
                         -(s(s43db,s43ph)*r2*s(s43db,s43ph)*r1+s(s33db,s33ph)*r1+s(s44db,s44ph)*r2)+(s(s33db,s33ph)*r1*s(s44db,s44ph)*r2))) / (1 ...
                         -(s(s43db,s43ph)*r2*s(s43db,s43ph)*r1+s(s33db,s33ph)*r1+s(s44db,s44ph)*r2)+(s(s33db,s33ph)*r1*s(s44db,s44ph)*r2))) - s21p;
                  index = 3*(n-1)+3;
                  F(index) = ((s(s32db,s32ph)*r1*s(s32db,s32ph)*(1-(s(s44db,s44ph)*r2)+0)+s(s32db,s32ph)*r1*s(s43db,s43ph)*r2*s(s42db,s42ph)*(1-0+0)+s(s22db,s22ph)*(1 ...
                         -(s(s43db,s43ph)*r2*s(s43db,s43ph)*r1+s(s33db,s33ph)*r1+s(s44db,s44ph)*r2)+(s(s33db,s33ph)*r1*s(s44db,s44ph)*r2))+s(s42db,s42ph)*r2* ...
                         s(s42db,s42ph)*(1-(s(s33db,s33ph)*r1)+0)+s(s42db,s42ph)*r2*s(s43db,s43ph)*r1*s(s32db,s32ph)*(1-0+0)) / (1 ...
                         -(s(s43db,s43ph)*r2*s(s43db,s43ph)*r1+s(s33db,s33ph)*r1+s(s44db,s44ph)*r2)+(s(s33db,s33ph)*r1*s(s44db,s44ph)*r2))) - s22p;
              end
          end
      
          %% solve.m
          lb = -80* [1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0];
          ub = 2*pi* [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1];
          guesses = [-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,0,0,0,0,0,0,0,0,0,0];
          options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective',...
              'MaxIterations',5000,...
              'Display','Iter-detailed'...
          );
          %$[x,res] = lsqnonlin(@fbnd,guesses,lb,ub,options);
          optionsf = optimoptions(@fsolve,'Algorithm','trust-region',...
              'Diagnostics','on')
          [x,res] = fsolve(@fbnd,guesses)