Русский
English
Главная
RastrWin
Программа
Последние изменения
Часто задаваемые вопросы
Аннотация
Лицензирование и защита от копирования
Права Windows для пользователя RastrWin
Курсы
Компонентная архитектура
Интерфейс
Инструкция по установке
Документация, видео, презентации
Свидетельство о регистрации
RastrKZ
RastrMDP
RastrOS
ZamerSeti
Архив
Bars-Lincor
Расчетная модель
Система моделирования
Последние изменения
Программа
Инструкция пользователя
Инсталляция
RUStab
Загрузка
Последние изменения
Поддержка
Поддержка
Форум
Техподдержка
Персональная
Макро студия
Макро студия
Автоматизация
Работа с SQL
Оценка параметров ЛЭП и ТР
Эффективность размыкания сети
Анализ напряжений в Excel
Автоматизация с "AutoIt"
Создание графа сети из режима
Передача графики в SVG
Вариантные расчеты
Импортозамещение
О нас
О компании
Фотогалерея
Пользователи
Отчеты об использовании своего имущества
Реквизиты
Поддержка
Форум
Техподдержка
Персональная
Авторизация
Запомнить меня на этом компьютере
Забыли свой пароль?
Регистрация
Поиск по сайту
Подписка
Новости Bars- Lincor
Новости RastrWin
Общие новости
Новости RUStab
Изменение параметров
Hits
66985979
4566
Hosts
3541127
711
Visitors
53213336
3167
32
Главная
/
Поддержка
/
Форумы
/
Макро
Форум «Макро»
Версия для печати
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Тема: «
Заполнение массива найденными данными
» в форуме:
Макро
Просмотров: 2872
Матвей Матюшин
Заглянувший
Всего сообщений:
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,
возможно это то что вы ищите, но опять стоит учесть ситуацию описанную в предыдущем пункте.
Профиль
Наверх
Читают тему
гостей:
1
, пользователей:
0
, из них скрытых:
0
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019