流体网络拓扑(4)——网络分流算法中的Barczyk法和Cross法的例题

例1

在这里插入图片描述
在这里插入图片描述
代码:

#Barczyk,有回路附加阻力
from sympy import *

q1,r1 = 3,2
q2,r2 = 2,3
q3,r3 = 5,1


C_T = Matrix([[-1],[1]])
i = 0
while True:
    i += 1
    print(f'第{i}次迭代:')
    f1 = round(r1 * q1 * abs(q1) - r2 * q2 * abs(q2), 4)
    f2 = round(r3 * q3 * abs(q3) + r2 * q2 * abs(q2) - 10, 4)

    df11 = round(2*r1*abs(q1)+2*r2*abs(q2), 4)
    df13 = 0
    df21 = 0
    df23 = round(2*r3*abs(q3)+2*r2*abs(q2), 4)
    print('f1=',round(f1,4),'f2=',round(f2,4))
    print('df13=',df11,'df24=',df23)
    J = Matrix([[df11,df13],[df21,df23]])
    print('J:',J)
    J_inv = J**(-1)
    print('J的逆矩阵:',J_inv)
    F = Matrix([[f1],[f2]])
    print('F:',F)
    var_Q = -1*J_inv*F
    print('Q的变量',var_Q)
    max_vq = max(abs(var_Q[0]),abs(var_Q[1]))
    max_f = max(abs(f1),abs(f2))
    if max_vq <= 10**-6 and max_f <= 10**-6:
        print('q1=',q1, 'q2=',q2, 'q3=',q3)
        print(f'max△q = {round(max_vq,4)} , max△f = {round(max_f,4)}')
        break
    else:
        q1 = q1 + var_Q[0]
        q3 = q3 + var_Q[1]
        Q = Matrix([[q1,q3]]) * C_T
        q2 = Q[0]
        print('q1=',q1, 'q2=',q2, 'q3=',q3)
        print(f'max△q = {round(max_vq,4)} , max△f = {round(max_f,4)}')

结果:

