For-lus matlab
-
- Berichten: 12
For-lus matlab
Ik heb een probleem bij het maken van mijn for-lus. Dit was de opdracht:
Schrijf een functie structuur die voor een gegeven (1 x n) vector v, met als elementen [v1 v2 ... vn], een matrix V maakt die als volgt gestructureerd is
v1 v2 v3 ... v(n-2) v(n-1) v(n)
-v2 v1 v2 v3 ... v(n-2) v(n-1)
V= -v3 -v2 v1 v2 v3 ... v(n-2)
... ... ... ... ... ... ...
-v(n-2) ... ... ... ... v2 v3
-v(n-1) -v(n-2) ... ... ... v1 v2
-v(n) -v(n-1) -v(n-2) ... -v3 -v2 v1
De elementen van de hoofddiagonaal zijn allen gelijk aan v1.
De elementen van diagonaal i in de bovendriehoek zijn allen gelijk
aan v(i+1), met 1 ≤ i ≤ n-1.
De elementen van diagonaal i in de benedendriehoek zijn allen
gelijk aan -vi+1, met 1 ≤ i ≤ n-1.
Nu is het dus de bedoeling om deze matrix V via twee for-lussen te maken zonder dat het commando diag erin voorkomt. Invoer is v en uitvoer is V.
Ik was al tot deze functie gekomen, maar die is alleen maar juist voor de hoofddiagonaal en de diagonaal daarboven en daaronder. Kan iemand mij aub zeggen wat ik moet veranderen opdat die voor alle diagonalen juist is??? Alvast bedankt!
function V=structuur(v)
n=length(v);
i=1:n;
v= v(i);
V(i,i)= v(1);
for i=1:(n-1)
for m=0:(i-1);
V(i,i+1)=v((i+1)-m);
V(i+1,i)=-v((i+1)-m);
end
end
Schrijf een functie structuur die voor een gegeven (1 x n) vector v, met als elementen [v1 v2 ... vn], een matrix V maakt die als volgt gestructureerd is
v1 v2 v3 ... v(n-2) v(n-1) v(n)
-v2 v1 v2 v3 ... v(n-2) v(n-1)
V= -v3 -v2 v1 v2 v3 ... v(n-2)
... ... ... ... ... ... ...
-v(n-2) ... ... ... ... v2 v3
-v(n-1) -v(n-2) ... ... ... v1 v2
-v(n) -v(n-1) -v(n-2) ... -v3 -v2 v1
De elementen van de hoofddiagonaal zijn allen gelijk aan v1.
De elementen van diagonaal i in de bovendriehoek zijn allen gelijk
aan v(i+1), met 1 ≤ i ≤ n-1.
De elementen van diagonaal i in de benedendriehoek zijn allen
gelijk aan -vi+1, met 1 ≤ i ≤ n-1.
Nu is het dus de bedoeling om deze matrix V via twee for-lussen te maken zonder dat het commando diag erin voorkomt. Invoer is v en uitvoer is V.
Ik was al tot deze functie gekomen, maar die is alleen maar juist voor de hoofddiagonaal en de diagonaal daarboven en daaronder. Kan iemand mij aub zeggen wat ik moet veranderen opdat die voor alle diagonalen juist is??? Alvast bedankt!
function V=structuur(v)
n=length(v);
i=1:n;
v= v(i);
V(i,i)= v(1);
for i=1:(n-1)
for m=0:(i-1);
V(i,i+1)=v((i+1)-m);
V(i+1,i)=-v((i+1)-m);
end
end
- Berichten: 7.224
Re: For-lus matlab
Bekijk je for-loop nog eens goed. Om alle elementen goed te hebben. moet je met behulp van je twee for-loops ook alle elementen van je matrix doorlopen hebben.
Bekijk eerst eens een willekeurige rij k en probeer die te maken met 1 for-loop. Er zit namelijk een duidelijk verband tussen de vorm van de vector v en een willekeurige rij k in de matrix V. Vervolgens loop je alle rijen door met een tweede for-loop.
Uit je opdracht begrijp ik dat je het met 2 for-loops moet doen? Het kan namelijk ook met 1 for-loop en dat is vanuit Matlab perspectief beter.
Bekijk eerst eens een willekeurige rij k en probeer die te maken met 1 for-loop. Er zit namelijk een duidelijk verband tussen de vorm van de vector v en een willekeurige rij k in de matrix V. Vervolgens loop je alle rijen door met een tweede for-loop.
Uit je opdracht begrijp ik dat je het met 2 for-loops moet doen? Het kan namelijk ook met 1 for-loop en dat is vanuit Matlab perspectief beter.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton