На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67408994
344
Hosts 3607114
151
Visitors 53561940
343

70


Главная / Поддержка / Форумы / Макро

Форум «Макро»

Версия для печати Версия для печати

Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация


Тема: «Заполнение массива найденными данными » в форуме: Макро   Просмотров: 2944
 
Матвей Матюшин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 26.05.2023
Создано: 01.06.2023 00:42:36
 
 
Здравствуйте! Помогите, пожалуйста. Из макроса матрицы Якоби для каждого узла вытащил собственные проводимости. Подскажите, как можно создать массив данных неизвестной размерности и заполнить его этими полученными проводимостями, чтобы потом с ними можно было работать (сортировать, сравнивать и тд)?

Только начинаю с макросами работать, в примерах и уроках не нашёл подобного =(
 
Профиль
Наверх
Матвей Матюшин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 26.05.2023
Создано: 01.06.2023 16:15:38
 
 
prdir=Rastr.SendCommandMa­in(3,"","",0) ' директория Rastr -ActOpus
shabl=prdir&"SHABLON\"&"м­атрица якоби.mc" ' Шаблон таблицы соответствия
Rastr.NewFile shabl
Rastr.JAkobi ""

set Jakobi=Rastr.Tables("jako­bi")
set yzel_i=Jakobi.Cols("ni")
set yzel_j=Jakobi.Cols("nj")
set dp_dv=Jakobi.Cols("b")
Rastr.printp "Узел_I Узел_J DP/dV"
for i=0 to Jakobi.Size-1
Rastr.Printp yzel_i.Z(i) & " " &yzel_j.Z(i)& " "&dp_dv.Z(i)

next
 
Профиль
Наверх
Матвей Матюшин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 26.05.2023
Создано: 02.06.2023 00:10:53
 
 
prdir=Rastr.SendCommandMa­in(3,"","",0) ' директория Rastr -ActOpus
shabl=prdir&"SHABLON\"&"м­атрица якоби.mc" ' Шаблон таблицы соответствия
Rastr.NewFile shabl
Rastr.JAkobi ""

set Jakobi=Rastr.Tables("jako­bi")
set yzel_i=Jakobi.Cols("ni")
set yzel_j=Jakobi.Cols("nj")
set dp_dv=Jakobi.Cols("b")

Dim array1(100, 2), j
j = 0
dim array_r(100, 2)
k = 0
dim t, m

for i = 0 to Jakobi.Size-1
if yzel_i.Z(i) = yzel_j.Z(i) and yzel_i.Z(i) <> 0 then
array1(j, 0) = yzel_i.Z(i) 'находим узел i
array1(j, 1) = dp_dv.Z(i) ' присваиваем узлу его собственную проводимость
j = j + 1
end if
next

for i = 0 to Jakobi.Size-1
if yzel_i.Z(i) <> yzel_j.Z(i) then
t = 0
m = yzel_i.Z(i)
for each x in array1
Rastr.printp array1(t, 0) 'если узел j отличается от i
if x = m then
array1(t, 2) = array1(t, 2) - dp_dv.Z(i) 'вычитаем из собственной проводимости взаимную
end if
t = t + 1
Rastr.printp t
exit for
next
t = 0
array_r(k, 1) = array1(t, 1) - dp_dv.Z(i)
array_r(k, 0) = yzel_i.Z(i)
k = k + 1
end if
next
 
Профиль
Наверх
Матвей Матюшин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 26.05.2023
Создано: 02.06.2023 00:13:51
 
 
Происходит зацикливание, при выводе узел не меняется и равен n, а параметр t равен 1. Помогите, пожалуйста, в чём кроется ошибка?
 
Профиль
Наверх
Даниил Теплухин
Заглянувший
 
Всего сообщений: 2
Дата регистрации: 02.06.2023
Создано: 02.06.2023 11:56:43
 
 
Здравствуйте, у вас в коде в цикле for each метод exit for заставляет программу выйти из цикла, в связи с чем и получается так что t сначала равно нулю, после увеличивается на 1, и затем происходит выход из цикла, после него t приравнивается к нулю, в связи с чем у вас t постоянно меняет значение с 0 на 1 и и обратно и выводится значение t=1.
Цитата

for each x in array1
Rastr.printp array1(t, 0) 'если узел j отличается от i
if x = m then
array1(t, 2) = array1(t, 2) - dp_dv.Z(i) 'вычитаем из собственной
проводимости взаимную
end if
t = t + 1
Rastr.printp t
exit for
next

 
Профиль
Наверх
Матвей Матюшин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 26.05.2023
Создано: 02.06.2023 13:31:31
 
 
Спасибо огромное! Попробовал исправить, теперь t изменяются. У меня всего 25 узлов, но он увеличивается до предела размерности матрицы, даже когда узлы закончились. Я не силён в программировании, но подскажите, в чём сейчас моя промашка?

prdir=Rastr.SendCommandMa­in(3,"","",0) ' директория Rastr -ActOpus
shabl=prdir&"SHABLON\"&"м­атрица якоби.mc" ' Шаблон таблицы соответствия
Rastr.NewFile shabl
Rastr.JAkobi ""

set Jakobi=Rastr.Tables("jako­bi")
set yzel_i=Jakobi.Cols("ni")
set yzel_j=Jakobi.Cols("nj")
set dp_dv=Jakobi.Cols("b")

Dim array1(50, 2), j
j = 0
dim array_r(50, 2)
k = 0
dim t, m

Rastr.printp "Узел_I Узел_J DP/dV"
for i = 0 to Jakobi.Size-1
if yzel_i.Z(i) = yzel_j.Z(i) and yzel_i.Z(i) <> 0 then
array1(j, 0) = yzel_i.Z(i)
array1(j, 1) = dp_dv.Z(i)
j = j + 1
end if
next

for i = 0 to Jakobi.Size-1
if yzel_i.Z(i) <> yzel_j.Z(i) then 'если узлы не равны
t = 0
m = yzel_i.Z(i)
for each x in array1
Rastr.printp array1(t, 0)
if x <> m then 'тогда из собственной проводимости отнять взаимную
array1(t, 2) = array1(t, 2) - dp_dv.Z(i)
end if
t = t + 1
Rastr.printp t
next
array_r(k, 1) = array1(t, 1) - dp_dv.Z(i)
array_r(k, 0) = yzel_i.Z(i)
k = k + 1
end if
next

for i = 0 to UBound(array1)
Rastr.Printp array1(i,0) & " " & array1(i,2)
next
 
Профиль
Наверх
Даниил Теплухин
Заглянувший
 
Всего сообщений: 2
Дата регистрации: 02.06.2023
Создано: 08.06.2023 11:11:35
 
 
Здравствуйте!

1. В матрице Якоби используются частные производные,
из них выразить проводимости не представляется возможным.

2. То что у вас t уходит за предел массива array рассчитанного на 50 элементов, волне возможно,
что матрица Якоби больше по размерности, т.е. там кроме узлов могут учитываться и ветви
(возможно, но не точно, т.к. принцип работы конкретно этой таблицы был запрограммирован очень давно,
и не представляется возможным найти точную информацию о её устройстве).
Я проверил на другой схеме, где количество узлов - 197, в данном случае Jacobi.Size выдало значение 731,
возможно и в вашем случае элементов так же больше 25 или 50.

3. Могу вам посоветовать обратить внимание на то, что в таблице jacobi[] присутствуют колонки с проводимостями G и B,
возможно это то что вы ищите, но опять стоит учесть ситуацию описанную в предыдущем пункте.
 
Профиль
Наверх



Читают тему
гостей: 2, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019