For-lus matlab

Moderators: jkien, Xilvo

Reageer
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

Gebruikersavatar
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.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

Reageer