#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?
Обновить
Извините, входные матрицы расположены здесь :
и Matlab test1.m
, который воспроизводит ошибку :
Комментарии:
1. Пожалуйста, предоставьте полный и минимальный пример, который можно запустить на нашем компьютере. Что такое
a2
? что такоеbP2T
? Почему вы перезаписываете все элементыaP1
в своем первом цикле? На этот вопрос невозможно ответить, если вы не предоставите всю необходимую информацию.2. @abchardon Я предоставил вам 2 матрицы Фишера и скрипт (
test1.m
), который воспроизводит ошибку: надеюсь, это поможет