I work in signal processing field. I have a system that has input c as a 1-D vector (b is the index of c), and P as a system response matrix. Σ is the covariance matrix. Both P and Σ could be measured to a reasonable accuracy. With the input c, I measure a signal m which is a function of time (t). I know that m is also affected by a noise term n:
I believe the noise can be reasonably described by a multi-variate Gaussian model so I am trying to use MLE approach to estimate c. Below is (I believe) the slightly simplified probability equation (based on this):
The vector c has about 1000 elements. It has an equality constraint and an inequality constraint.
I was able to get a reasonable result using MATLAB fmincon function but the speed is very slow. My model function was written in vectors/matrices, which evaluates very fast.
However I am hoping to apply the same model to at least 1E5 problems repeatedly (the stretch goal is to apply it to every signal we detect). The current speed seems too slow for that. These problems do not have similar answers, however for each problem, I know that physically the answer (optimal c) would have a somewhat 'continuous' region (with regard to b) that are non-zero values, while the rest should all be zeros. In addition, I could use a brute method to 'guess' an initial start point (such as a 1-D discrete delta function), and I know that the 'weighted' centroid of the optimal c and the guessed initial values are close to each other.
I am wondering: if I switch to another language such as C++ (with some open source libraries), is the speed going to be improved significantly? The languages I am currently considering include Python/Julia/C++.
I also have another option which is renting some high-performance computer cores but that would be my last choice.