1次迭代:
f1= 6 f2= 27
df13= 24 df24= 22
J: Matrix([[24, 0], [0, 22]])
J的逆矩阵: Matrix([[1/24, 0], [0, 1/22]])
F: Matrix([[6], [27]])
Q的变量 Matrix([[-1/4], [-27/22]])
q1= 11/4 q2= 45/44 q3= 83/22
max△q = 1.2273 , max△f = 272次迭代:
f1= 11.9871 f2= 7.3714
df13= 17.1364 df24= 13.6818
J: Matrix([[17.1364, 0], [0, 13.6818]])
J的逆矩阵: Matrix([[0.0583553, 0], [0, 0.0730898]])
F: Matrix([[11.9871], [7.3714]])
Q的变量 Matrix([[-0.699511], [-0.538774]])
q1= 2.05049 q2= 1.18346 q3= 3.23395
max△q = 0.6995 , max△f = 11.98713次迭代:
f1= 4.2072 f2= 4.6602
df13= 15.3027 df24= 13.5687
J: Matrix([[15.3027, 0], [0, 13.5687]])
J的逆矩阵: Matrix([[0.0653479, 0], [0, 0.0736990]])
F: Matrix([[4.2072], [4.6602]])
Q的变量 Matrix([[-0.274932], [-0.343452]])
q1= 1.77556 q2= 1.11494 q3= 2.89050
max△q = 0.3435 , max△f = 4.66024次迭代:
f1= 2.5759 f2= 2.0843
df13= 13.7919 df24= 12.4707
J: Matrix([[13.7919, 0], [0, 12.4707]])
J的逆矩阵: Matrix([[0.0725063, 0], [0, 0.0801880]])
F: Matrix([[2.5759], [2.0843]])
Q的变量 Matrix([[-0.186769], [-0.167136]])
q1= 1.58879 q2= 1.13458 q3= 2.72337
max△q = 0.1868 , max△f = 2.57595次迭代:
f1= 1.1867 f2= 1.2785
df13= 13.1626 df24= 12.2542
J: Matrix([[13.1626, 0], [0, 12.2542]])
J的逆矩阵: Matrix([[0.0759728, 0], [0, 0.0816047]])
F: Matrix([[1.1867], [1.2785]])
Q的变量 Matrix([[-0.0901570], [-0.104332]])
q1= 1.49863 q2= 1.12040 q3= 2.61903
max△q = 0.1043 , max△f = 1.27856次迭代:
f1= 0.7259 f2= 0.6252
df13= 12.7169 df24= 11.9605
J: Matrix([[12.7169, 0], [0, 11.9605]])
J的逆矩阵: Matrix([[0.0786355, 0], [0, 0.0836085]])
F: Matrix([[0.7259], [0.6252]])
Q的变量 Matrix([[-0.0570814], [-0.0522719]])
q1= 1.44155 q2= 1.12521 q3= 2.56676
max△q = 0.0571 , max△f = 0.72597次迭代:
f1= 0.3578 f2= 0.3866
df13= 12.5175 df24= 11.8848
J: Matrix([[12.5175, 0], [0, 11.8848]])
J的逆矩阵: Matrix([[0.0798882, 0], [0, 0.0841411]])
F: Matrix([[0.3578], [0.3866]])
Q的变量 Matrix([[-0.0285839], [-0.0325290]])
q1= 1.41297 q2= 1.12127 q3= 2.53423
max△q = 0.0325 , max△f = 0.38668次迭代:
f1= 0.2212 f2= 0.1941
df13= 12.3795 df24= 11.7961
J: Matrix([[12.3795, 0], [0, 11.7961]])
J的逆矩阵: Matrix([[0.0807787, 0], [0, 0.0847738]])
F: Matrix([[0.2212], [0.1941]])
Q的变量 Matrix([[-0.0178683], [-0.0164545]])
q1= 1.39510 q2= 1.12268 q3= 2.51778
max△q = 0.0179 , max△f = 0.22129次迭代:
f1= 0.1114 f2= 0.1204
df13= 12.3165 df24= 11.7716
J: Matrix([[12.3165, 0], [0, 11.7716]])
J的逆矩阵: Matrix([[0.0811919, 0], [0, 0.0849502]])
F: Matrix([[0.1114], [0.1204]])
Q的变量 Matrix([[-0.00904475], [-0.0102280]])
q1= 1.38605 q2= 1.12150 q3= 2.50755
max△q = 0.0102 , max△f = 0.120410次迭代:
f1= 0.0690 f2= 0.0611
df13= 12.2732 df24= 11.7441
J: Matrix([[12.2732, 0], [0, 11.7441]])
J的逆矩阵: Matrix([[0.0814783, 0], [0, 0.0851491]])
F: Matrix([[0.0690], [0.0611]])
Q的变量 Matrix([[-0.00562203], [-0.00520229]])
q1= 1.38043 q2= 1.12192 q3= 2.50235
max△q = 0.0056 , max△f = 0.069011次迭代:
f1= 0.0351 f2= 0.0378
df13= 12.2532 df24= 11.7362
J: Matrix([[12.2532, 0], [0, 11.7362]])
J的逆矩阵: Matrix([[0.0816113, 0], [0, 0.0852064]])
F: Matrix([[0.0351], [0.0378]])
Q的变量 Matrix([[-0.00286479], [-0.00322111]])
q1= 1.37757 q2= 1.12156 q3= 2.49913
max△q = 0.0032 , max△f = 0.037812次迭代:
f1= 0.0217 f2= 0.0193
df13= 12.2396 df24= 11.7276
J: Matrix([[12.2396, 0], [0, 11.7276]])
J的逆矩阵: Matrix([[0.0817020, 0], [0, 0.0852689]])
F: Matrix([[0.0217], [0.0193]])
Q的变量 Matrix([[-0.00177308], [-0.00164557]])
q1= 1.37579 q2= 1.12169 q3= 2.49748
max△q = 0.0018 , max△f = 0.021713次迭代:
f1= 0.0111 f2= 0.0120
df13= 12.2333 df24= 11.7251
J: Matrix([[12.2333, 0], [0, 11.7251]])
J的逆矩阵: Matrix([[0.0817441, 0], [0, 0.0852871]])
F: Matrix([[0.0111], [0.0120]])
Q的变量 Matrix([[-0.000907422], [-0.00102337]])
q1= 1.37489 q2= 1.12157 q3= 2.49646
max△q = 0.0010 , max△f = 0.012014次迭代:
f1= 0.0068 f2= 0.0061
df13= 12.2290 df24= 11.7224
J: Matrix([[12.2290, 0], [0, 11.7224]])
J的逆矩阵: Matrix([[0.0817728, 0], [0, 0.0853068]])
F: Matrix([[0.0068], [0.0061]])
Q的变量 Matrix([[-0.000555875], [-0.000520671]])
q1= 1.37433 q2= 1.12161 q3= 2.49594
max△q = 0.0006 , max△f = 0.006815次迭代:
f1= 0.0035 f2= 0.0037
df13= 12.2270 df24= 11.7215
J: Matrix([[12.2270, 0], [0, 11.7215]])
J的逆矩阵: Matrix([[0.0817862, 0], [0, 0.0853133]])
F: Matrix([[0.0035], [0.0037]])
Q的变量 Matrix([[-0.000286406], [-0.000315681]])
q1= 1.37404 q2= 1.12158 q3= 2.49562
max△q = 0.0003 , max△f = 0.003716次迭代:
f1= 0.0022 f2= 0.0019
df13= 12.2256 df24= 11.7207
J: Matrix([[12.2256, 0], [0, 11.7207]])
J的逆矩阵: Matrix([[0.0817956, 0], [0, 0.0853191]])
F: Matrix([[0.0022], [0.0019]])
Q的变量 Matrix([[-0.000180039], [-0.000162082]])
q1= 1.37386 q2= 1.12160 q3= 2.49546
max△q = 0.0002 , max△f = 0.002217次迭代:
f1= 0.0011 f2= 0.0013
df13= 12.2250 df24= 11.7205
J: Matrix([[12.2250, 0], [0, 11.7205]])
J的逆矩阵: Matrix([[0.0817996, 0], [0, 0.0853206]])
F: Matrix([[0.0011], [0.0013]])
Q的变量 Matrix([[-9.00237e-5], [-0.000110986]])
q1= 1.37377 q2= 1.12158 q3= 2.49535
max△q = 0.0001 , max△f = 0.001318次迭代:
f1= 0.0007 f2= 0.0006
df13= 12.2245 df24= 11.7202
J: Matrix([[12.2245, 0], [0, 11.7202]])
J的逆矩阵: Matrix([[0.0818029, 0], [0, 0.0853228]])
F: Matrix([[0.0007], [0.0006]])
Q的变量 Matrix([[-5.74178e-5], [-5.14259e-5]])
q1= 1.37372 q2= 1.12158 q3= 2.49530
max△q = 0.0001 , max△f = 0.000719次迭代:
f1= 0.0004 f2= 0.0003
df13= 12.2244 df24= 11.7201
J: Matrix([[12.2244, 0], [0, 11.7201]])
J的逆矩阵: Matrix([[0.0818036, 0], [0, 0.0853235]])
F: Matrix([[0.0004], [0.0003]])
Q的变量 Matrix([[-3.27659e-5], [-2.57132e-5]])
q1= 1.37368 q2= 1.12159 q3= 2.49527
max△q = 0.0 , max△f = 0.000420次迭代:
f1= 0.0001 f2= 0.0003
df13= 12.2243 df24= 11.7201
J: Matrix([[12.2243, 0], [0, 11.7201]])
J的逆矩阵: Matrix([[0.0818043, 0], [0, 0.0853235]])
F: Matrix([[0.0001], [0.0003]])
Q的变量 Matrix([[-8.19154e-6], [-2.57132e-5]])
q1= 1.37367 q2= 1.12157 q3= 2.49525
max△q = 0.0 , max△f = 0.000321次迭代:
f1= 0.0002 f2= 0.0
df13= 12.2241 df24= 11.7199
J: Matrix([[12.2241, 0], [0, 11.7199]])
J的逆矩阵: Matrix([[0.0818056, 0], [0, 0.0853250]])
F: Matrix([[0.0002], [0.0]])
Q的变量 Matrix([[-1.63833e-5], [0]])
q1= 1.37366 q2= 1.12159 q3= 2.49525
max△q = 0.0 , max△f = 0.000222次迭代:
f1= 0.0 f2= 0.0001
df13= 12.2242 df24= 11.7200
J: Matrix([[12.2242, 0], [0, 11.7200]])
J的逆矩阵: Matrix([[0.0818049, 0], [0, 0.0853242]])
F: Matrix([[0.0], [0.0001]])
Q的变量 Matrix([[0], [-8.54401e-6]])
q1= 1.37366 q2= 1.12158 q3= 2.49524
max△q = 0.0 , max△f = 0.000123次迭代:
f1= 0.0001 f2= 0.0
df13= 12.2241 df24= 11.7200
J: Matrix([[12.2241, 0], [0, 11.7200]])
J的逆矩阵: Matrix([[0.0818056, 0], [0, 0.0853242]])
F: Matrix([[0.0001], [0.0]])
Q的变量 Matrix([[-8.19167e-6], [0]])
q1= 1.37365 q2= 1.12159 q3= 2.49524
max△q = 0.0 , max△f = 0.000124次迭代:
f1= 0.0 f2= 0.0001
df13= 12.2241 df24= 11.7200
J: Matrix([[12.2241, 0], [0, 11.7200]])
J的逆矩阵: Matrix([[0.0818056, 0], [0, 0.0853242]])
F: Matrix([[0.0], [0.0001]])
Q的变量 Matrix([[0], [-8.54401e-6]])
q1= 1.37365 q2= 1.12158 q3= 2.49523
max△q = 0.0 , max△f = 0.000125次迭代:
f1= 0.0 f2= 0.0
df13= 12.2241 df24= 11.7199
J: Matrix([[12.2241, 0], [0, 11.7199]])
J的逆矩阵: Matrix([[0.0818056, 0], [0, 0.0853250]])
F: Matrix([[0.0], [0.0]])
Q的变量 Matrix([[0], [0]])
q1= 1.37365 q2= 1.12158 q3= 2.49523
max△q = 0 , max△f = 0

