1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37

Решение уравнений в символьном виде

20.03.2017, 15:39. Показов 5765. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется определить напряжение в фазе А воздушной линии. По моей программе, сначала ввожу параметры воздушной линии, напряжение, ток и т.д. На основании системы уравнений определяется напряжение в фазе А. Ввожу коэффициенты k1-k8, входящие в систему уравнений. Далее решаю систему уравнений, с помощью оператора solve, определяю неизвестные коэффициенты a1-a8. И тут возникает проблема, программа определяет неизвестные a1-a8 в символьном виде, а мне требуются численные значения переменных a1-a8. Далее определяю напряжение в фазе А - UA, следовательно не могу получить конечное число. Укажите на мои ошибки в программе. Что бы мне получить численные значения a1-a8 и следовательно определить напряжение в фазе А – UA.
Вот код программы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
l=300;
ua=220.23;
ub=220.07;
uc=220.001;
ud=0.004;
v1=(0.0016+i*9.9972);
v2=(0.0025+i*8);
v3=(0.0032+i*10);
v4=(0.0037+i*12.9973);
ia=48;
ib=47.4;
ic=48.1;
id=0.00000012;
ya=8.2*10^(-14);
yb=8.5*10^(-15);
yc=7.5*10^(-15);
yd=4.3*10^(-14);
yab=8*10^(-17);
ybc=7*10^(-17);
yca=8*10^(-17);
yad=7.5*10^(-17);
ybd=7.5*10^(-17);
ycd=7.5*10^(-17);
za=0.42;
zb=0.4;
zc=0.43;
zd=0.41;
zab=0.415;
zbc=0.415;
zca=0.415;
zad=0.347;
zbd=0.347;
zcd=0.347;
k1=-4*(ia*za+ib*zab+ic*zca+id*zad)
k2=4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*ua+(zab*yb+zab*ybc+zab*yab+zab*ybd-za*yab-zca*ybc+zad*ybd)*ub+(zca*yc+zca*yca+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*uc-(zad*yd+zad*yad+zad*ybd+zad*ycd+za*yad+zab*ybd+zca*ycd)*ud
k3=-4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*(ia*za+ib*zab+ic*zca-id*zad)-(zab*yb+zab*ybc+zab*yab+zab*ybd-za*yab-zca*ybc+zad*ybd)*(ib*zb+ia*zab+ic*zbc-id*zbd)-(zca*yc+zca*yca+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*(ic*zc+ia*zca+ib*zbc-id*zcd)+(zad*yd+zad*yad+zad*ybd+zad*ycd+za*yad+zab*ybd+zca*ycd)*(id*zd-ia*zad-ib*zbd-ic*zcd)
k4=4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*ua-(zab*yb+zab*ybc+zab*yab-zab*ybd-za*yab-zca*ybc+zad*ybd)*ub-(zca*yc+zc*yc+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*uc
k5=-4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*(zca*yc+zca*yca+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*(ic*zc+ia*zca+ib*zbc-id*zcd)
k6=4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)-(zca*yc+zca*yca+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*(zca*yc+zca*yca+zca*ybc+zca*ycd-za*yca-zab*ybc+zad*ycd)*uc-(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)*ua-(zab*yb+zab*ybc+zab*yab+zab*ybd-za*yab-zca*ybc+zad*ybd)*ub-(zad*yd+zad*yad+zad*ybd+zad*ycd+za*yad+zab*ybd+zca*ycd)*ud
k7=-4*(za*ya+za*yab+za*yca+za*yad-zab*yab-zca*yca+zad*yad)
k8=4*(zab*yb+zab*ybc+zab*yab+zab*ybd-za*yab-zca*ybc+zad*ybd)*ub+(zad*yd+zad*yad+zad*ybd+zad*ycd+za*yad+zab*ybd+zca*ycd)*ud
f1 = v1*a1 - v1*a2 + v2*a3 - v2*a4 + v3*a5 - v3*a6 + v4*a7 - 
   V4*a8 == -4*k1
f2 = v1^2*a1 + v1^2*a2 + v2^2*a3 + v2^2*a4 + v3^2*a5 + v3^2*a6 + 
   v4^2*a7 + V4^2*a8 == 4*k2
f3 = v1^3*a1 - v1^3*a2 + v2^3*a3 - v2^3*a4 + v3^3*a5 - v3^3*a6 + 
   v4^3*a7 - V4^3*a8 == -4*k3
f4 = v1^4*a1 + v1^4*a2 + v2^4*a3 + v2^4*a4 + v3^4*a5 + v3^4*a6 + 
   v4^4*a7 + V4^4*a8 == 4*k4
f5 = v1^5*a1 - v1^5*a2 + v2^5*a3 - v2^5*a4 + v3^5*a5 - v3^5*a6 + 
   v4^5*a7 - V4^5*a8 == -4*k5
f6 = v1^6*a1 + v1^6*a2 + v2^6*a3 + v2^6*a4 + v3^6*a5 + v3^6*a6 + 
   v4^6*a7 + V4^6*a8 == 4*k6
f7 = v1^7*a1 - v1^7*a2 + v2^7*a3 - v2^7*a4 + v3^7*a5 - v3^7*a6 + 
   v4^7*a7 - V4^7*a8 == -4*k7
f8 = v1^8*a1 + v1^8*a2 + v2^8*a3 + v2^8*a4 + v3^8*a5 + v3^8*a6 + 
   v4^8*a7 + V4^8*a8 == 4*k8
W = Solve[{f1, f2, f3, f4, f5, f6, f7, f8}, {a1, a2, a3, a4, a5, a6, 
   a7, a8}]
 
UA=1/4*(a1*E^(v1*l)+a2*E^(-v1*l)+a3*E^(v2*l)+a4*E^(-v2*l)+a5*E^(v3*l)+a6*E^(-v3*l)+a7*E^(v4*l)+a8*E^(-v4*l))
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2017, 15:39
Ответы с готовыми решениями:

Решить систему неравенств в символьном виде при условии положительности аргументов.
нужно решить систему неравенств в символьном виде при условии положительности аргументов, нашел функцию которая решает нечто подобное...

Решение уравнений
Здравствуйте, я только начала изучать математику, поэтому мой вопрос может показаться глупым... Мне нужно найти корни квадратного...

Решение дифференциальных уравнений
Доброго времени суток. Помогите разрешить ситуацию. Есть дифур нелинейный ( Динамическая система ). Необходимо его решить с помощью DSolve....

10
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
20.03.2017, 15:58
mixar, для численного решения есть функция NSolve
1
1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37
21.03.2017, 16:06  [ТС]
Цитата Сообщение от Centurio Посмотреть сообщение
для численного решения есть функция NSolve
Ошибка была банальной, спасибо за помощь. В результате я получил численные значения искомых коэффициентов а1-а8:
Matlab M
1
2
{{a1 -> -372615., a2 -> 372615., a3 -> 743.522, a4 -> -743.522, 
  a5 -> 372025., a6 -> -372025., a7 -> -47.1949, a8 -> 47.1949}}
Есть еще один вопрос, как в дальнейших вычислениях мне использовать полученные величины а1-а8. Про шерстил литературу по программе "mathematica для студентов", поискал в интернете. Ничего конкретно не написано.
Как мне вывести результат вычислений а1-а8 что бы Wolfram Mathematica понимала что a1=-372615, a2=372615 и т.д.
И при дальнейших вычислении напряжения в фазе А
Matlab M
1
UA=1/4*(a1*E^(v1*l)+a2*E^(-v1*l)+a3*E^(v2*l)+a4*E^(-v2*l)+a5*E^(v3*l)+a6*E^(-v3*l)+a7*E^(v4*l)+a8*E^(-v4*l))
Мне не приходилось вводить вручную значения a1-a8.
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,490
21.03.2017, 20:17
mixar, простенький пример...
Миниатюры
Решение уравнений в символьном виде  
1
1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37
22.03.2017, 17:42  [ТС]
Попробовал ввести аналогично аналогично примеру, Wolfram Mathematica выдал такую ошибку;
Миниатюры
Решение уравнений в символьном виде  
0
1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37
23.03.2017, 15:53  [ТС]
Как я понимаю символ "->" в программе Wolfram Mathematica обозначает присвоение. Следовательно в моём случае переменной a1 присваивается численное значение равное -372614.88, аналогично для других искомых мной переменных.
{} - данными скобками в программе обозначаются списки (массивы). В моём случае я имею массив переменных. И из него нужно вычислить переменные а1-а8. Подскажите, мои предположения верны?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
23.03.2017, 23:38
mixar, как говорится, RTFM.

Цитата Сообщение от mixar Посмотреть сообщение
Как я понимаю символ "->" в программе Wolfram Mathematica обозначает присвоение.
Этот символ является инфиксным вариантом записи Rule: так, a -> b эквивалентно Rule[a, b].
Присваивание в WM называется Set. В инфиксной форме =

В свою очередь, Rule означает правило подстановки. Первый аргумент — шаблон для поиска/обработки выражения/подвыражения, второй аргумент — выражение, на которое следует заменить выражение/подвыражение.

Цитата Сообщение от mixar Посмотреть сообщение
{} - данными скобками в программе обозначаются списки (массивы)
Списки. Опять же, {1, 2, 3} является сокращением для List[1, 2, 3].

Цитата Сообщение от mixar Посмотреть сообщение
В моём случае я имею массив переменных.
Увы, невнимательно читаете.
У Вас есть {{ a1 -> v1, a2 -> v2, a3 -> v3 }}.
Вы знаете, что {...} — это список. Тогда вышеуказанное выражение — это список из одного списка, состоящего в свою очередь из 3 правил.

Ещё Вы не читаете сообщения об ошибках.
Написано же
Lists {a1,a2,a3,a4,a5,a6,a7,a8} and Out[0] are not the same shape.
Вас должно было удивить, почему Out[0] назван списком. Вообще, использование %, которое означает результат предыдущего вычисления, во время первого вычисления на странице тоже должно было насторожить.

Собственно, Вас вопрос, если его ставить аккуратно, звучит так:
вот есть список правил замен, полученный в результате NSolve; вот есть выражение с символами, которые выступали неизвестными в уравнениях. Как бы заменить все эти неизвестные их значениями.
Ответ: использовать ReplaceAll
Code
1
a1 + a2 /. {{ a1 -> v1, a2 -> v2}}
1
1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37
24.03.2017, 12:56  [ТС]
Mysterious Light, спасибо большое за подробное объяснение. Использовал оператор "ReplaceAll" ввел в программу:
Code
1
a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 /. {{a1 -> v1, a2 -> v2, a3 -> v3, a4 -> v4, a5 -> v5, a6 -> v6, a7 -> v7, a8 -> v8}}
Получил ответ:
Code
1
{40.9942 + v5 + v6 + v7 + v8}
Как я понимаю программа не смогла определить численные значения переменных v5, v6,v7,v8. При этом Wolfram не выдает никаких сообщений об ошибках:
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
24.03.2017, 14:44
Цитата Сообщение от mixar Посмотреть сообщение
Как я понимаю программа не смогла определить численные значения переменных v5, v6,v7,v8.
mixar, что у Вас v1-v8? Судя по результатам вычислений, у Вас v1-v4 определены (то есть был код вида v1=<значение>, v2=<...>, v3=<...>, v4=<...>) и имеют численные значения, а v5-v8 не определены. Так что да.

Встречный вопрос: а что Вы хотели увидеть в ответе, если из 8 символов определили только 4?
1
1 / 1 / 0
Регистрация: 24.12.2016
Сообщений: 37
26.03.2017, 07:04  [ТС]
Переработал изначальную программу. Изменил исходные данные, их вид записи и некоторые значения. Более подробно записал коэффициенты k3-k8 в символьном виде. Программа поучилась громоздкой поэтому не могу привести её в этом сообщении. Прилаживаю файл программы к данному сообщениюНахождение а1-а8 в числ виде.rar. Пока в программе не вычисляю напряжение UA, так как разбираюсь с решением системы уравнений в символьном виде. После выполнения программы использую оператор NSolve получаю результат:
C
1
{{a1 -> -5.53741*10^8 + 4.78444*10^8 I, a2 -> 5.53741*10^8 - 4.78444*10^8 I, a3 -> 560202. - 1.58588*10^6 I,a4 -> -560202. + 1.58588*10^6 I, a5 -> 5.53297*10^8 - 4.77186*10^8 I, a6 -> -5.53297*10^8 + 4.77186*10^8 I, a7 -> -35635.7 + 100603. I, a8 -> 35635.7 - 100603. I}}
Нашел вот такое пояснение в книжке, применю к своему случаю:
Решение представлено в виде подстановок: a1->, a2-> и т.д. Это не дает возможности проверить достоверность решения. А так же использовать значения a1-a8 в дальнейших расчетах. Для этого пользователь должен представить неизвестные в явном виде с присвоением им имени a1=-5.53741*10^8 + 4.78444*10^8 I и т.д., затем использовать их по назначению.
Получить решение в явном виде можно с помощью выражения вида:
C
1
NSolve : {a1, a2, a3, a4, a5, a6, a7, a8} /. NSolve[{f1, f2, f3, f4, f5, f6, f7, f8}, {a1, a2, a3, a4, a5, a6, a7, a8}]
Используя данную команду получил результат:
C
1
{NSolve : {-5.53741*10^8 + 4.78444*10^8 I,5.53741*10^8 - 4.78444*10^8 I, 560202. - 1.58588*10^6 I, -560202. + 1.58588*10^6 I, 5.53297*10^8 - 4.77186*10^8 I, -5.53297*10^8 + 4.77186*10^8 I, -35635.7 + 100603. I, 35635.7 - 100603. I}}
Подскажите в чем моя ошибка? Почему программа не присваивает переменным a1-a8 значения в численном виде?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
26.03.2017, 18:10
Лучший ответ Сообщение было отмечено mixar как решение

Решение

Кажется, Вы не полностью отделяете понятия «переменная/символ», «значение переменной как число» и «правило подстановки».

Допустим, мы решаем уравнение с одной неизвестной a (чтоб писыть было меньше).
C
1
nsol = NSolve[a + 2 == 6, a]
nsol — список список правил замен. Кстати, смотрите внимательно на то, что WM возвращает.
Пусть Вы определили некоторую переменную как выражение с a, например,
C
1
U = 5 a^2
U — это символ, имеющий в качестве значения выражение 5 a^2, где a — тоже символ.
Это удобно, потому что можно делать чисто символьные манипуляции, в которых нет никакой магии, но во многих языках программирования подобное делается существенно сложнее:
C
1
D[U, a]
Когда Вы захотите заменить a значением, полученным при решении уравнения nsol, следует записать
C
1
U /. nsol
Или, например, значение производной U по a при a равной решению nsol
C
1
D[U, a] /. nsol
Если же Вы желаете связать a с корнем, найденным в nsol, следует совершить присваивание (Set/SetDelayed) так или иначе. Например,
C
1
a = a /. First[nsol]
или
C
1
nsol /. Rule -> Set
Но после этого с a будет связано значение, которое будет подставляться вместо a всюда, где a присутствует.
Чтобы освободить a от своего значения, необходимо записать Clear[a]

P.S. ещё важный момент: когда я говорю о выражениях WM, например, «записать [выражение]», я имею в виду «записать и вычислить в предположении, что контекст свободен от неуказанных явно правил, связанных с используемыми символами». Чистка контекста осуществляется перегрузкой ядра/программы WM или Clear/ClearAll используемых символов.
В раннем сообщении Вы использовали %, чтобы сослаться на выражение, которое Вы просто вставили в редактор, но не вычислили.
От порядка кода в редакторе ничего не зависит — всё определяется только порядком вычислений.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2017, 18:10
Помогаю со студенческими работами здесь

Решение системы уравнений в Mathematica
Добрый день, у меня почти нет опыта работы с какими-либо программами вроде Mathematica, но мне нужно срочно решить систему уравнений,...

Решение системы однородных уравнений
Решаю однородную систему линейных алгебраических уравнений. Получаю результат. Проверяю, вроди правильно решено. Затем расматриваю частный...

Решение системы дифференциальных уравнений
Добрый день! Столкнулся с задачей, когда надо решить систему дифференциальных уравнений. Решал через dsolve. Проблема в том, что как...

Решение системы из 6 (шести) уравнений
Здравствуйте, господа и дамы. Есть система уравнений, 6и уравнений, есть расчет в мэпле, но есть некоторые основания ему не доверять (при...

Решение системы линейных уравнений
Здравствуте !!! Подскажите пожалуйста как решить большую систему линейных уравнений, которая записана в матрицу столбец. Каждому элементу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru