Ошибка с развернутой библиотекой Matlab в C # (индекс в позиции 2 превышает границы массива (не должен превышать 1)) - PullRequest
0 голосов
/ 01 октября 2019

Я развернул функцию matlab в сборке .NET, и теперь у меня есть некоторые проблемы с реализацией.

Мой графический интерфейс сообщает мне, что в моем .m-файле в строке 12 есть Ошибка, но я действительно не вижу проблемы. Надеюсь, вы мне поможете!

Это мой код C #, использующий развернутую сборку .NET (Gradient) и части API Mathworks:

using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using Gradient;

namespace matlabv3
{
    public class Gradientenberechnung
    {
        public static void addNum()
        {
            int pdata = 250;

            CSharpGradient gradient = new CSharpGradient();
            MWArray output = gradient.gradientVarianteA((MWArray)pdata); //<-- Error happens here

            Console.WriteLine("Output: ", output);
            Console.ReadKey();

        }
    }
}

Это моя функция Matlabкоторый возвращает математический градиент:

function [outputArg] = gradientVarianteA(pdata)

%% Variante A - Only the maximum difference is calculated without division by the distance
    d = nan(10,9);
    for n = 1:numel(pdata)
        [j,i] = ind2sub(size(pdata),n);
        switch true
            case j==1
                if i == 1
                    d(j,i) = max(abs([...
                        NaN                         NaN                     NaN...
                        NaN                         NaN                     pdata(j,i)-pdata(j,i+1)...
                        NaN                         pdata(j,i)-pdata(j+1,i) pdata(j,i)-pdata(j+1,i+1)]));
                elseif i == 9
                    d(j,i) = max(abs([...
                        NaN                         NaN                     NaN...
                        pdata(j,i)-pdata(j,i-1)     NaN                     NaN...
                        pdata(j,i)-pdata(j+1,i-1)   pdata(j,i)-pdata(j+1,i) NaN]));
                else
                    d(j,i) = max(abs([...
                        NaN                         NaN                     NaN...
                        pdata(j,i)-pdata(j,i-1)     NaN                     pdata(j,i)-pdata(j,i+1)...
                        pdata(j,i)-pdata(j+1,i-1)   pdata(j,i)-pdata(j+1,i) pdata(j,i)-pdata(j+1,i+1)]));
                end
            case j==10
                if i == 1
                    d(j,i) = max(abs([...
                        NaN                         pdata(j,i)-pdata(j-1,i) pdata(j,i)-pdata(j-1,i+1)...
                        NaN                         NaN                     pdata(j,i)-pdata(j,i+1)...
                        NaN                         NaN                     NaN]));
                elseif i == 9
                    d(j,i) = max(abs([...
                        pdata(j,i)-pdata(j-1,i-1)   pdata(j,i)-pdata(j-1,i) NaN...
                        pdata(j,i)-pdata(j,i-1)     NaN                     NaN...
                        NaN                         NaN                     NaN]));
                else
                    d(j,i) = max(abs([...
                        pdata(j,i)-pdata(j-1,i-1)   pdata(j,i)-pdata(j-1,i) pdata(j,i)-pdata(j-1,i+1)...
                        pdata(j,i)-pdata(j,i-1)     NaN                     pdata(j,i)-pdata(j,i+1)...
                        NaN                         NaN                     NaN]));
                end
            otherwise
                if i == 1
                    d(j,i) = max(abs([...
                        NaN                         pdata(j,i)-pdata(j-1,i) pdata(j,i)-pdata(j-1,i+1)...
                        NaN                         NaN                     pdata(j,i)-pdata(j,i+1)...
                        NaN                         pdata(j,i)-pdata(j+1,i) pdata(j,i)-pdata(j+1,i+1)]));
                elseif i == 9
                    d(j,i) = max(abs([...
                        pdata(j,i)-pdata(j-1,i-1)   pdata(j,i)-pdata(j-1,i) NaN...
                        pdata(j,i)-pdata(j,i-1)     NaN                     NaN...
                        pdata(j,i)-pdata(j+1,i-1)   pdata(j,i)-pdata(j+1,i) NaN]));
                else
                    d(j,i) = max(abs([...
                        pdata(j,i)-pdata(j-1,i-1)   pdata(j,i)-pdata(j-1,i) pdata(j,i)-pdata(j-1,i+1)...
                        pdata(j,i)-pdata(j,i-1)     NaN                     pdata(j,i)-pdata(j,i+1)...
                        pdata(j,i)-pdata(j+1,i-1)   pdata(j,i)-pdata(j+1,i) pdata(j,i)-pdata(j+1,i+1)]));
                end
        end
    end

outputArg = d;
end
...