Форум программистов, компьютерный форум, киберфорум
MathCAD
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
24.01.2021, 13:23
Студворк — интернет-сервис помощи студентам
Еще для ускорения использую функции сгенерированные matlabом, все бы замечательно но api функция GetValue все портит(т.е. ее использование из под плагина)

к примеру использование этой функции из под скриптового элемента



- работает отлично.

все скрипты работают через библиотеку "\Mathcad\Mathcad 15\mcscriptr.ocx"
Подключил эту библиотеку и в обозревателе видно что там работа функций идет через делегаты
что толкает на вывод - api функция GetValue реализована с ошибкой..

Думаю реализовать эту функцию посредством библиотеки mcscriptr.ocx и ограничений будет намного меньше во входных параметрах с вызываемых функций из плагина

Скрипт
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim state, str
 
Sub PushBtnEvent_Start()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtnEvent_Exec(Inputs,Outputs)
   str = Inputs(0).value
   
   Outputs(0).value = Worksheet.GetValue(str)
   'PushBtnEvent.Recalculate()
End Sub
 
Sub PushBtnEvent_Stop()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtn_Click()
  Rem TODO: Add your code here
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2021, 13:23
Ответы с готовыми решениями:

C++\CLI vs C# для .NET
Пожалуйста посоветуйте что из этого лучше для .net, сейчас пишу на С++, нужно ли переходить на C# чтобы полноценно пользоваться .net? ...

На каких языках написан сайт mp3poisk.net ?
На каких языках написан сайт mp3poisk.net ? Нужно определится в каких направлениях и что учить

Оптимизация производительности C#.NET (Алгоритм, Многопоточность, Debug, Release, .Net Core, Net Native)
Решил поделится своим небольшим опытом по оптимизации вычислений на C#.NET. НЕ профи, палками не кидать, конструктив приветствуется! ...

31
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
24.01.2021, 17:09  [ТС]
Сомневаюсь, что это получится сделать из синхронной функции. На рабочем листе вывести результат после пересчёта документа ещё возможно, но нарушить причинно-следственную связь в пользовательский функции не получится. Я уже это объяснял, что API Mathcad, основанный на COM, предназначен для внешнего управления и не стоит смешивать то, что не документировано.
Я предложил рабочий вариант создать своё API как функции пользователя и сохранять нужные данные (в промежутке между расчётами) в статической управляемой памяти плагина.
Вообще, вызов скриптового движка - это дополнительные тормоза в расчётах.

Что касается дальнейшего развития netefi механизма, то я и так сделал много для Mathcad'а, но за прошедшее время никому не пригодилось. Поэтому можно понять и PTC, т. к. пользователи в подавляющем большинстве не имеют образования, чтобы выйти за рамки рабочего листа. Сам я очень давно Mathcad'ом не пользуюсь, в виду его бесполезности и ущербности.

Когда-то давно в Mathcad 11 можно было передавать в функцию пользователя вложенные массивы и принимать обратно тоже. Сейчас передавать нельзя, а вот приём не помню проверял ли. Они проверку значений сделали передаваемых параметров, медвежья услуга такая. Если сработает, то добавлю возможность возвращать вложенные массивы, если нет, то на этом всё. Мне гораздо интересней поддерживать другой математический пакет.
0
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
24.01.2021, 18:30
Цитата Сообщение от уни Посмотреть сообщение
Я предложил рабочий вариант создать своё API как функции пользователя и сохранять нужные данные (в промежутке между расчётами) в статической управляемой памяти плагина.
так получилось что для меня mathcad - некий "перекрестный пункт" между программами. На нем написано много всего, с 2007 года. Наглядность/логи/подсветка/отладка - все в одном окне.

В любом случае главная задача была - это уйти с версии М020 уж очень багованная версия.

Параллельно изучается конвертер файлов Mathcad'а в Prime и тогда расчеты можно перенести на другие программы можно и кодогенератор написать, только все упирается во время.

