Nel codice che hai pubblicato non è chiaro cosa sia il parametro "x" in input alla funzione.
Se è uno scalare che definisce la dimensione della matrice, l'istruzione "length(x)" non ha senso perchè la "lunghezza di uno scalare è 1 e, quindi i cicli for eseguiranno una sola iterazione.
Se, invece, è un vettore, non capisco come tu voglia utilizzarlo.
Assumendo che sia uno scalare, devi modificare la definizione dei due loop sostituendo "lengrh(x)" con "x".
Puoi anche semplificare il blocco "if" inizializzando a "0" la matrice prima dei loop ed eliminando la condizione "else"; questo ti consente anche, in caso di matrici molto grandi, di aumentare la velocità di esecuzione in quanto il codice non deve allocare la memoria per la matrice ad ogni iterazione.
Nota, anche, che nel codice che hai pubblixato manca l'"end" che chiude il ciclo for esterno.
D=zeros(x,x)
for m=1:x
for n=1:x
if n==m
D(m,n)=1
end
end
end
Come scritto nella risposta precedente, ci sono molti altri modi per risolve il problema. Ad esempio:
Con la funzione "diag":
D=diag(ones(x,1))
Usando l'indexing ed accedendo alla matrice con un solo indice:
D2=zeros(x,x)
D2(1:x+1:x.^2)=1