Просмотр сообщений
|
Страниц: [1] 2
|
1
|
Основные форумы / Вопросы по Excel и VBA / Re:Ранг матрицы
|
: 25.01.2023, 16:55:03
|
В качестве исходных данных может быть любая (заданная) матрица, например 0 1 2 3 3 0 1 2 2 3 0 1 5 4 3 6 |
Что я хочу? Мне нужна функция пользователя MRang(X) as integer, которая импортирует из Excel-таблицы матрицу размером n*k и возвращает в таблицу целое число, равное вычисленному рангу. Метод вычисления - приведение матрицы к треугольному виду, в данном случае 3 0 1 2 0 9 -2 -1 0 0 20 28 0 0 0 0 |
Ранг матрицы равен числу ненулевых элементов на главной диагонали
|
|
|
2
|
Основные форумы / Вопросы по Excel и VBA / Re:Ранг матрицы
|
: 25.01.2023, 11:16:43
|
Ранг матрицы - это число линейно независимых строк или столбцов. См. Википедию. Например, ранг матрицы равен 3, а ранг матрицы равен 2 Но если вы не знаете, что это такое, то и такого макроса у вас нет. Может быть он есть у кого-нибудь, кто знает, что это такое?
|
|
|
3
|
Основные форумы / Вопросы по Excel и VBA / Ранг матрицы
|
: 25.01.2023, 01:28:43
|
Добрый день! В Excel нет встроенной функции для вычисления ранга матрицы. Может быть у кого-нибудь есть соответствующая готовая программа-функция пользователя? Я пытался самостоятельно написать такую программу на Excel VBA, но она иногда выдает неверные значения; где-то ошибка, не могу ее найти.
|
|
|
4
|
Основные форумы / Вопросы по Excel и VBA / Re:Можно ли функцию из таблицы автоматически импортировать в функцию VBA?
|
: 17.05.2022, 14:46:01
|
Чтобы было понятнее, посылаю тестовый Excel-файл "Approximation.xlsm" Там работает процедура Sub Solution(). Перед ее вызовом нужно в таблице маркировать клетки с параметрами уравнения (в данном случае Н2:Н5), а потом клетку с невязкой (в данном случае D18). Процедура вызывается горячей клавишей Control s. Для достижения удовлетворительного результата процедуру нужно вызывать много раз. Качество аппроксимации улучшается с киаждым еызовом процедуры.
В 3-ей колонке находятся формулы, которые вычисляют теоретические значения Y при табличных значениях Х. Формулы используют параметры из клеток Н2:Н5.
Хотелось бы написать функцию, которая импортировала бы внутрь себя формулу из колонки С.
|
|
|
5
|
Основные форумы / Вопросы по Excel и VBA / Можно ли функцию из таблицы автоматически импортировать в функцию VBA?
|
: 16.05.2022, 19:48:40
|
У меня такая проблема: Имеется таблица экспериментальных значений некоторой функции и теоретическое уравнение, описывающее эту зависимость, в которое нелинейно входят несколько параметров. Задача состоит в том, чтобы найти значения параметров, для которых среднеквадратичное отклонение экспериментальных точек от теоретической кривой было минимальным.
Я решал эту задачу так: В Excel делал таблицу со значениями аргумента (1-ая колонка) и функции (2-ая колонка); в 3-ей колонке теоретическая формула, зависящая от параметров (еще несколько клеток в таблице) и от аргумента, в 4-ой колонке – квадраты разностей экспериментальных и теоретических значений функции и корень из среднего значения квадратов (невязка).
Затем я написал процедуру, которая считывала из таблицы значения параметров и невязки, варьировала параметры, записывала назад в таблицу их новые значения и считывала новое значение невязки, и так до тех пор, пока невязка не достигала минимума.
Все это не очень хорошо: обмен информацией между процедурой и таблицей – медленная операция. Было бы лучше, если бы работала не процедура, а функция, которая только один раз считывала бы из таблицы массив аргументов и функции, а также формулу, по которой вычисляются теоретические значения функции. Тогда варьировались бы не параметры в таблице, а соответствующие внутренние переменные функции. А в конце работы функция возвращала бы в таблицу найденные значения параметров.
Вопрос: это возможно? Т.е. может ли программа функции «импортировать» формулу из таблицы? И если да, то как это сделать?
|
|
|
7
|
Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив
|
: 11.05.2022, 16:12:37
|
Супер! Огромное спасибо за подсказку. Хотя ваша функция YourTest и не работает, как надо, в ней содержатся ценные указания и подсказки, которые я использовал для улучшения моей функции MyTest. Текст функции: Function MyTest(Choice As Range) Dim Vektor(), Element, Z As Byte, S As Byte, N As Byte, Anz_Z As Byte Dim Markierung As Range ' Массив ячеек, выделенный на листе при вводе функции Set Markierung = Application.Caller Anz_Z = Markierung.Rows.Count ' Число строк в поле вызова функции Z = Choice.Rows.Count S = Choice.Columns.Count N = Z * S ReDim Vektor(1 To N) N = 0 For Each Element In Choice N = N + 1 Vektor(N) = Element.Value Next Element If Anz_Z = 1 Then MyTest = Vektor Else MyTest = Application.Transpose(Vektor) End If End Function Посылаю также и файл Test.xlsm
|
|
|
8
|
Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив
|
: 11.05.2022, 12:10:13
|
Спасибо! Кажется, я придумал, как выводить одномерный массив или в строку, или в столбец в зависимости от маркировки. Вот текст пробной функции:
Function Test(Choice As Range) ' Разворачивает элементы двумерного массива (Choice) в строку или столбец (Vektor) Dim Vektor(), Element, N As Byte N = 0 For Each Element In Choice N = N + 1 Next Element ReDim Vektor(1 To N, 1 To N) N = 0 For Each Element In Choice N = N + 1 Vektor(N, 1) = Element.Value Vektor(1, N) = Element.Value Next Element Test = Vektor End Function
Конечно, программа не слишком экономна: вместо одномерного массива пришлось декларировать двумерный (матрицу), при этом используется только первая строка и первый столбец матрицы. Недостаточно элегантно на мой вкус: перерасход ресурсов.
|
|
|
9
|
Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив
|
: 11.05.2022, 00:26:41
|
Большое спасибо за помощь. Только дело в том, что функция не знает, захочу я при ее вызове получить массив в виде строки, или в виде столбца. Эту информацию приходится сообщать функции в явном виде в качестве второго аргумента, что не очень элегантно. Хотелось бы, чтобы функция каким-то образом сама различала, что было маркировано - строка или столбец. Такую функцию я тоже запрограммировал, но при снятии маркировки она перестает правильно работать. Нужно, чтобы она запоминала маркировку, которая существовала на момент ее первого вызова.
Конкретной функции у меня пока нет, пока я экспериментирую с тестовыми функциями, которые всего лишь возвращают в таблицу одномерный массив значений.
Кстати: вы уверены, что команда Range("A1:A10").value = Application.Transpose(Array) будет работать именно внутри функции? Мне кажестся, что эта команда возможна только в макросе (Sub).
|
|
|
10
|
Основные форумы / Вопросы по Excel и VBA / Функция VBA, возвращающая в таблицу массив
|
: 09.05.2022, 13:28:05
|
В Excel есть встроенные матричные функции (например, MINV), которые возвращают в таблицу не одно значение, а массив. Чтобы вывзать такую функцию, нужно маркировать в таблице правильное число клеток, вписать в активную клетку формулу, а потом задействовать клавиши Control, Schift и Enter.
Я написал собственную функцию, которая возвращает одномерный массив значений, но она работает не совсем так, как хотелось бы. В частности, она возвращает правильные значения только в строку, а в столбец не хочет. В этой связи у меня вопросы:
1) Как сделать, чтобы функция возвращала значения как в строку, так и в столбец (в соответствии с тем, что маркировано - строка или столбец)? 2) Что делать, если размер возвращаемого массива заранее неизвестен? Что маркировать?
|
|
|
11
|
Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки?
|
: 08.05.2022, 10:34:28
|
Эврика! Оказалось, что, хотя процедуры из собственных надстроек Add-In не видны в стандартном окне вызова макросов (Alt+F8), если набрать в этом окне имя процедуры, то она нормально вызывается. Чтобы не запоминать имена всех процедур, достаточно в панели быстрого доступа создать кнопку, вызывающую нужный макрос. Или создать собственную вкладку в меню. Для этого не обязательно писать программы в Ribbon XML (я им не владею, и это для меня слишком сложно), достаточно воспользоваться стандартными инструментами Excel
|
|
|
|
|