How can I build a Matrix dependencies of a variabel and a matrix? Easy question..
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
*Here is an example,
N3 uses N2 and one "k" variable(k is 3 for N3). But I entered k variable by hand. Since I want to find N4 using N3 and "k" (k is 4 for N4), I want "k" goes automaticly...
k starts from 2 and ends whenever I want. I don't want to create another for loop because I have already 2 for loops.And I know there is an easy way.But I couldn't remember it. Something like= N3(:,:,3).*What we_ call *_for these matrices? If you don't know how to this way, can you tell me how to do with for loops?
Thanks and Best Regards..
------------------
N2=zeros(rr-3,rr-2);
for j=1:rr-3
for i=1:rr-2
A1=(X(i+1)-X(i));
A2=(X(i+2)-X(i+1));
if A1==0 && A2==0
N2(j,i)=0;
elseif A1==0 && A2~=0
N2(j,i)=((X(i+2)-t(j))/(A2))*N1(j,i+1);
elseif A2==0 && A1~=0
N2(j,i)=((t(j)-X(i))/(A1))*N1(j,i);
elseif A2~=0 && A1~=0
N2(j,i)=((X(i+2)-t(j))/(A2))*N1(j,i+1)+((t(j)-X(i))/(A1))*N1(j,i);
end
end
------------------------
N3=zeros(rr-3,rr-3);
for j=1:rr-3
for i=1:rr-3
A1=(X(i+2)-X(i));
A2=(X(i+3)-X(i+1));
if A1==0 && A2==0
N3(j,i)=0;
elseif A1==0 && A2~=0
N3(j,i)=((X(i+3)-t(j))/(A2))*N2(j,i+1);
elseif A2==0 && A1~=0
N3(j,i)=((t(j)-X(i))/(A1))*N2(j,i);
elseif A2~=0 && A1~=0
N3(j,i)=((t(j)-X(i))/(A1))*N2(j,i)+((X(i+3)-t(j))/(A2))*N2(j,i+1);
end
end
end
------------------------
0 commentaires
Réponse acceptée
Jan
le 17 Juil 2013
Modifié(e) : Jan
le 17 Juil 2013
If you use N{3} instead of N3 an additional loop would be easy. At least I assume that it would. Unfortunately I cannot understand the first sentence already:
N3 uses N2 and one "k" variable(k is 3 for N3).
What is "one k variable" and where does this appear in the code? What is rr?
You could avoid the inner loop:
N = zeros(rr-3, rr-3);
for j = 1:rr-3
A1 = X(2:rr-1) - X(1:rr-3);
A2 = X(4:rr) - X(2:rr-2);
% A1==0 && A2==0 : N(j,i)=0; Is the default already
index = find(A1==0 & A2~=0);
N(j, index) = ((X(index + 3) - t(j)) ./ A2(index)) * N2(j,index + 1);
index = find(~A1~=0 & A2==0);
N(j, index) = ((t(j) - X(index)) ./ A1(index)) * N2(j,index);
index = find(A1~=0 & ~A2~=0);
N(j, index) = ((t(j) - X(index)) ./ A1(index)) * N2(j,index) + ...
((X(index + 3) - t(j)) / A2(index)) * N2(j, index+1);
end
N{3} = N;
Another approach would be to calculate both matrices and replace NaNs by zeros:
% !For demonstration only! Indices are most likely wrong!
A1 = X(2:rr-1) - X(1:rr-3);
A2 = X(4:rr) - X(2:rr-2);
c1 = bsxfun(@minus, (t ./ A1)' - X ./ A1) .* N2;
c2 = bsxfun(@minus, (X ./ A2)' - t ./ A2) .* N2;
c1(insan(c1)) = 0;
c2(insan(c2)) = 0;
N{3} = c1 + c2;
I did not care about the pile of indices here and I cannot run the versions due to the absence of test data. So treat this as an idea only and implement it by your own.
0 commentaires
Plus de réponses (1)
STamer
le 17 Juil 2013
Modifié(e) : STamer
le 17 Juil 2013
7 commentaires
Jan
le 17 Juil 2013
Modifié(e) : Jan
le 17 Juil 2013
@STamer: I added a personal flag such that I can let Google find it again, when I'm back on my Matlab computer. I see so many messages per day, that I cannot remember where I wanted to add something after a test with Matlab. Sorry for the confusion.
Actually I do not like to sync my bookmarks through the internet. But of course I could sync a list of my visited links by Prism.
Unfortunately I'm too tired now for further experiments. I take a look into the problem tomorrow, if no other contributor has been faster.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!