Добавлено через 6 минут
Цитата Сообщение от уни Посмотреть сообщение
но за прошедшее время никому не пригодилось.
пригодилось ! на форуме САПР можно найти различные наработки(исходники авторы не выкладывают) - что то вроде графоаналитических методов расчетов.
К примеру - высчитать момент инерции сложного сечения - через сапр - высчитывается в считанные секунды, если подходить аналитически - то долго и нудновато.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
24.01.2021, 22:39  [ТС]
Текущий наборчик файлов и документов для тестирования работы netefi. Я убрал цифры разрядности из названия библиотеки, т.к. это мешает использованию одних и тех же .net сборок в разных версиях Mathcad. Также добавил в архив библиотеку cstools и документ, который демонстрирует построение неявных кривых. Дополнил небольшими инструкциями readme.
Вложения
Тип файла: zip netefi-20210124.zip (949.3 Кб, 10 просмотров)
0
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
25.01.2021, 05:10
Цитата Сообщение от уни Посмотреть сообщение
Вообще, вызов скриптового движка - это дополнительные тормоза в расчётах.
Он получается нужен только для передачи данных
реализовал через него(matcad использует только одно ядро но это ограничение не накладывается на работу скрипта) получается что проигрыша в скорости нету

в общем исходник - работает со всеми типами переменных
нет проблем с кириллицей
передача больших массивов относительно быстрая если сравнивать с предыдущим костылем

читается все что можно прочесть с переменной - матрицы/вложенные и нет/смешанные/
VB.NET
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
   Dim MC As IMathcadApplication
   Dim WS As IMathcadWorksheet
 
    Dim sc As MSScriptControl.ScriptControl = New MSScriptControl.ScriptControl()
 
    Try
        MC = DirectCast(System.Runtime.InteropServices.Marshal.GetActiveObject("Mathcad.Application"), IMathcadApplication)
    Catch ex As Exception
        MC = DirectCast(System.Activator.CreateInstance(Type.GetTypeFromProgID("Mathcad.Application")), IMathcadApplication)
    End Try
   
     'Dim anyParams As New Params With {.mcq = MC, .nameq = "ff"}
     Dim anyParams = "ff"
 
      Dim script As String
      script = "function GetValue1(anyParams)" + vbNewLine
 
        'script = script + "Dim MC" + vbNewLine
        script = script + "Dim Sheet" + vbNewLine
 
        'script = script + "Set MC = anyParams.mcq" + vbNewLine
        'script = script + "WScript.ConnectObject MC, ""MC_""" + vbNewLine
 
        script = script + "Set Sheet = MC.ActiveWorksheet" + vbNewLine
        script = script + "Set GetValue1 = Sheet.GetValue(anyParams)" + vbNewLine
        'script = script + "Set GetValue1 = Sheet.GetValue(anyParams.nameq)" + vbNewLine
 
        'script = script + "WScript.DisconnectObject MC" + vbNewLine
        script = script + "End function"
 
        sc.Language = "VBScript"
        sc.AddCode(script)
        sc.AddObject("MC", MC, False)
 
        Dim result = sc.Run("GetValue1", anyParams)
 
        sc.Reset()
 
        MsgBox(TypeName(result))
думал что проблемной частью будет передача объекта MC - оказалось вообще не каких ...
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
25.01.2021, 16:14  [ТС]
Попробовал разными способами вызывать метод GetValue(), используя Mathcad API внутри плагина. Всегда виснет, в том числе и при использовании скрипта.

C#
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
using System;
using System.Runtime.InteropServices;
using System.Numerics;
 
using Mathcad;
using NetEFI;
 
public class csget: IFunction
{
    public FunctionInfo Info => new FunctionInfo( "csget", "name", "return value",
        typeof( Complex ), new[] { typeof( string ) } );
 
    public FunctionInfo GetFunctionInfo( string lang ) => Info;
 
    public bool NumericEvaluation( object[] args, out object result, ref Context context )
    {
        var script = new MSScriptControl.ScriptControl() { Language = "VBScript" };
 
        script.AddCode( $"Function GetValue( name ){Environment.NewLine}"
            + $"Set GetValue = mathcad.ActiveWorksheet.GetValue( name ){Environment.NewLine}"
            + $"End Function" );
 
        script.AddObject( "mathcad", Marshal.GetActiveObject( "Mathcad.Application" ) );
 
        var value = ( INumericValue ) script.Run( "GetValue", ( string ) args[0] );
 
        result = new Complex( value.Real, value.Imag );
 
        return true;
    }
}
Добавлено через 4 часа 50 минут
Вот такой код доказывает, что метод GetValue() ожидает окончания выполнения документа. Как только функция вернёт значение - поток завершится, но значения, как результат выполнения функции, мы не получим. Это показывает, что Mathcad API не получится использовать внутри netefi плагина для получения промежуточных значений переменных в документе.

