我正在使用Math.Net Numerics平行内部进行繁重的数学计算Parallel.For块.
当我在本地系统中运行4核(2*2)的代码时,它使用全部4个核心.
但是,当我在具有8个内核(4*2)的开发服务器中运行相同的代码时,它只使用4个内核.
我试过设置MaxDegreeOfParallism,但无法帮助.
知道为什么没有使用所有核心.
以下是示例代码.
Parallel.For(0,10000,(i)=>
{
 // heavy math computations using matrices
});
c# task-parallel-library mathnet-numerics parallel.for math.net
我有两个向量MathNet.Numerics.LinearAlgebra.Generic.Vector<double>,如下所示:
Vector<double> v1 = new DenseVector(new double[] { 1, 2, 3 });     
Vector<double> v2 = new DenseVector(new double[] { 3, 2, 1 });
我基本上想要CrossProduct他们,但找不到官方功能.我知道交叉产品是一个非常简单的功能,我可以自己编写,但我想使用API的功能.
以下两个对我有用:(无法在API中找到此类函数.)
Vector<double> result = v1.CrossProduct(v2);
Vector<double> result = Vector.CrossProduct(v1,v2);
我找到了这个,但是当我尝试编写它时找不到该函数:API Reference
我是Math.Net库的新手,我在尝试基于指数函数进行曲线拟合时遇到了问题.更具体地说,我打算使用这个功能:
f(x) = a*exp(b*x) + c*exp(d*x)
使用MATLAB我得到了相当不错的结果,如下图所示:

MATLAB计算以下参数:
f(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a =   29.6       ( 29.49     , 29.71)
b =    0.000408  (  0.0003838,  0.0004322)
c =   -6.634     ( -6.747    , -6.521)
d =   -0.03818   ( -0.03968  , -0.03667)
是否可以使用Math.Net实现这些结果?
关于nuget的Math.Net 3.7.0发行说明提到了一个CUDA本机提供程序.
Control.UseNativeCUDA();
抛出MathNet.Numerics.CUDA.dll的DllNotFoundException.对于MKL提供者,我需要安装额外的NuGet-Package.CUDA.dll还没有包吗?或者我需要安装什么?
我正在使用带有mono的Linux上的MathNet.
我正在评估Math.NET Symbolics,以便在我们的应用程序中使用,我们需要一个简单的数学解析器,供用户根据我们的测量数据计算自定义方程.我们的数据采用复数形式.
要测试我在LINQPad中使用以下代码片段:
var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB }
    };
