Subscripted Assignment Dimension Mismatch. Matlab Deutsch

For the case of t being equal to ten, it was found that the line of code that was generating the Subscripted assignment dimension mismatch error was


The variables F1, lon, lat, and weight were all empty due to the all elements in the s(t,:,:) matrix being set to NaN.

A solution was to address this in the code as follows - if it was found that the a matrix was empty (after the removal of NaNs) then do nothing (or set the output to be all zeros) and just continue with the next iteration of the for loop

a=squeeze(s(t,:,:)); a=a(:); bad1=find(isnan(a)==1); a(bad1) = []; if isempty(a) % maybe set all AM data to zero for this t AM(t,:,:) = 0; else lon=REF_lon(:); lon(bad1)=[]; lat=REF_lat(:); lat(bad1)=[]; w = weight(:); w(bad1)=[]; F1=TriScatteredInterp(lon,lat,a,'natural'); W1=TriScatteredInterp(lon,lat,w,'natural'); a_m=F1(x,y); AM(t,:,:)=a_m; W=W1(x,y); Wrep(t,:,:)=W; end

I am trying to solve the set of 3 differential equations:

dTs(1) = 2*gd*Ts(3)-Ts(1)/TT(j)-aa*(Ts(1)^2+Ts(2)^2)/(TT(j)*GG(j)); dTs(2) = -Ts(2)/TT(j)-aa*(Ts(1)^2+Ts(2)^2)/(TT(j)*GG(j)); dTs(3) = gd*Ts(2)-Ts(3)/TT(j)-aa*Ts(3)*(Ts(1)+Ts(2))/(TT(j)*GG(j))-2*gd*GG(j);

whereas the factors TT(j) and GG(j) are in a loop. When I run the code I receive the error message: "Subscripted assignment dimension mismatch", and It looks like the ODE module fails to converge at t>~100s. In this case I sometimes cut the higher end of tspan (called tx in my code) to times that are smaller than 100 and then the code delivers a solution, but I need the response at larger times too. It might also help to know that the factor aa should be very small (<1e-6) in order for the code to deliver any solution. Here the entire code:

tx=[0 100] for j=1:iGT % Solving the DE for individual relaxation modes j [tt,Ts] = ode23(@fTs,tx,[0 0 0]); T110(:,j)=Ts(:,1); T220(:,j)=Ts(:,2); T120(:,j)=Ts(:,3); endfunction dTs=fTs(t,Ts) dTs = zeros(3,1); % a column vector dTs(1) = 2*gd*Ts(3)-Ts(1)/TT(j)-aa*(Ts(1)^2+Ts(2)^2)/(TT(j)*GG(j)); dTs(2) = -Ts(2)/TT(j)-aa*(Ts(1)^2+Ts(2)^2)/(TT(j)*GG(j)); dTs(3) = gd*Ts(2)-Ts(3)/TT(j)-aa*Ts(3)*(Ts(1)+Ts(2))/(TT(j)*GG(j))... -2*gd*GG(j); end

0 Thoughts to “Subscripted Assignment Dimension Mismatch. Matlab Deutsch

Leave a comment

L'indirizzo email non verrĂ  pubblicato. I campi obbligatori sono contrassegnati *