例2

在这里插入图片描述
在这里插入图片描述
代码:

#Barczyk,有回路附加阻力
from sympy import *

q1,r1 = 1,1
q2,r2 = 1,2
q3,r3 = 1,3
q4,r4 = 2,4
q5,r5 = 3,5

C_T = Matrix([[0,-1],[-1,1],[1,0]])
i = 0
while True:
    i += 1
    print(f'第{i}次迭代:')
    f1 = round(r3 * q3 * abs(q3) - r2 * q2 * abs(q2), 4)
    f2 = round(r4 * q4 * abs(q4) - r1 * q1 * abs(q1) + r2 * q2 * abs(q2), 4)
    f3 = round(r5 * q5 * abs(q5) + r1 * q1 * abs(q1) -10, 4)

    df13 = round(2*r3*abs(q3)+2*r2*abs(q2), 4)
    df14 = 0
    df15 = 0
    df23 = 0
    df24 = round(2*r4*abs(q4)+2*r1*abs(q1)+2*r2*abs(q2), 4)
    df25 = 0
    df33 = 0
    df34 = 0
    df35 = round(2*r5*abs(q5)+2*r1*abs(q1), 4)
    print('f1=',round(f1,4),'f2=',round(f2,4),'f3=',round(f3,4))
    print('df13=',df13,'df24=',df24,'df35=',df35)
    J = Matrix([[df13,df14,df15],[df23,df24,df25],[df33,df34,df35]])
    print('J:',J)
    J_inv = J**(-1)
    print('J的逆矩阵:',J_inv)
    F = Matrix([[f1],[f2],[f3]])
    print('F:',F)
    var_Q = -1*J_inv*F
    print('Q的变量',var_Q)
    max_vq = max(abs(var_Q[0]),abs(var_Q[1]),abs(var_Q[2]))
    max_f = max(abs(f1),abs(f2),abs(f3))
    if max_vq <= 10**-4 and max_f <= 10**-4:
        print('q1=',q1, 'q2=',q2, 'q3=',q3, 'q4=',q4, 'q5=',q5)
        print(f'max△q = {round(max_vq,4)} , max△f = {round(max_f,4)}')
        break
    else:
        q3 = q3 + var_Q[0]
        q4 = q4 + var_Q[1]
        q5 = q5 + var_Q[2]
        Q = Matrix([[q3,q4,q5]]) * C_T
        q1,q2 = Q[0],Q[1]
        print('q1=',q1, 'q2=',q2, 'q3=',q3, 'q4=',q4, 'q5=',q5)
        print(f'max△q = {round(max_vq,4)} , max△f = {round(max_f,4)}')

