Solve an algebraic matrix equation

2 visualizaciones (últimos 30 días)
Vincent Ike
Vincent Ike el 13 de Jul. de 2021
Comentada: Vincent Ike el 16 de Jul. de 2021
Please I need help to obtain the variables (U, V, W, Th) as the solution of the matrix algebra equation below, say
syms U V W Th
a24 = 0:0.2:5; % which is a step forcing function (in time)
F = rand(4,4)*[U; V; W; Th] - [zeros(4,2), rand(4,2)]*[0; 0; W^2; Th^2] - [zeros(2,26); a24; a24];
Error using symengine (line 59)
Array sizes must match.
Error in sym/privBinaryOp (line 903)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in - (line 7)
X = privBinaryOp(A, B, 'symobj::zip', '_subtract');
I get stuck trying to subtract a 4 by 1 symbol affiliated matrix columnwise from a double 4 by 26 matrix, so that I can obtain the variables using
FF = solve(F == 0,[U,V,W,Th])
I need help with this problem please. Thanks in anticipation.
  5 comentarios
Walter Roberson
Walter Roberson el 13 de Jul. de 2021
For this purpose it is marginally important that symbolic expressions are involved.
MATLAB added implicit expansion for numeric values in R2016b.
However, implicit expansion was not added for symbolic expressions until R2017b.
We can deduce that the user is using R2017a or before.
Vincent Ike
Vincent Ike el 14 de Jul. de 2021
Yes @walter Roberson I use R2015a

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 13 de Jul. de 2021
The operation is permitted in current versions:
syms U V W Th
a24 = 0:0.2:5; % which is a step forcing function (in time)
F = rand(4,4)*[U; V; W; Th] - [zeros(4,2), rand(4,2)]*[0; 0; W^2; Th^2] - [zeros(2,26); a24; a24]
F = 
You did not mark your release or mention your release, so the volunteers are entitled to expect that you are using the newest version.
However, I happen to recognize the issue: in sufficiently old versions of MATLAB, implicit expansion did not exist. Furthermore, in old enough versions, bsxfun() could not be used for symbolic expressions.
In versions that old, you have to repmat()
F = repmat(rand(4,4)*[U; V; W; Th] - [zeros(4,2), rand(4,2)]*[0; 0; W^2; Th^2], 1, 26) - [zeros(2,26); a24; a24]
F = 
  7 comentarios
