Матричные вычисления C# и SVD с использованием собственного универсального типа (с помощью Math.NET Numerics)

Я написал свою собственную структуру для интервальной арифметики, для простоты скажем, что это значение, определяемое нижней и верхней границами. Некоторые из вас могут быть знакомы с типом Range, который очень похож.

Я перегрузил целые арифметические операторы, такие как +, -, *, /,<,>,.... Поэтому я полагаю, что у меня должно быть что-то вроде универсального типа (или я должен быть в состоянии реализовать остальное, чтобы сделать его единым).

Теперь я хочу работать / рассчитывать с моим типом. Поскольку я работаю с системами линейных уравнений, мне нужны такие вещи, как SVD, и я не хочу заново изобретать колесо, я планирую использовать существующие библиотеки Math, такие как Math.NET Numerics. Но вот что говорит их матричный класс:

/// <summary>
    /// Defines the base class for <c>Matrix</c> classes.
    /// </summary>
    /// <typeparam name="T">Supported data types are <c>double</c>, <c>single</c>, <see cref="Complex"/>, and <see cref="Complex32"/>.</typeparam>
    [Serializable]
    public abstract partial class Matrix<T> :
        IFormattable, IEquatable<Matrix<T>>
#if !PORTABLE
        , ICloneable
#endif
        where T : struct, IEquatable<T>, IFormattable

Короче говоря: они говорят, что допускаются только двойные, одиночные и сложные. Так что мой универсальный тип не будет работать, даже если он реализует все перечисленные интерфейсы, верно?

Итак: я прав, что я не могу использовать Math.Net Numerics с моим типом? Знаете ли вы другие математические библиотеки, которые поддерживают мой тип / универсальный? Я действительно должен написать свои собственные реализации?

Заранее спасибо!

1 ответ

Я не могу комментировать напрямую (из-за небольшой репутации), поэтому я должен опубликовать "ответ", мои извинения!

Я не думаю, что у вас есть "универсальный тип", это специфический, пользовательский (не встроенный) тип.

Предположим теперь, что вы действительно можете использовать абстрактный класс Matrix (кстати, вы должны попробовать это сами) для представления интервальной матрицы. Вы все равно остались бы со всей тяжелой работой, поскольку вычисление SVD интервальной матрицы, насколько я знаю, не имеет прямого отношения к SVD какой-либо конкретной матрицы, или это так? Аналогично для интервальных вычислений собственного значения / собственного вектора.

Другие вопросы по тегам