结果:

1次迭代:
f1= 1 f2= 17 f3= 36
df13= 10 df24= 22 df35= 32
J: Matrix([[10, 0, 0], [0, 22, 0], [0, 0, 32]])
J的逆矩阵: Matrix([[1/10, 0, 0], [0, 1/22, 0], [0, 0, 1/32]])
F: Matrix([[1], [17], [36]])
Q的变量 Matrix([[-1/10], [-17/22], [-9/8]])
q1= 57/88 q2= 18/55 q3= 9/10 q4= 27/22 q5= 15/8
max△q = 1.1250 , max△f = 362次迭代:
f1= 2.2158 f2= 5.8195 f3= 7.9977
df13= 6.7091 df24= 12.4227 df35= 20.0455
J: Matrix([[6.7091, 0, 0], [0, 12.4227, 0], [0, 0, 20.0455]])
J的逆矩阵: Matrix([[0.14905, 0, 0], [0, 0.0804978, 0], [0, 0, 0.0498865]])
F: Matrix([[2.2158], [5.8195], [7.9977]])
Q的变量 Matrix([[-0.33027], [-0.468457], [-0.398977]])
q1= 0.717207 q2= 0.189085 q3= 0.56973 q4= 0.758816 q5= 1.47602
max△q = 0.4685 , max△f = 7.99773次迭代:
f1= 0.9023 f2= 1.8603 f3= 1.4076
df13= 4.1747 df24= 8.2613 df35= 16.1946
J: Matrix([[4.1747, 0, 0], [0, 8.2613, 0], [0, 0, 16.1946]])
J的逆矩阵: Matrix([[0.23954, 0, 0], [0, 0.12105, 0], [0, 0, 0.0617490]])
F: Matrix([[0.9023], [1.8603], [1.4076]])
Q的变量 Matrix([[-0.21613], [-0.22518], [-0.0869179]])
q1= 0.855471 q2= 0.180037 q3= 0.35360 q4= 0.533633 q5= 1.38910
max△q = 0.2252 , max△f = 1.86034次迭代:
f1= 0.3103 f2= 0.4721 f3= 0.3799
df13= 2.8417 df24= 6.7002 df35= 15.6020
J: Matrix([[2.8417, 0, 0], [0, 6.7002, 0], [0, 0, 15.6020]])
J的逆矩阵: Matrix([[0.35190, 0, 0], [0, 0.14925, 0], [0, 0, 0.0640943]])
F: Matrix([[0.3103], [0.4721], [0.3799]])
Q的变量 Matrix([[-0.10919], [-0.070460], [-0.0243496]])
q1= 0.901582 q2= 0.218772 q3= 0.24440 q4= 0.463173 q5= 1.36476
max△q = 0.1092 , max△f = 0.47215次迭代:
f1= 0.0835 f2= 0.1410 f3= 0.1256
df13= 2.3415 df24= 6.3836 df35= 15.4507
J: Matrix([[2.3415, 0, 0], [0, 6.3836, 0], [0, 0, 15.4507]])
J的逆矩阵: Matrix([[0.42708, 0, 0], [0, 0.15665, 0], [0, 0, 0.0647220]])
F: Matrix([[0.0835], [0.1410], [0.1256]])
Q的变量 Matrix([[-0.035659], [-0.022088], [-0.00812913]])
q1= 0.915541 q2= 0.232343 q3= 0.20874 q4= 0.441085 q5= 1.35663
max△q = 0.0357 , max△f = 0.14106次迭代:
f1= 0.0228 f2= 0.0480 f3= 0.0404
df13= 2.1818 df24= 6.2891 df35= 15.3973
J: Matrix([[2.1818, 0, 0], [0, 6.2891, 0], [0, 0, 15.3973]])
J的逆矩阵: Matrix([[0.45834, 0, 0], [0, 0.15901, 0], [0, 0, 0.0649464]])
F: Matrix([[0.0228], [0.0480], [0.0404]])
Q的变量 Matrix([[-0.010450], [-0.0076317], [-0.00262368]])
q1= 0.920549 q2= 0.235162 q3= 0.19829 q4= 0.433453 q5= 1.35400
max△q = 0.0104 , max△f = 0.04807次迭代:
f1= 0.0074 f2= 0.0147 f3= 0.0140
df13= 2.1304 df24= 6.2494 df35= 15.3811
J: Matrix([[2.1304, 0, 0], [0, 6.2494, 0], [0, 0, 15.3811]])
J的逆矩阵: Matrix([[0.46940, 0, 0], [0, 0.16002, 0], [0, 0, 0.0650149]])
F: Matrix([[0.0074], [0.0147], [0.0140]])
Q的变量 Matrix([[-0.0034738], [-0.0023522], [-0.000910204]])
q1= 0.921991 q2= 0.236283 q3= 0.19482 q4= 0.431101 q5= 1.35309
max△q = 0.0035 , max△f = 0.01478次迭代:
f1= 0.0022 f2= 0.0050 f3= 0.0044
df13= 2.1140 df24= 6.2379 df35= 15.3749
J: Matrix([[2.1140, 0, 0], [0, 6.2379, 0], [0, 0, 15.3749]])
J的逆矩阵: Matrix([[0.47304, 0, 0], [0, 0.16031, 0], [0, 0, 0.0650411]])
F: Matrix([[0.0022], [0.0050], [0.0044]])
Q的变量 Matrix([[-0.0010412], [-0.00080111], [-0.000286321]])
q1= 0.922506 q2= 0.236523 q3= 0.19378 q4= 0.430300 q5= 1.35281
max△q = 0.0010 , max△f = 0.00509次迭代:
f1= 0.0008 f2= 0.0015 f3= 0.0014
df13= 2.1088 df24= 6.2335 df35= 15.3731
J: Matrix([[2.1088, 0, 0], [0, 6.2335, 0], [0, 0, 15.3731]])
J的逆矩阵: Matrix([[0.47420, 0, 0], [0, 0.16042, 0], [0, 0, 0.0650487]])
F: Matrix([[0.0008], [0.0015], [0.0014]])
Q的变量 Matrix([[-0.00037988], [-0.00024050], [-9.10678e-5]])
q1= 0.922655 q2= 0.236663 q3= 0.19340 q4= 0.430059 q5= 1.35271
max△q = 0.0004 , max△f = 0.001510次迭代:
f1= 0.0002 f2= 0.0005 f3= 0.0005
df13= 2.1070 df24= 6.2324 df35= 15.3725
J: Matrix([[2.1070, 0, 0], [0, 6.2324, 0], [0, 0, 15.3725]])
J的逆矩阵: Matrix([[0.47461, 0, 0], [0, 0.16045, 0], [0, 0, 0.0650512]])
F: Matrix([[0.0002], [0.0005], [0.0005]])
Q的变量 Matrix([[-9.5051e-5], [-8.0794e-5], [-3.27559e-5]])
q1= 0.922703 q2= 0.236677 q3= 0.19330 q4= 0.429978 q5= 1.35268
max△q = 0.0001 , max△f = 0.000511次迭代:
f1= 0.0001 f2= 0.0002 f3= 0.0001
df13= 2.1065 df24= 6.2319 df35= 15.3722
J: Matrix([[2.1065, 0, 0], [0, 6.2319, 0], [0, 0, 15.3722]])
J的逆矩阵: Matrix([[0.47472, 0, 0], [0, 0.16046, 0], [0, 0, 0.0650525]])
F: Matrix([[0.0001], [0.0002], [0.0001]])
Q的变量 Matrix([[-4.7537e-5], [-3.2137e-5], [-6.51408e-6]])
q1= 0.922729 q2= 0.236692 q3= 0.19325 q4= 0.429946 q5= 1.35268
max△q = 0.0 , max△f = 0.000212次迭代:
f1= 0.0 f2= 0.0 f3= 0.0001
df13= 2.1063 df24= 6.2318 df35= 15.3722
J: Matrix([[2.1063, 0, 0], [0, 6.2318, 0], [0, 0, 15.3722]])
J的逆矩阵: Matrix([[0.47477, 0, 0], [0, 0.16047, 0], [0, 0, 0.0650525]])
F: Matrix([[0.0], [0.0], [0.0001]])
Q的变量 Matrix([[0], [0], [-6.51408e-6]])
q1= 0.922723 q2= 0.236692 q3= 0.19325 q4= 0.429946 q5= 1.35267
max△q = 0.0 , max△f = 0.000113次迭代:
f1= 0.0 f2= 0.0 f3= 0.0
df13= 2.1063 df24= 6.2318 df35= 15.3721
J: Matrix([[2.1063, 0, 0], [0, 6.2318, 0], [0, 0, 15.3721]])
J的逆矩阵: Matrix([[0.47477, 0, 0], [0, 0.16047, 0], [0, 0, 0.0650529]])
F: Matrix([[0.0], [0.0], [0.0]])
Q的变量 Matrix([[0], [0], [0]])
q1= 0.922723 q2= 0.236692 q3= 0.19325 q4= 0.429946 q5= 1.35267
max△q = 0 , max△f = 0

