Azzera filtri
Azzera filtri

How to avoid writing a for loop in A\b when A and b are different dimensions

2 visualizzazioni (ultimi 30 giorni)
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 ?

Risposta accettata

Matt J
Matt J il 18 Feb 2023
Modificato: Matt J il 18 Feb 2023
soln=pagemldivide(A,reshape(b,[],1,Nx));
soln=soln(:,:).';
  2 Commenti
Matthew Kehoe
Matthew Kehoe il 18 Feb 2023
Wow! I think there is an extra comma after the second colon. Auto-reshaping b to the same size as A through is an amazing Matlab feature.
Matt J
Matt J il 18 Feb 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.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by