Я написал свою собственную структуру для интервальной арифметики, чтобы упростить ее, скажем, что это значение определяется нижней и верхней границей. Некоторые из вас, возможно, знакомы с типом Range, который очень похож.
Я перегрузил все арифметические операторы, такие как +,-,*,/,‹,>, ... . Поэтому я полагаю, что у меня должно быть что-то вроде универсального типа (или я должен иметь возможность реализовать все остальное, чтобы сделать его одним).
Теперь я хочу работать/вычислять с моим типом. Поскольку я занимаюсь системами линейных уравнений, мне нужны такие вещи, как SVD, и я не хочу заново изобретать колесо, я планирую использовать существующие математические библиотеки, такие как Math. Числовые значения .NET. Но вот что говорит их матричный класс:
/// <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 с моим типом? Знаете ли вы другие математические библиотеки, которые будут поддерживать мой тип/универсальный? Мне действительно нужно писать свои собственные реализации?
Заранее спасибо!
+
,-
,*
, .... В С# нельзя. Очень жаль. - person Henk Holterman   schedule 13.02.2017Complex
приглашен на вечеринку. - person Henk Holterman   schedule 13.02.2017switch(typeof(T)) {}
внутри этой библиотеки Numerics. И это не открыто для расширения. - person Henk Holterman   schedule 13.02.2017float
,double
иComplex
. Вам придется реализовать свои собственные матричные факторизации и, такие как SVD для него. - person Panagiotis Kanavos   schedule 14.02.2017