例3

在这里插入图片描述
在这里插入图片描述
代码:

#cross法,无回路附加阻力
q1,r1 = -1, 1
q2,r2 = 2, 1
q3,r3 = 0, 1
q4,r4 = 3, 1

def f1(q1,q2,q3,q4):
    f1 = r4 * q4 * abs(q4) + r1 * q1 * abs(q1) - r2 * q2 * abs(q2) - r3 * q3 * abs(q3)
    return f1

vq1 = vq2 = 0
i = 0
while True:
    i += 1
    max_f = max(abs(f1(q1,q2,q3,q4)),0)
    max_vq = max(abs(vq1), abs(vq2))

    if max_vq <= 10**-4 and max_f <= 10**-4:
        print(q1,q2,q3,q4)
        print(f'△f = {max_f}')
        break
    else:
        print(f'第{i}次迭代:')
        #第一条支路
        print(f'f1_0={f1(q1,q2,q3,q4)}')
        df14 = 2 * r4 * abs(q4) + 2 * r1 * abs(q1) + 2 * r2 * abs(q2) + 2 * r3 * abs(q3)
        v_q1 = - f1(q1,q2,q3,q4) / df14
        q1 = q1 + v_q1
        q2 = q2 - v_q1
        q3 = q3 - v_q1
        q4 = q4 + v_q1
        print(f'f1_1={f1(q1,q2,q3,q4)}, df1={df14}, v_q1={v_q1}')
        print(f'q1={q1}, q2={q2}, q3={q3}, q4={q4}')