C#
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
using System.Threading;
using System.Runtime.InteropServices;
using System.Numerics;
 
using Mathcad;
using NetEFI;
 
public class csget : IFunction
{
    public FunctionInfo Info => new FunctionInfo( "csget", "name", "return value",
        typeof( Complex ), new[] { typeof( string ) } );
 
    public FunctionInfo GetFunctionInfo( string lang ) => Info;
 
    public bool NumericEvaluation( object[] args, out object result, ref Context context )
    {
        var mathcad = ( IMathcadApplication2 ) Marshal.GetActiveObject( "Mathcad.Application" );
 
        Complex cmplx = default( Complex );
 
        new Thread( new ThreadStart( () => {
 
            var value = ( INumericValue ) mathcad.ActiveWorksheet.GetValue( ( string ) args[0] );
 
            cmplx = new Complex( value.Real, value.Imag );
 
        } ) ).Start();
 
        result = cmplx;
 
        return true;
    }
}
Как ни крути, но синхронно работающая функция пользователя не даст сформироваться признаку завершения вычисления документа.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
26.01.2021, 16:15  [ТС]
Цитата Сообщение от уни Посмотреть сообщение
Когда-то давно в Mathcad 11 можно было передавать в функцию пользователя вложенные массивы и принимать обратно тоже. Сейчас передавать нельзя, а вот приём не помню проверял ли. Они проверку значений сделали передаваемых параметров, медвежья услуга такая. Если сработает, то добавлю возможность возвращать вложенные массивы, если нет, то на этом всё.
Я тут вспомнил недокументированный формат вложенных массивов и понял, что его нельзя будет реализовать для 64-битных систем. Дело в том, что разработчики пошли по пути велосипеда и заменили элемент матрицы, в котором находится значение типа double (8 байт) на 2 значения: признак расширенного элемента и указатель на его данные. Так вот оба этих элемента по 4 байта. Во времена этого костыля это ещё работало, может быть также работает и сейчас, но изменить интерфейс пользовательских функций уже нельзя (или не хотят, что скорее всего). Указатель в 64-разрядной системе занимает 64 бита, а это размер того же типа double, поэтому нельзя такой указатель запихнуть в реальную часть комплексного значения, как это было сделано раньше.

Жаль, конечно. Пользоваться вложенными массивами в пользовательских функциях было удобно. К примеру, можно было организовать всего 1 параметр у функции в виде вектора, а его элементами сделать значения произвольных типов. То же касается выходного параметра, т.к. иногда нужно, чтобы его тип был произвольным. Например, вернуть значение из базы данных или таблицы Excel. Можно было "обернуть" это значение вектором из одного элемента и передавать строку, число или матрицу.

У Mathsoft были слабые и недальновидные программисты-архитекторы. В PTC, кстати, тоже не далеко от них ушли. Вместо расширения внутреннего инструментария делают всякие косметические правки, оживляя труп каждый год.
0
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
26.01.2021, 17:03
Цитата Сообщение от уни Посмотреть сообщение
Как ни крути, но синхронно работающая функция пользователя не даст сформироваться признаку завершения вычисления документа.
поспешил с ответом

Добавлено через 11 минут
Если работа синхронная то можно ли как то ее расинхронизировать? Async и await

мне кажется что там все же ошибка в реализации функции GetValue или как то через делегаты подступится ?

или я все напутал

Добавлено через 16 минут
Цитата Сообщение от densy Посмотреть сообщение
ошибка в реализации функции GetValue
те получить доступ к переменной не из того потока, в котором он был создан
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
26.01.2021, 17:25  [ТС]
Тут в архитектуре дело. Если посмотреть с точки зрения внешнего пользователя, для которого и предназначался этот COM интерфейс, то для него весь документ - это чёрный ящик, у которого есть входы и выходы. Интерфейс позволяет задать значения входов, "потрясти" ящик и получить выходные данные. Что там происходит внутри - неважно. Переменные на листе Mathcad взаимосвязаны и гарантированно получить результат можно только полностью его рассчитав.

Получить промежуточные значения таким способом нельзя. Вы не первый кто это хочет сделать



