How to avoid writing a for loop in A\b when A and b are different dimensions
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Matthew Kehoe
el 18 de Feb. de 2023
Comentada: Matt J
el 18 de Feb. de 2023
I am currently solving where A is a 3d complex array of dimension and b is a 2d real array of dimension . In order to do this, I create a single for loop which calls linsolve() times.
Could I avoid writing this for loop so that I wouldn't have to spend the extra computation calling linsolve() times? It appears that the pagemldivide() function might be one way of doing this.
clear all; close all;
% Original Method
Nx = 32;
A = complex(rand(Nx+1,Nx+1,Nx),rand(Nx+1,Nx+1,Nx)); % A is a 3D complex array
b = rand(Nx+1,Nx); % b is a 2D real array
soln = zeros(Nx,Nx+1); % the resulting solution will be a 2d complex array
for j=1:Nx
prob = linsolve(A(:,:,j),b(:,j)); % A\b
soln(j,:) = prob.'; % Size (Nx,Nx+1)
end
% New Method
soln_tilde = pagemldivide(A(:,:).',b(:)); % Size (Nx+1,1)
Is there a way of using pagemldivide() (or a seperate Matlab function) to avoid writing a for loop and get the same resulting solution of size ?
0 comentarios
Respuesta aceptada
Matt J
el 18 de Feb. de 2023
Editada: Matt J
el 18 de Feb. de 2023
soln=pagemldivide(A,reshape(b,[],1,Nx));
soln=soln(:,:).';
2 comentarios
Matt J
el 18 de Feb. de 2023
Wow! I think there is an extra comma after the second colon.
There was, but I fixed it. It should work now. If it does, please Accept-click the answer.
Más respuestas (0)
Ver también
Categorías
Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!