结果:

1次迭代:
f1_0=4
f1_1=-0.2222222222222236, df1=12, v_q1=-0.3333333333333333
q1=-1.3333333333333333, q2=2.3333333333333335, q3=0.3333333333333333, q4=2.66666666666666652次迭代:
f1_0=-0.2222222222222236
f1_1=-0.0005555555555567665, df1=13.333333333333334, v_q1=0.01666666666666677
q1=-1.3166666666666664, q2=2.316666666666667, q3=0.31666666666666654, q4=2.6833333333333333次迭代:
f1_0=-0.0005555555555567665
f1_1=-3.5072077325670747e-09, df1=13.266666666666666, v_q1=4.187604690126381e-05
q1=-1.3166247906197652, q2=2.3166247906197657, q3=0.3166247906197653, q4=2.6833752093802343
-1.3166247906197652 2.3166247906197657 0.3166247906197653 2.6833752093802343
△f = 3.5072077325670747e-09

例4

在这里插入图片描述
在这里插入图片描述
代码:

#cross法,无回路附加阻力
q1,r1 = -1, 1
q2,r2 = 2, 1
q3,r3 = 0, 1
q4,r4 = 3, 1
q5,r5 = 0, 1

def f1(q2,q3,q5):
    f1 = r3 * q3 * abs(q3) + r2 * q2 * abs(q2) - r5 * q5 * abs(q5)
    return f1
