Cells and Matrix division
显示 更早的评论
Hi,
I have a problem where I want to find the solution to A*x=B
Where A is a matrix of 4x4 where each element in the matrix is of the size 1x10. B is a matrix 4x1 where each element is of the size 1x10. The x matrix should be a matrix 4x1 where each element is of the size 4x1 where each element is the size of 1x10. How can I succed with this?
If needed I can write a code with exemples of the matrices.
2 个评论
Star Strider
2021-11-22
Simply out of curiosity, find a solution to what problem?
Filip Wadman
2021-11-22
回答(2 个)
I'm still assuming you're using cell arrays, since that's the only way that the description makes sense.
I'm sure someone can whip up a more elegant solution, maybe even directly dealing with the cell array without converting it. ... but this is what I did as a simplified example.
sa = 4; % size of system
nsys = 10; % number of systems
% generate a test array (all coefficient matrixes)
A = repmat(randi([-100 100],sa,sa),[1 1 nsys]);
% rearrange to mimic the array you have
A = cellfun(@(x) permute(x,[1 3 2]),num2cell(A,3),'uniform',false)
% turn it back into a regular array
A = cell2mat(cellfun(@(x) permute(x,[1 3 2]),A,'uniform',false))
% all b vectors as you describe
b = repmat({repmat(10,[1 nsys])},[sa 1]);
% turn it into a regular array
b = cell2mat(b)
x = zeros(sa,nsys);
for k = 1:nsys
x(:,k) = A(:,:,k)\b(:,k);
end
x % the answers
% turn it back into an unweildy cell array??
x = num2cell(x,2)
类别
在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!