2017-06-19 84 views
1

我在MATLAB代码与6个方程和6个变量的系统。我要解决使用命令vpasolve的公式。 6个变量是T11,T12,T13,T21,T22,T23。寻找解决方案为多个变量

有没有一种方法可以为6个变量中的每一个定义解决方案的范围?

例如,我想定义下列范围内:

T11应为10 50

之间

T12应为20 40

之间

T13应介于10〜50

t21应该在-30到-10之间

t22应该在-10到5之间0

T23应该是-20 0之间

(调整范围之外的任何东西,我不希望得到尽可能即使它解决了方程的解决方案)。

这里是我要解决的方程的MATLAB代码:

clear; 
close all; 
clc; 

syms t11 t12 t13 
syms t21 t22 t23 

eq1 = ((8922777075240195*t11)/9007199254740992 - 30)^2 + (96876011531181065287337706581037*t11^2)/5192296858534827628530496329220096 == (244*t21^2)/15869 + ((125*15869^(1/2)*t21)/15869 - 30)^2; 
eq2 = (12284794394556242997808640319605*t12^2)/1298074214633706907132624082305024 + ((4482238245702333*t12)/4503599627370496 - 30)^2 == (244*t22^2)/15869 + ((125*15869^(1/2)*t22)/15869 - 30)^2; 
eq3 = (45861658983305836864232546144709*t13^2)/2596148429267413814265248164610048 + ((1115910933745515*t13)/1125899906842624 - 30)^2 == (244*t23^2)/13469 + ((115*13469^(1/2)*t23)/13469 - 30)^2; 
eq4 = ((8922777075240195*t11)/9007199254740992 - 30)*((4482238245702333*t12)/4503599627370496 - 30) - (33484849241113011368045542420311*t11*t12)/2596148429267413814265248164610048 == ((125*15869^(1/2)*t21)/15869 - 30)*((125*15869^(1/2)*t22)/15869 - 30) - (244*t21*t22)/15869; 
eq5 = (282621115563350270054313878343*t12*t13)/2596148429267413814265248164610048 + ((1115910933745515*t13)/1125899906842624 - 30)*((4482238245702333*t12)/4503599627370496 - 30) == ((115*13469^(1/2)*t23)/13469 - 30)*((125*15869^(1/2)*t22)/15869 - 30) + (44*13469^(1/2)*15869^(1/2)*t22*t23)/213739561; 
eq6 = ((8922777075240195*t11)/9007199254740992 - 30)*((1115910933745515*t13)/1125899906842624 - 30) - (23445242923211415885353539155021*t11*t13)/5192296858534827628530496329220096 == ((115*13469^(1/2)*t23)/13469 - 30)*((125*15869^(1/2)*t21)/15869 - 30) - (44*13469^(1/2)*15869^(1/2)*t21*t23)/213739561; 

eqs = [eq1; eq2; eq3; eq4; eq5; eq6]; 
fprintf('Trying to solve the equations\n'); 
[t11_sol,t12_sol,t13_sol,t21_sol,t22_sol,t23_sol] = vpasolve(eqs, 
[t11,t12,t13,t21,t22,t23]) 
fprintf('Finished solving the equations\n'); 

这些都是当前的解决方案:

t11_sol = 

           0 
24.829703667085709792452797768139 
-1714.7919752112047717253468263447 
28.624266796914077249128523842231 
15.001105796927906039239701205905 
29.182011950632532749236452699932 
30.474785714576283734530215094123 
28.923418651100014933562154455752 
29.862424638395540307680704064753 


t12_sol = 

          0 
32.391753131232910196633469521587 
354.90128086865450529250280412221 
32.669637807428363812347415161745 
42.313425265860487109475748241225 
35.77251360055612460919268449666 
24.416997056184413504762966564475 
32.200102042415756894425066902384 
32.737813080348733797113244812407 


t13_sol = 

           0 
35.119449427391259768874643471793 
-552.15221602531564524976910795555 
32.333805237521337277174927681791 
30.505819079433077866776605761009 
-15.526604986133423038105829796394 
30.503860894429235257295153122852 
31.531326069780238017082050501478 
30.689747387623702773113477696365 


t21_sol = 

          0 
34.950843287328625731811203211087 
1774.2801076016584748700502034002 
27.7309163513567839404453632282 
44.586181192433735979455732171841 
31.568950443178384558598040442723 
31.645983484625245618431014726401 
31.66220406339283719149782231373 
31.4930547899057272421770424957 


t22_sol = 

           0 
28.719384780320222581709652667396 
-295.26692316474930126337699876656 
31.376616953264529835893660973616 
17.528200591527370984833306720326 
24.321988649431180122662011217513 
34.695990177726174534054308234555 
30.175898983099840329616659669692 
31.493054789906158785302579540812 


t23_sol = 

          0 
24.379180250934429179070181825563 
611.61273095943007252746244555442 
32.247827126007408413822564919395 
30.163585843012112112236997181374 
74.982989890274977913497773016932 
29.293932179042561861772077117988 
28.046073521931256411622489184559 
29.014005238849959150140190833736 

我MATLAB文档中看到,你可以添加一个范围,但我看到的是一个变量的方程。我没有看到任何地方有多个变量范围方程。我还没有看到任何地方,如果有可能或没有。

任何人都可以告诉我如何为每个变量添加范围(如果可能的话)?

此外,给定的代码为每个变量返回9个解。是否有每个变量的默认范围?我怎么知道它可能会错过哪些变量?以及真正存在多少种解决方案?有什么方法可以知道吗?

谢谢!

回答

1

根据用于vpasolve的文档,则应该能够通过2矩阵,其中N是变量的个数,以指定的可变范围为N:

如果init_guess是具有两列的矩阵,那么这两行 这些行指定了相应变量的搜索范围的边界。要指定搜索范围矩阵中的起始点, 将两列都指定为起点值。

你的情况:

varLimits = [10 50; 20 40; 10 50; -30 -10; -10 50; -20 0]; 
[t11_sol,t12_sol,t13_sol,t21_sol,t22_sol,t23_sol] = vpasolve(eqs,... 
[t11,t12,t13,t21,t22,t23], varLimits) 
+0

感谢。但它似乎没有帮助。因为它仍然错过了范围内的解决方案。有没有办法确保程序能够找到范围内的所有解决方案(即使这意味着计算时间会更长)? – David