def f2(q1,q4,q5):
    f2 = r4 * q4 * abs(q4) + r1 * q1 * abs(q1) - r5 * q5 * abs(q5)
    return f2

vq1 = vq2 = 0
i = 0
while True:
    i += 1
    max_f = max(abs(f1(q2,q3,q5)),abs(f2(q1,q4,q5)))
    max_vq = max(abs(vq1), abs(vq2))
    if max_vq <= 10**-4 and max_f <= 10**-4:
        print('最终结果:')
        print(f'q1={q1}, q2={q2}, q3={q3}, q4={q4}, q5={q5}')
        print(f'△f = {max_f}')
        break
    else:
        print(f'第{i}次迭代:')
        #第一条支路
        print(f'f1_0={f1(q2,q3,q5)}')
        df13 = 2 * r3 * abs(q3) + 2 * r2 * abs(q2) + 2 * r5 * abs(q5)
        v_q1 = - f1(q2,q3,q5) / df13
        q2 = q2 + v_q1
        q3 = q3 + v_q1
        q5 = q5 - v_q1
        print(f'f1_1={f1(q2,q3,q5)}, df1={df13}, v_q1={v_q1}')
        print(f'q2={q2}, q3={q3}, q5={q5}')
        #第二条支路
        print(f'f2_0={f2(q1,q4,q5)}')
        df24 = 2 * r4 * abs(q4) + 2 * r1 * abs(q1) + 2 * r5 * abs(q5)
        v_q2 = - f2(q1,q4,q5) / df24
        q1 = q1 + v_q2
        q4 = q4 + v_q2
        q5 = q5 - v_q2
        print(f'f2_1={f2(q1,q4,q5)}, df2={df24}, v_q2={v_q2}')
        print(f'q1={q1}, q4={q4}, q5={q5}')