В принципе, показанный мной выше способ с потоком позволяет использовать GetValue() в плагине. Об этом я умолчал, но это возможно. Т.е. после того как функция возвратит 0, потоку вернётся управление и GetValue() возвратит запрашиваемое значение. Только вот это будет самое последнее значение этой переменной, т.е. после расчёта всего документа. Гораздо проще, если хочется сохранять текущее значение переменной - принудительно записывать в память плагина, т.е. так, как это можно было бы сделать, сохраняя промежуточную переменную в файл средствами самого Mathcad.

В 90-х годах были такие книжки от проф. Аладьева по Maple, так он там даже название дал такому методу ускорения вычислений - "метод дисковых транзитов" Только у него не было возможности и образования подключать плагины и в своём методе использования промежуточных данных он целиком всё писал на maple-языке.

Добавлено через 19 минут
Цитата Сообщение от densy Посмотреть сообщение
Если работа синхронная то можно ли как то ее расинхронизировать? Async и await
мне кажется что там все же ошибка в реализации функции GetValue или как то через делегаты подступится ?
или я все напутал
Документированными способами достать значение переменной во время расчёта средствами Mathcad API нельзя. Метод GetValue() неявно подразумевает, что возвращает значение переменной после расчёта документа. В принципе можно купить документацию (SDK) у PTC на Mathcad API за 3000$ и убедиться так ли это. Они её продают у себя на сайте.

Пока не поздно, если расчёты не сложные, то переходите на SMath Studio. Там нет таких проблем.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 1
26.01.2021, 17:47  [ТС]
Вот даже в справке написано, что GetValue() возвращает самое нижнее значение переменной, а получится оно там может только после полного расчёта. Так что без вариантов.

