Сохранить то же символическое имя для построения системы уравнений с массивом символьных переменных

#matlab #matrix #matrix-multiplication #equation #equation-solving

#matlab #матрица #матрица-умножение #уравнение #решение уравнений

Вопрос:

У меня проблема с объявлением массива символьных переменных.

В следующем фрагменте кода eigenv_sp это числовой массив размером 7×7 и x символьный массив размером 7x7x2 :

 % Symbolic variables
x = sym('x', [7 7 2]);
aP1 = sym('aP1', [7 7]);

for k=1:7
  for l=1:7
    aP1(k,l) = sum(x(k,1:7,1).*eigenv_sp(1:7,l));
  end
end
 

Я получаю следующую ошибку :

 Error using symengine
Array sizes must match.

Error in sym/privBinaryOp (line 946)
            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});

Error in .* (line 267)
        X = privBinaryOp(A, B, 'symobj::zip', '_mult');

Error in test1 (line 72)
    aP1(k,l) = sum(x(k,1:7,1).*eigenv_sp(1:7,l))
 

Я не понимаю, как смешивать символьное выражение x(k,1:7,1) и числовой элемент
eigenv_sp(1:7,l) .

Действительно, после этой попытки смешать оба варианта я хотел бы реализовать систему уравнений для решения с 49 неизвестными переменными (я работаю с размером матрицы 7×7), и я не знаю, как поступить.

Я попытался начать с функции :

 function F=myfun(x,i,j)

% First part
F(1) = a2(i,j)   sum(aP1(i,1:7).*bP2T(1:7,j))   sum(bP2(i,1:7).*aP1T(1:7,j))   b2(i,j) - eq(i,j);

% second part
for i=1:7
  for j=1:7
    F(7*(i-1) j 1) = sum(F1(i,1:7).*aP1(1:7,j))   sum(F1(i,1:7).*bP2(1:7,j))   sum(F2(i,1:7).*aP1(1:7,j))   sum(F2(i,1:7).*bP2(1:7,j)) - ...
sum(aP1(i,1:7).*ad1(1:7,j))   sum(bP2(i,1:7).*ad1(1:7,j))   sum(adP1(i,1:7).*dP2(1:7,j))   sum(bP2(i,1:7).*dP2(1:7,j));
  end
end
end
 

и решающая часть :

 % Solution of system of non linear equations with loop
y = zeros(7, 7, 2);
for i=1:7
  for j=1:7
    a0 = 1e7;
    b0 = 1e7;
    x0 = [ a0 b0];
    fun = @(x)myfun(x,i,j);
    y(i,j,:) = fsolve(fun,x0)
    end
end
 

Цель состоит в том, чтобы получить a(i,j)=x(i,j,1) и b(i,j)=x(i,j,2) которые являются решениями 2 матриц, которые я хочу построить, путем каждого решения, которое дает (i, j) элемент.

Что здесь может быть не так? Как я могу обойти эту проблему реализации в Matlab?

Обновить

Извините, входные матрицы расположены здесь :

Fisher_GCsp_flat

Fisher_XC_GCph_WL_flat

и Matlab test1.m , который воспроизводит ошибку :

test1.m

Комментарии:

1. Пожалуйста, предоставьте полный и минимальный пример, который можно запустить на нашем компьютере. Что такое a2 ? что такое bP2T ? Почему вы перезаписываете все элементы aP1 в своем первом цикле? На этот вопрос невозможно ответить, если вы не предоставите всю необходимую информацию.

2. @abchardon Я предоставил вам 2 матрицы Фишера и скрипт ( test1.m ), который воспроизводит ошибку: надеюсь, это поможет