Walter Roberson
Walter Roberson el 15 de Jul. de 2021
There are four roots per column, not two, if you count the complex solutions. You are working with a quartic.
It would be common to want to filter down to real values.
format long
syms U V W Th
a24 = 0:0.2:5; % which is a step forcing function (in time)
F = repmat(rand(4,4)*[U; V; W; Th] - [zeros(4,2), rand(4,2)]*[0; 0; W^2; Th^2], 1, 26) - [zeros(2,26); a24; a24]
F = 
size(F)
ans = 1×2
4 26
[solTh, solU, solV, solW] = arrayfun(@(COL) solve(F(:,COL), [Th, U, V, W], 'MaxDegree', 4), 1:size(F,2), 'uniform', 0);
Thvals = cell2mat(cellfun(@double, solTh, 'uniform', 0))
Thvals =
-0.094682841308648 - 1.169458034215385i 2.086480594346070 + 0.000000000000000i 2.077784406966989 + 0.000000000000000i 2.066795882117770 + 0.000000000000000i 2.053794533719276 + 0.000000000000000i 2.038985728582344 + 0.000000000000000i 2.022522049377702 + 0.000000000000000i 2.004516987533478 + 0.000000000000000i 1.985053995067856 + 0.000000000000000i 1.964192590106933 + 0.000000000000000i 1.941972506033464 + 0.000000000000000i 1.918416480745901 + 0.000000000000000i 1.893532051138880 + 0.000000000000000i 1.867312574149251 + 0.000000000000000i 1.839737600058620 + 0.000000000000000i 1.810772653755723 + 0.000000000000000i 1.780368421188653 + 0.000000000000000i 1.748459280706609 + 0.000000000000000i 1.714961052314520 + 0.000000000000000i 1.679767749597541 + 0.000000000000000i 1.642746990646218 + 0.000000000000000i 1.603733524609510 + 0.000000000000000i 1.562520003400327 + 0.000000000000000i 1.518843566340973 + 0.000000000000000i 1.472365792402213 + 0.000000000000000i 1.422641643933716 + 0.000000000000000i -0.094682841308648 + 1.169458034215385i -0.191588462920180 + 0.000000000000000i -0.308693627863736 + 0.000000000000000i -0.383827289614846 + 0.000000000000000i -0.434142419854720 + 0.000000000000000i -0.468377862190450 + 0.000000000000000i -0.491368986603327 + 0.000000000000000i -0.506014476764549 + 0.000000000000000i -0.514166684625613 + 0.000000000000000i -0.517068833132778 + 0.000000000000000i -0.515586704069267 + 0.000000000000000i -0.510339554292225 + 0.000000000000000i -0.501778068300653 + 0.000000000000000i -0.490232746397509 + 0.000000000000000i -0.475944888940360 + 0.000000000000000i -0.459086817629438 + 0.000000000000000i -0.439775100856340 + 0.000000000000000i -0.418078966958619 + 0.000000000000000i -0.394025160701052 + 0.000000000000000i -0.367599905080814 + 0.000000000000000i -0.338748196592134 + 0.000000000000000i -0.307370272150378 + 0.000000000000000i -0.273314637267979 + 0.000000000000000i -0.236366403929786 + 0.000000000000000i -0.196228620500677 + 0.000000000000000i -0.152492309223418 + 0.000000000000000i 0.000000000000000 + 0.000000000000000i 0.004119107756266 - 1.296399624887958i 0.067019783917584 - 1.418624948607412i 0.110080877217749 - 1.529559144442854i 0.141739116536933 - 1.630183653277971i 0.166261240273264 - 1.722318188701896i 0.185988642082023 - 1.807515406888357i 0.202313918084746 - 1.886977745764290i 0.216121518248089 - 1.961626965218137i 0.228003294982134 - 2.032177207998635i 0.238372272487112 - 2.099190557970499i 0.247526710242373 - 2.163116664678125i 0.255688182050097 - 2.224320763805330i 0.263025259593340 - 2.283103665714060i 0.269668817910081 - 2.339716222355765i 0.275722255406068 - 2.394369966943788i 0.281268513303054 - 2.447245064241453i 0.286375016595215 - 2.498496341645928i 0.291097227662477 - 2.548257929195656i 0.295481251210847 - 2.596646876044579i 0.299565776442169 - 2.643766003083962i 0.303383547239644 - 2.689706177909450i 0.306962490403037 - 2.734548147533245i 0.310326592263617 - 2.778364028616950i 0.313496587518443 - 2.821218529669286i 0.316490506114062 - 2.863169961402136i 2.092496029555718 + 0.000000000000000i 0.004119107756266 + 1.296399624887958i 0.067019783917584 + 1.418624948607412i 0.110080877217749 + 1.529559144442854i 0.141739116536933 + 1.630183653277971i 0.166261240273264 + 1.722318188701896i 0.185988642082023 + 1.807515406888357i 0.202313918084746 + 1.886977745764290i 0.216121518248089 + 1.961626965218137i 0.228003294982134 + 2.032177207998635i 0.238372272487112 + 2.099190557970499i 0.247526710242373 + 2.163116664678125i 0.255688182050097 + 2.224320763805330i 0.263025259593340 + 2.283103665714060i 0.269668817910081 + 2.339716222355765i 0.275722255406068 + 2.394369966943788i 0.281268513303054 + 2.447245064241453i 0.286375016595215 + 2.498496341645928i 0.291097227662477 + 2.548257929195656i 0.295481251210847 + 2.596646876044579i 0.299565776442169 + 2.643766003083962i 0.303383547239644 + 2.689706177909450i 0.306962490403037 + 2.734548147533245i 0.310326592263617 + 2.778364028616950i 0.313496587518443 + 2.821218529669286i 0.316490506114062 + 2.863169961402136i
Uvals = cell2mat(cellfun(@double, solU, 'uniform', 0))
Uvals =
-1.337768754800854 + 0.370281008481964i 4.147886744121340 + 0.000000000000000i 4.203560186062389 + 0.000000000000000i 4.250258520665525 + 0.000000000000000i 4.289236671744841 + 0.000000000000000i 4.321456315964071 + 0.000000000000000i 4.347670628085559 + 0.000000000000000i 4.368479501435571 + 0.000000000000000i 4.384366836852620 + 0.000000000000000i 4.395726450913830 + 0.000000000000000i 4.402880479358474 + 0.000000000000000i 4.406092656438100 + 0.000000000000000i 4.405577976024064 + 0.000000000000000i 4.401509706214511 + 0.000000000000000i 4.394024388753237 + 0.000000000000000i 4.383225226296037 + 0.000000000000000i 4.369184096585521 + 0.000000000000000i 4.351942302360433 + 0.000000000000000i 4.331510046834908 + 0.000000000000000i 4.307864496160035 + 0.000000000000000i 4.280946127701744 + 0.000000000000000i 4.250652829464192 + 0.000000000000000i 4.216830848578836 + 0.000000000000000i 4.179261067482686 + 0.000000000000000i 4.137637978360862 + 0.000000000000000i 4.091536621178077 + 0.000000000000000i -1.337768754800854 - 0.370281008481964i 0.151621657240662 + 0.000000000000000i 0.315412697274949 + 0.000000000000000i 0.467299478476283 + 0.000000000000000i 0.605192159902538 + 0.000000000000000i 0.730826828987543 + 0.000000000000000i 0.846241109011629 + 0.000000000000000i 0.953172616120265 + 0.000000000000000i 1.053019876536729 + 0.000000000000000i 1.146902914347910 + 0.000000000000000i 1.235728419650252 + 0.000000000000000i 1.320242309412003 + 0.000000000000000i 1.401069436339662 + 0.000000000000000i 1.478743274374451 + 0.000000000000000i 1.553728349607752 + 0.000000000000000i 1.626437574596235 + 0.000000000000000i 1.697246082881442 + 0.000000000000000i 1.766502754777867 + 0.000000000000000i 1.834540366915902 + 0.000000000000000i 1.901685163978232 + 0.000000000000000i 1.968266631030993 + 0.000000000000000i 2.034628350384807 + 0.000000000000000i 2.101141103746500 + 0.000000000000000i 2.168219934876123 + 0.000000000000000i 2.236347949055212 + 0.000000000000000i 2.306111696526823 + 0.000000000000000i 0.000000000000000 + 0.000000000000000i -1.579824069165484 + 0.155947166774068i -1.822634446669780 - 0.006667761087284i -2.055005141088642 - 0.138071360027912i -2.276518693858056 - 0.249708586776252i -2.488523987026801 - 0.347748394596868i -2.692416419616214 - 0.435807057388301i -2.889364746362167 - 0.516180905531849i -3.080310180795550 - 0.590423624507290i -3.266009643248373 - 0.659639629270387i -3.447077546638494 - 0.724645073425437i -3.624018716575809 - 0.786062149931840i -3.797253076349249 - 0.844377379631293i -3.967133996978494 - 0.899979289566606i -4.133962012381135 - 0.953183699362246i -4.297995180163404 - 1.004251238526169i -4.459457005967377 - 1.053399815600127i -4.618542581319673 - 1.100813704462502i -4.775423396142555 - 1.146650302181526i -4.930251155852911 - 1.191045246118383i -5.083160841666774 - 1.234116350680520i -5.234273188741532 - 1.275966679170814i -5.383696711496329 - 1.316686971368663i -5.531529373029692 - 1.356357584047785i -5.677859972074953 - 1.395050058324667i -5.822769303735992 - 1.432828397609563i 4.081554045665995 + 0.000000000000000i -1.579824069165484 - 0.155947166774068i -1.822634446669780 + 0.006667761087284i -2.055005141088642 + 0.138071360027912i -2.276518693858056 + 0.249708586776252i -2.488523987026801 + 0.347748394596868i -2.692416419616214 + 0.435807057388301i -2.889364746362167 + 0.516180905531849i -3.080310180795550 + 0.590423624507290i -3.266009643248373 + 0.659639629270387i -3.447077546638494 + 0.724645073425437i -3.624018716575809 + 0.786062149931840i -3.797253076349249 + 0.844377379631293i -3.967133996978494 + 0.899979289566606i -4.133962012381135 + 0.953183699362246i -4.297995180163404 + 1.004251238526169i -4.459457005967377 + 1.053399815600127i -4.618542581319673 + 1.100813704462502i -4.775423396142555 + 1.146650302181526i -4.930251155852911 + 1.191045246118383i -5.083160841666774 + 1.234116350680520i -5.234273188741532 + 1.275966679170814i -5.383696711496329 + 1.316686971368663i -5.531529373029692 + 1.356357584047785i -5.677859972074953 + 1.395050058324667i -5.822769303735992 + 1.432828397609563i
Vvals = cell2mat(cellfun(@double, solV, 'uniform', 0))
Vvals =
-0.504055209573428 + 0.375368805056658i 1.538127719112909 + 0.000000000000000i 1.890511678779503 + 0.000000000000000i 2.239840799349641 + 0.000000000000000i 2.586550305531252 + 0.000000000000000i 2.930975461892485 + 0.000000000000000i 3.273380473029579 + 0.000000000000000i 3.613977359915537 + 0.000000000000000i 3.952938744999917 + 0.000000000000000i 4.290406771478357 + 0.000000000000000i 4.626499475971578 + 0.000000000000000i 4.961315427222944 + 0.000000000000000i 5.294937147196451 + 0.000000000000000i 5.627433650621144 + 0.000000000000000i 5.958862324873501 + 0.000000000000000i 6.289270296695796 + 0.000000000000000i 6.618695379709691 + 0.000000000000000i 6.947166657143294 + 0.000000000000000i 7.274704720846710 + 0.000000000000000i 7.601321554900924 + 0.000000000000000i 7.927020013930278 + 0.000000000000000i 8.251792794379593 + 0.000000000000000i 8.575620717975008 + 0.000000000000000i 8.898470015403628 + 0.000000000000000i 9.220288065124281 + 0.000000000000000i 9.540996600448889 + 0.000000000000000i -0.504055209573428 - 0.375368805056658i 0.425952114310920 + 0.000000000000000i 0.841967175397670 + 0.000000000000000i 1.245051555178251 + 0.000000000000000i 1.637772165506094 + 0.000000000000000i 2.022531164515393 + 0.000000000000000i 2.401078554174221 + 0.000000000000000i 2.774665087221919 + 0.000000000000000i 3.144202622804048 + 0.000000000000000i 3.510374041664118 + 0.000000000000000i 3.873704412200672 + 0.000000000000000i 4.234607352502596 + 0.000000000000000i 4.593415923112354 + 0.000000000000000i 4.950403771429729 + 0.000000000000000i 5.305800008380226 + 0.000000000000000i 5.659799970539773 + 0.000000000000000i 6.012573234731134 + 0.000000000000000i 6.364269781274358 + 0.000000000000000i 6.715024917878184 + 0.000000000000000i 7.064963406763741 + 0.000000000000000i 7.414203144181120 + 0.000000000000000i 7.762858705799702 + 0.000000000000000i 8.111045091132313 + 0.000000000000000i 8.458882090336328 + 0.000000000000000i 8.806499901058485 + 0.000000000000000i 9.154047044217846 + 0.000000000000000i 0.000000000000000 + 0.000000000000000i -0.289213068042489 + 0.316657961026758i -0.067584248920351 + 0.277225925982538i 0.162037330403100 + 0.247762453617693i 0.398150601647183 + 0.223989032114299i 0.639386853460727 + 0.203854096904311i 0.884738982561576 + 0.186250862023458i 1.133475602093557 + 0.170519225798469i 1.385054471259112 + 0.156233909123522i 1.639063078088668 + 0.143104231345594i 1.895179870072590 + 0.130922155241616i 2.153148753794755 + 0.119533255261260i 2.412761938001932 + 0.108819468524092i 2.673848091629708 + 0.098688314897300i 2.936263965527091 + 0.089065870041373i 3.199888328034980 + 0.079892019272787i 3.464617483931162 + 0.071117153491821i 3.730361901441559 + 0.062699808381617i 3.997043630786747 + 0.054604939049523i 4.264594298815672 + 0.046802633892629i 4.532953530091115 + 0.039267139009943i 4.802067688555977 + 0.031976106629563i 5.071888863590774 + 0.024910008045871i 5.342374044773266 + 0.018051669320386i 5.613484444050670 + 0.011385899926830i 5.885184934307497 + 0.004899192691078i 1.182107457488089 + 0.000000000000000i -0.289213068042489 - 0.316657961026758i -0.067584248920351 - 0.277225925982538i 0.162037330403100 - 0.247762453617693i 0.398150601647183 - 0.223989032114299i 0.639386853460727 - 0.203854096904311i 0.884738982561576 - 0.186250862023458i 1.133475602093557 - 0.170519225798469i 1.385054471259112 - 0.156233909123522i 1.639063078088668 - 0.143104231345594i 1.895179870072590 - 0.130922155241616i 2.153148753794755 - 0.119533255261260i 2.412761938001932 - 0.108819468524092i 2.673848091629708 - 0.098688314897300i 2.936263965527091 - 0.089065870041373i 3.199888328034980 - 0.079892019272787i 3.464617483931162 - 0.071117153491821i 3.730361901441559 - 0.062699808381617i 3.997043630786747 - 0.054604939049523i 4.264594298815672 - 0.046802633892629i 4.532953530091115 - 0.039267139009943i 4.802067688555977 - 0.031976106629563i 5.071888863590774 - 0.024910008045871i 5.342374044773266 - 0.018051669320386i 5.613484444050670 - 0.011385899926830i 5.885184934307497 - 0.004899192691078i
Wvals = cell2mat(cellfun(@double, solW, 'uniform', 0))
Wvals =
0.799679476330780 - 0.841095593907892i -1.592380803469869 + 0.000000000000000i -1.674426897140375 + 0.000000000000000i -1.751966864870528 + 0.000000000000000i -1.825652020612525 + 0.000000000000000i -1.895986058491776 + 0.000000000000000i -1.963367746894912 + 0.000000000000000i -2.028118866002349 + 0.000000000000000i -2.090503174160550 + 0.000000000000000i -2.150739680847249 + 0.000000000000000i -2.209012172212263 + 0.000000000000000i -2.265476190489518 + 0.000000000000000i -2.320264233416095 + 0.000000000000000i -2.373489675456903 + 0.000000000000000i -2.425249746225831 + 0.000000000000000i -2.475627792939262 + 0.000000000000000i -2.524694980011617 + 0.000000000000000i -2.572511526093993 + 0.000000000000000i -2.619127537923073 + 0.000000000000000i -2.664583464619840 + 0.000000000000000i -2.708910159496266 + 0.000000000000000i -2.752128491792144 + 0.000000000000000i -2.794248387207062 + 0.000000000000000i -2.835267074342088 + 0.000000000000000i -2.875166136297033 + 0.000000000000000i -2.913906631752097 + 0.000000000000000i 0.799679476330780 + 0.841095593907892i -0.237720136058116 + 0.000000000000000i -0.444554099309726 + 0.000000000000000i -0.622080124030598 + 0.000000000000000i -0.777863240702378 + 0.000000000000000i -0.917534549677085 + 0.000000000000000i -1.044893165145636 + 0.000000000000000i -1.162544012017425 + 0.000000000000000i -1.272334529393337 + 0.000000000000000i -1.375619727331622 + 0.000000000000000i -1.473423624594866 + 0.000000000000000i -1.566540454409061 + 0.000000000000000i -1.655600263387808 + 0.000000000000000i -1.741112826864168 + 0.000000000000000i -1.823497940488323 + 0.000000000000000i -1.903106899457258 + 0.000000000000000i -1.980238131051339 + 0.000000000000000i -2.055148868114853 + 0.000000000000000i -2.128064105776656 + 0.000000000000000i -2.199183691172421 + 0.000000000000000i -2.268688158280731 + 0.000000000000000i -2.336743784825519 + 0.000000000000000i -2.403507291303494 + 0.000000000000000i -2.469130621645908 + 0.000000000000000i -2.533766365638827 + 0.000000000000000i -2.597574677650533 + 0.000000000000000i 0.000000000000000 + 0.000000000000000i 0.962249250235563 - 0.770907965007232i 1.106689278696621 - 0.731089165352370i 1.234222274922134 - 0.705220050381949i 1.348956411129022 - 0.686548000601008i 1.453959084556002 - 0.672102297646812i 1.551329236491845 - 0.660393363747881i 1.642530219481457 - 0.650587538929500i 1.728617632248514 - 0.642176854853886i 1.810378484561006 - 0.634830771254546i 1.888416678875136 - 0.628322820203841i 1.963207102920860 - 0.622491315078081i 2.035131028873522 - 0.617216892914531i 2.104500031632106 - 0.612408969851718i 2.171572623828648 - 0.607997196681545i 2.236566126669831 - 0.603925859764615i 2.299665336003049 - 0.600150090784758i 2.361028977575994 - 0.596633227988520i 2.420794602321435 - 0.593344933685396i 2.479082358367701 - 0.590259822202744i 2.535997939360069 - 0.587356440792213i 2.591634918780402 - 0.584616499863304i 2.646076619726849 - 0.582024282742178i 2.699397628465569 - 0.579566186932926i 2.751665031439501 - 0.577230363207401i 2.802939435172886 - 0.575006428500804i -1.504961391718419 + 0.000000000000000i 0.962249250235563 + 0.770907965007232i 1.106689278696621 + 0.731089165352370i 1.234222274922134 + 0.705220050381949i 1.348956411129022 + 0.686548000601008i 1.453959084556002 + 0.672102297646812i 1.551329236491845 + 0.660393363747881i 1.642530219481457 + 0.650587538929500i 1.728617632248514 + 0.642176854853886i 1.810378484561006 + 0.634830771254546i 1.888416678875136 + 0.628322820203841i 1.963207102920860 + 0.622491315078081i 2.035131028873522 + 0.617216892914531i 2.104500031632106 + 0.612408969851718i 2.171572623828648 + 0.607997196681545i 2.236566126669831 + 0.603925859764615i 2.299665336003049 + 0.600150090784758i 2.361028977575994 + 0.596633227988520i 2.420794602321435 + 0.593344933685396i 2.479082358367701 + 0.590259822202744i 2.535997939360069 + 0.587356440792213i 2.591634918780402 + 0.584616499863304i 2.646076619726849 + 0.582024282742178i 2.699397628465569 + 0.579566186932926i 2.751665031439501 + 0.577230363207401i 2.802939435172886 + 0.575006428500804i
mask = imag(Thvals) == 0 & imag(Uvals) == 0 & imag(Vvals) == 0 & imag(Wvals) == 0;
[Thvals(mask), Uvals(mask), Vvals(mask), Wvals(mask)]
ans = 52×4
0 0 0 0 2.092496029555718 4.081554045665995 1.182107457488089 -1.504961391718419 2.086480594346070 4.147886744121340 1.538127719112909 -1.592380803469869 -0.191588462920180 0.151621657240662 0.425952114310920 -0.237720136058116 2.077784406966989 4.203560186062389 1.890511678779503 -1.674426897140375 -0.308693627863736 0.315412697274949 0.841967175397670 -0.444554099309726 2.066795882117770 4.250258520665525 2.239840799349641 -1.751966864870528 -0.383827289614846 0.467299478476283 1.245051555178251 -0.622080124030598 2.053794533719276 4.289236671744841 2.586550305531252 -1.825652020612525 -0.434142419854720 0.605192159902538 1.637772165506094 -0.777863240702378
The number of solutions is highly variable. Some of my tests showed as few as two solutions, and some of them showed as high as 84 solutions.
Vincent Ike
Vincent Ike el 16 de Jul. de 2021
Thank you Walter, I have got much insight with your responses. Now, I have a good question here, https://www.mathworks.com/matlabcentral/answers/879973-how-to-solve-four-sets-of-ode-having-four-variables. I hope to learn more from you.

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by