Я там выше ошибся немного в стоимости. PTC продаёт SDK к Mathcad за $9000 (для компании). Народ там на форуме долго это обсуждал, было смешно. Где-то есть ролик на youtube с кратким описанием что входит в SDK.
Миниатюры
Функции пользователя на .Net языках (c#, vb.net и c++/cli)  
0
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
28.01.2021, 00:36
как вариант создать COM библиотеку которая при вызове копирует входной объект в буфер и за ним тут же вызывается функция плагина которая читает с буфера объект

а функцию копирования в буфер вызывается vbs скриптом

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim str
Dim myObj
 
Sub PushBtnEvent_Start()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtnEvent_Exec(Inputs,Outputs)
   str = Inputs(0).value
   Set myObj = CreateObject("GetValue1.Operations")
   myObj.ValueToClipboard(Worksheet.GetValue(str))
   
    Outputs(0).value = "done"
  
End Sub
 
Sub PushBtnEvent_Stop()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtn_Click()
  Rem TODO: Add your code here
End Sub
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Runtime.InteropServices;
using System.Windows;
 
namespace GetValue1
{
    [ComVisible(true)]
    public class Operations
    {
        [ComVisible(true)]
        public void ValueToClipboard(string value)
        {
            Clipboard.Clear();
            Clipboard.SetText(value);
            
            //Clipboard.SetDataObject(value, true);
            return;
        }
    }
}
пока не понимаю как передать массив(думаю это нужно реализовать на уровне библиотеки)
0
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
02.02.2021, 10:31
Цитата Сообщение от уни Посмотреть сообщение
Получить промежуточные значения
В рамках - если управляющая программа Mathcad как вариант




без обработки вложенных матриц
скрипт кнопки

Кликните здесь для просмотра всего текста


Visual Basic
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
62
63
64
65
66
67
68
Dim iValue1
Dim myObj
 
Sub PushBtnEvent_Start()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtnEvent_Exec(Inputs,Outputs)
    Err.Clear
    On Error Resume Next
    
    Set myObj = CreateObject("McadFunction.Operations")
    iValue1 = myObj.ReadTxtFile(Inputs(0).Value)
    'MsgBox(VarType(iValue1))
    If Err.Number = 0 Then
        Select Case VarType(iValue1)
        Case 8 'String
            myObj.ReadTxtFile(iValue1)
            Outputs(0).Value = iValue1 
        Case 5 'Numeric
            myObj.ReadTxtFile(iValue1)
            Outputs(0).Value  = iValue1'.Real
            'Outputs(0).IValue = iValue1.Imag
        Case 8204 'Matrix
        If UBound(iValue1,2) = 0 Then
            myObj.ReadTxtFile(iValue1)
            For r = UBound(iValue1, 1) To 0 Step -1
            
' Если матрица с вложенными матрицами            
'               If VarType(iValue1(r)) = 8204 Then
'               'MsgBox(8204)               
'               Else
                    Outputs(0).Value(r) = iValue1(r)
'               End If
                
            Next
        Else
            myObj.ReadTxtFile(iValue1)
            For r = UBound(iValue1, 1) To 0 Step -1
                For c = UBound(iValue1,2) To 0 Step -1
                
' Если матрица с вложенными матрицами                
'               If VarType(iValue1(r,c)) = 8204 Then
'                   MsgBox(8204)        
'               Else
                    Outputs(0).Value(r,c) = iValue1(r,c)
'               End If
                    
                Next
            Next
        End If
            
 
        Case Else
            Outputs(0).Value = "Unknown object"
        End Select
    Else
        Outputs(0).Value = "UNDEFINED"
    End If
End Sub
 
Sub PushBtnEvent_Stop()
  Rem TODO: Add your code here
End Sub
 
Sub PushBtn_Click()
  Rem TODO: Add your code here
End Sub


COM библиотека
Кликните здесь для просмотра всего текста


VB.NET
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
62
63
64
65
66
67
68
69
70
71
72
73
74
    Public Function ReadTxtFile(ByVal value As Object)
 
        Try
 
            'String
            If VarType(value) = 8 Then
 
                Dim Str As String = CType(value, String)
                Str = Str & " + текст"
 
                Return Str
 
                'Double
            ElseIf VarType(value) = 5 Then
 
                Dim Str As Double = value 'CType(value, Double)
                Str = Str + 22.25
 
                Return Str
 
                'Matrix
            ElseIf VarType(value) = 8201 Then
 
                Dim r As Integer = UBound(value, 1)
                Dim c As Integer = UBound(value, 2)
 
                If c = 0 Then
                    Dim Str(r) As Object
                    Dim element As Object
 
                    For y = r To 0 Step -1
                        element = value(y)
 
                        'String
                        If VarType(element) = 8 Then
                            element = element & " + строка"
                            'Double
                        ElseIf VarType(element) = 5 Then
                            element = element + 22.35
 
                        End If
 
                        Str(y) = element
                    Next
                    Return Str
                Else
                    Dim Str(r, c) As Object
                    Dim element As Object
                    For y = r To 0 Step -1
                        For x = c To 0 Step -1
                            element = value(y, x)
 
                            'String
                            If VarType(element) = 8 Then
                                element = element & " + строка"
                                'Double
                            ElseIf VarType(element) = 5 Then
                                element = element + 22.35
 
                            End If
 
                            Str(y, x) = element
                        Next
                    Next
                    Return Str
                End If
 
            End If
        Catch ex As Exception
            Dim sdf = ex.Message.ToString
            Return sdf
        End Try
 
    End Function


Цитата Сообщение от уни Посмотреть сообщение
Пока не поздно, если расчёты не сложные, то переходите на SMath Studio. Там нет таких проблем.
конвертер его бы проапгрейдить т.к. он конвертирует только около 10% листа которые пытался открыть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2021, 10:31
Помогаю со студенческими работами здесь

Объясните на пальцах совместимость библиотек в .Net Core, .Net Framework, .Net Standart
Изучаю .Net. Хочу написать некое серверное приложение (думаю что учеба лучше на реальном примере, нежели писать примитивные hello world)....

Как разрабатывается проект .NET на разных языках программирования?
"Как разрабатывается проект .NET на разных языках программирования?" По этой теме мне нужно сделать реферат. Не могли бы вы подсказать...

Статистическое линкование C++ CLI/CLR с библиотеками NET
Статистическое линкование C++ CLI/CLR с библиотеками NET А можно создав форму WINDOWS::FORM используя NET Framework 2.0 Property...

C++/CLI: язык Visual C++ для среды .NET
Подскажите где найти книжку C++/CLI: язык Visual C++ для среды .NET или какую еить другую чтоб с нуля изучать C++/CLI :)

Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net
Всем привет! Нужно написать клиент-серверное приложение на основе Microsoft Sql Server 2005 Express Edition. Некое клиент-серверное...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru