I have: Error using bsxfun Non-singleton dimensions of the two input arrays must match each other.

1 visualizzazione (ultimi 30 giorni)
So I have some code which I want to get working and I don't understand the error which is being given to me which is: Error using bsxfun
Non-singleton dimensions of the two input arrays must match each other.
My code is:
function A=test_anode(t,D,c_0,Gamma,I_app)
%Compute the mu_n
N=20;
mu_n=zeros(N,1); %array which stores the solutions
old=0;error=10^-8;
for i=1:N
err=10;
while err>error %This solves the iteration x_n+1=atan(x_n)+n*pi
y_n=atan(old)+i*pi;
err=abs(tan(y_n)-y_n);
old=y_n;
end
mu_n(i)=y_n;
end
%Define the functions
a_1=@(s,mu) c_0*(1+mu.^-2).*sin(mu).*exp(-D*mu.^2.*s).*(-cos(mu)*mu.^-1+sin(mu).*mu^-2);
a_2=@(s,mu) -2*Gamma*I_app*(1+mu.^-2).*(sin(mu)).^2.*(1-exp(-D*mu.^2.*s));
%Then populate the matrices
A=bsxfun(a_1,t,mu_n)+bsxfun(a_2,t,mu_n);
The vector t can be anything, not necessarily the same length as mu_n. Is that what is cauing the issue?

Risposte (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov il 17 Ott 2019
Hi,
Here is the corrected ver. of your code:
function A=test_anode(t,D,c_0,Gamma,I_app)
%Compute the mu_n
N=20;
mu_n=zeros(N,1); %array which stores the solutions
old=0;error=10^-8;
for i=1:N
err=10;
while err>error %This solves the iteration x_n+1=atan(x_n)+n*pi
y_n=atan(old)+i*pi;
err=abs(tan(y_n)-y_n);
old=y_n;
end
mu_n(i)=y_n;
end
%Define the functions
a_1=@(s,mu) c_0*(1+mu.^-2).*sin(mu).*exp(-D*mu.^2.*s).*(-cos(mu).*mu.^-1+sin(mu).*mu.^-2);
a_2=@(s,mu) -2*Gamma*I_app*(1+mu.^-2).*(sin(mu)).^2.*(1-exp(-D*mu.^2.*s));
%Then populate the matrices
A=bsxfun(a_1,t,mu_n)+bsxfun(a_2,t,mu_n);
end
Good luck.

Sulaymon Eshkabilov
Sulaymon Eshkabilov il 17 Ott 2019
Modificato: Sulaymon Eshkabilov il 17 Ott 2019
Ok

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by