结果:

1次迭代:
f1_0=4
f1_1=-1.0, df1=4, v_q1=-1.0
q2=1.0, q3=-1.0, q5=1.0
f2_0=7.0
f2_1=-0.4900000000000002, df2=10.0, v_q2=-0.7
q1=-1.7, q4=2.3, q5=1.72次迭代:
f1_0=-2.8899999999999997
f1_1=-0.15252191380569813, df1=7.4, v_q1=0.3905405405405405
q2=1.3905405405405404, q3=-0.6094594594594596, q5=1.3094594594594595
f2_0=0.6853159240321396
f2_1=-0.004165057841312603, df2=10.618918918918919, v_q2=-0.06453725932600958
q1=-1.7645372593260096, q4=2.23546274067399, q5=1.37399671878546913次迭代:
f1_0=-0.3257048210710738
f1_1=-0.0023296950178015585, df1=6.747993437570939, v_q1=0.0482669143182091
q2=1.4388074548587495, q3=-0.5611925451412505, q5=1.32572980446726
f2_0=0.12614241093912337
f2_1=-0.0001402503665590693, df2=10.65145960893452, v_q2=-0.0118427347584658
q1=-1.7763799940844753, q4=2.2236200059155244, q5=1.33757253922572584次迭代:
f1_0=-0.03387047825575795
f1_1=-2.5746680258897925e-05, df1=6.675145078451452, v_q1=0.005074118668236567
q2=1.443881573526986, q3=-0.5561184264730139, q5=1.3324984205574892
f2_0=0.013408006535993389
f2_1=-1.580545358814689e-06, df2=10.664996841114979, v_q2=-0.0012571974221599151
q1=-1.7776371915066354, q4=2.2223628084933646, q5=1.33375561797964935次迭代:
f1_0=-0.0033777543843314106
f1_1=-2.5664252545354316e-07, df1=6.6675112359592985, v_q1=0.0005065989789585155
q2=1.4443881725059446, q3=-0.5556118274940554, q5=1.3332490190006907
f2_0=0.001349521280613164
f2_1=-1.6007215331015345e-08, df2=10.666498038001382, v_q2=-0.00012651962019823596
q1=-1.7777637111268336, q4=2.2222362888731664, q5=1.3333755386208896次迭代:
f1_0=-0.00033763696876731863
f1_1=-2.5649060653165634e-09, df1=6.666751077241778, v_q1=5.064490407027594e-05
q2=1.444438817410015, q3=-0.5555611825899851, q5=1.3333248937168187
f2_0=0.00013503878036469352
f2_1=-1.6027401628093685e-10, df2=10.666649787433638, v_q2=-1.2659905692580485e-05
q1=-1.7777763710325263, q4=2.2222236289674737, q5=1.3333375536225114
最终结果:
q1=-1.7777763710325263, q2=1.444438817410015, q3=-0.5555611825899851, q4=2.2222236289674737, q5=1.3333375536225114
△f = 3.376226000351146e-05

猜你喜欢

转载自blog.csdn.net/weixin_48615832/article/details/114118494