Последний раз редактировалось Snegovik 04.07.2019, 16:26, всего редактировалось 3 раз(а).
Раз нет попыток значит все знают как решить, но все равно приведу свои решения. Первый способ классический через законы Кирхгофа. Составляем 6 уравнений. В схеме 4 узла, значит составляем 3 уравнения по первому правилу Кирхгофа, составим их для узлов A, B и C. Неизвестных у нас 6, значит оставшися 3 уравнения составим по второму правилу Кирхгофа. Первым возьмем контур по источнику питания с протеканием тока через R1 и R2. Вторым с протеканием тока через R4 И R5, третьим с протеканием тока через R1, R3 и R5. За направление обхода примем движение по часовой стрелке, у нас это везде совпадает с направлением тока (зеленая пунктирная линия на рисунке), значит везде будет плюс. Пишем уравнения. записав в матричной форме получим коэффициенты СЛАУ для главной матрицы Код: -1 0 0 -1 0 1 0 0 1 1 -1 0 0 1 0 0 1 -1 1000 2000 0 0 0 0 0 0 0 1500 1700 0 1000 0 800 0 1700 0
и коэффициенты для правой части Код: 0 0 0 100 100 100
И пишем код расчета
program main
implicit none
real :: a(6,6), b(6), x(6), r(5), u(6)
integer :: info, ipiv(6), j
!Массив сопротивлений
data r /1000, 2000, 800, 1500, 1700/
!Прочитаем данные главной матрицы СЛАУ
open (101,file='slaua.txt')
read (101,*) (a(j,:),j=1,6)
close (101)
!Прочитаем массив правой части СЛАУ
open (102,file='slaub.txt')
read (102,*) b
close (102)
!Решим СЛАУ подпрограммой Lapack
x=b; call sgesv(6, 1, a, 6, ipiv, x, 6, info)
!Вычислим напряжения
do concurrent (j=1:5)
u(j) = r(j) * x(j)
end do
u(6) = u(1) + u(2)
print*, "Результаты:"
print 10, " u1 = ", u(1), " В"
print 10, " u2 = ", u(2), " В"
print 10, " u3 = ", u(3), " В"
print 10, " u4 = ", u(4), " В"
print 10, " u5 = ", u(5), " В"
print 10, " u = ", u(6), " В"
print*,
print 10, " i1 = ", x(1)*1e3, " mA"
print 10, " i2 = ", x(2)*1e3, " mA"
print 10, " i3 = ", x(3)*1e3, " mA"
print 10, " i4 = ", x(4)*1e3, " mA"
print 10, " i5 = ", x(5)*1e3, " mA"
print 10, " i = ", x(6)*1e3, " mA"
10 format (a, f7.2, a)
end program main
Получили: Код: Результаты: u1 = 37.32 В u2 = 62.68 В u3 = 4.79 В u4 = 42.11 В u5 = 57.89 В u = 100.00 В
i1 = 37.32 mA i2 = 31.34 mA i3 = 5.98 mA i4 = 28.07 mA i5 = 34.05 mA i = 65.39 mA
=== Но суть была в том, что есть решение много проще. Можно воспользоваться методом замены треугольника в звезду. В этом случае не нужно составлять уравнения Кирхгофа и решать СЛАУ. Заменим "левый" треугольник сопротивлений звездой, схема в данном случае приобретает следующий вид: В этом случае все становится много проще и решается по закону Ома (даже несмотря, что код получился чуть длиннее).
program main
implicit none
real :: r, r1, r2, r3, r4, r5
real :: u, u1, u2, u3, u4, u5, u11, u212315
real :: i, i1, i2, i3, i4, i5, i212, i315
real :: r212, r315, r212315, r11, r21, r31
u=100; r1=1000; r2=2000; r3=800; r4=1500; r5=1700
!Вычислим сопротивления звезды
r11 = r1*r4 / (r1+r3+r4)
r21 = r1*r3 / (r1+r3+r4)
r31 = r3*r4 / (r1+r3+r4)
!Вычислим промежуточные значения
r212 = r21 + r2
r315 = r31 + r5
r212315 = 1 / (1/r212 + 1/r315)
r = r11 + r212315
i = u / r
u11 = i * r11
u212315 = u - u11
i212 = u212315 / r212
i315 = u212315 / r315
!Вычислим напряжения, В
u2 = i212 * r2
u5 = i315 * r5
u3 = abs(u5 - u2)
u1 = u11 + i212 * r21
u4 = u11 + i315 * r31
!Вычислим токи, mA
i1 = 1e3 * u1 / r1
i2 = 1e3 * u2 / r2
i3 = 1e3 * u3 / r3
i4 = 1e3 * u4 / r4
i5 = 1e3 * u5 / r5
i = 1e3 * i
print*, "Результаты:"
print 10, " u1 = ", u1, " В"
print 10, " u2 = ", u2, " В"
print 10, " u3 = ", u3, " В"
print 10, " u4 = ", u4, " В"
print 10, " u5 = ", u5, " В"
print 10, " u = ", u , " В"
print*,
print 10, " i1 = ", i1, " mA"
print 10, " i2 = ", i2, " mA"
print 10, " i3 = ", i3, " mA"
print 10, " i4 = ", i4, " mA"
print 10, " i5 = ", i5, " mA"
print 10, " i = ", i , " mA"
10 format (a, f7.2, a)
end program main
Получили: Код: Результаты: u1 = 37.32 В u2 = 62.68 В u3 = 4.79 В u4 = 42.11 В u5 = 57.89 В u = 100.00 В
i1 = 37.32 mA i2 = 31.34 mA i3 = 5.98 mA i4 = 28.07 mA i5 = 34.05 mA i = 65.39 mA
Результат тот же самый. Такой способ сильно облегчает решения при разборе более сложных схем.
|