Evaluate.Evaluate(symbols, Infix.ParseOrUndefined("1/(a*b)+cos(b)")).ComplexValue.Dump();
这很好用,但是我找不到以下运算符:
我们如何获得符号的REAL或IMAGINARY部分?
我试过real(b)和imag(b),但没有奏效.
作为一种解决方法,我也可以做以下事情,但我更喜欢像我这样的运营商abs(b):
var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB },
        { "b_REAL", complexB.Real },
        { "b_IMAG", …c# symbolic-math mathnet-numerics mathdotnet-symbolics math.net
我正在尝试在Math.NET Numerics中为矩阵和向量编写调试器类型代理/代理,因此调试器显示更多有用的信息(也在F#FSI中).类型层次结构如下:
Generic.Matrix<T>Double.Matrix : Generic.Matrix<double>Double.DenseMatrix : Double.Matrix具有封闭泛型类型的非泛型代理.如果代替Matrix<double>构造函数接受a Double.Matrix或a,它也可以以相同的方式工作Double.DenseMatrix.
public class MatrixSummary
{
    public MatrixSummary(Matrix<double> matrix) { }
    // ...
}
然后,用以下内容装饰Double.DenseMatrix:
[DebuggerTypeProxy(typeof(MatrixSummary))]
我不希望为每种类型实现单独的代理,所以让它通用:
public class MatrixSummary<T> where T : ...
{
    public MatrixSummary(Matrix<T> matrix) { }
    // ...
}
然后,用以下内容装饰Double.DenseMatrix:
[DebuggerTypeProxy(typeof(MatrixSummary<>))]
或者关闭:
[DebuggerTypeProxy(typeof(MatrixSummary<double>))]
和/或如果需要,也可以将该属性添加到基类.
这些都不起作用,例如在调试单元测试时,即使文档说它在使用开放泛型类型(即MatrixSummary<>)声明属性时应该工作.毕竟它也适用于List<T>等等.
有任何想法吗?
有关:
我有点卡在这里。MathNet Numerics的Forward Fourier结果似乎比MATLAB的结果少一半。
WindowsPhone 8上的MathNet.Numerics
Complex[] samples = { new Complex(5, 0), new Complex(6, 0), new Complex(1, 0), new Complex(2, 0), new Complex(5, 0) };
MathNet.Numerics.IntegralTransforms.Transform.FourierForward(samples);
MathNet.Numerics.IntegralTransforms.Transform.FourierInverse(samples);
原始信号
(5,0)(6,0)(1,0)(2,0)(5,0)
前向傅立叶
(8.4970583144992,4.96506830649455E-16)(2.67082039324994,-0.162459848116454)(-1.32917960675006,-0.688190960235587)(-1.32917960675006,0.688190960235586)(2.67082039324994,0.162459848116454)
逆傅立叶
(5,-1.24126707662364E-15)(6,0)(1,1.78742459033804E-15)(2,9.93013661298909E-16)(5,7.94410929039127E-16)
Matlab FFT和IFFT
原始信号
x = [5,6,1,2,5]
前向傅里叶fft(x)
ANS = 19.0000 5.9721 - 0.3633i -2.9721 - 1.5388i -2.9721 + 1.5388i 5.9721 + 0.3633i
傅里叶逆傅里叶变换(ans)
5.0000 6.0000 1.0000 2.0000 5.0000
有任何想法我在这里做错了吗?
我正在将一段目前使用numpy的python代码移植到IronPython(其原因与我正在编写的平台的细节有关).
由于numpy和IronPython不兼容,我需要用Math.NET等效替换每个numpy函数,我已将其作为外部引用添加.
作为Math.NET的新手,我很难找到相应的numpy.where()函数.
任何帮助将不胜感激!
以下计算运行速度比R慢得多:
let result = (X.Transpose() * b * X).Inverse() * (X.Transpose() * b) * e // about 4 seconds on my machine
或这个:
let result = (X.Transpose() * b * X).QR().Solve((X.Transpose() * b) * e)
哪里
open MathNet.Numerics.LinearAlgebra
let X = DenseMatrix.init 2000 7 (fun i j -> 1.)
let b = SparseMatrix.ofDiag (vector [for i in 0 .. 1999 do yield 1.])
let e = DenseMatrix.init 2000 1 (fun i j -> 1.)
但是在R中,通过以下方法可以实现相同的计算,只需要几百毫秒:
result <- solve(crossprod(X,b*X), crossprod(X,b*e)) // …我正在使用https://numerics.mathdotnet.com/Regression.html作为参考.我尝试在下面的代码中获取每个自变量的r值,但我不知道这是否正确,如果这是正确的方法,那么如何获得p值和T统计量.
这是我目前的代码:
var ema12 = calc.ListCalculationData.Select(i => (double)i.Ema12).ToArray();
var ema26 = calc.ListCalculationData.Select(i => (double)i.Ema26).ToArray();
var ema = calc.ListCalculationData.Select(i => (double)i.Ema).ToArray();
var targetvalue = calc.ListCalculationData.Select(i => (double)i.MRTargetValue).ToArray();
var matrixArray = CreateMatrix.DenseOfColumnArrays(ema12, ema26, ema);
var vectorArray = CreateVector.Dense(targetvalue);
var items = MultipleRegression.QR(matrixArray, vectorArray);
var r1 = GoodnessOfFit.RSquared(ema12, vectorArray);
var r2 = GoodnessOfFit.RSquared(ema26, vectorArray);
var r3 = GoodnessOfFit.RSquared(ema, vectorArray);
另外,要检查2个自变量之间的多重共线性,下面的代码是否正确?
var multiCol = GoodnessOfFit.RSquared(ema12,ema26);
mathnet-numerics ×10
c# ×6
math.net ×5
matlab ×2
c#-4.0 ×1
debugging ×1
f# ×1
fft ×1
ironpython ×1
numeric ×1
numpy ×1
parallel.for ×1
python ×1
regression ×1
rhinoceros ×1