Borrar filtros
Borrar filtros

i want to take different values in each loop ?

2 visualizaciones (últimos 30 días)
kitty varghese
kitty varghese el 10 de Ag. de 2017
Editada: Jan el 10 de Ag. de 2017
close all;
clear all;
clc;
v=[1 2 3;4 5 6;7 8 9]
[n m]=size(v);
w=double(abs(rand(n,5)));
h=double(abs(rand(5,m)));
% L2=norm(w,2);
l2=zeros(3,1)
%l2 norm column wise
for i=1:5
l2(i)=norm(w(:,i),2)
end
%l1 norm column wise
l1=zeros(5,1);
for k=1:5
l1(k)=(l2(k)*(sqrt(3)-(sqrt(3)-1)*0.9))
end
%%i want to make a loop such that it takes value of l1 for each w
%%that is I want to avoid rewriting the below code for taking each value of l1.
for i1=1:3
w(i1)=w(i1)+(l1(1)-sum(w(:,i1)))/3
end
for i2=1:3
w(i2)=w(i2)+(l1(2)-sum(w(:,i2)))/3
end
for i3=1:3
w(i3)=w(i3)+(l1(3)-sum(w(:,i3)))/3
end
for i4=1:3
w(i4)=w(i4)+(l1(4)-sum(w(:,i4)))/3
end
for i5=1:3
w(i5)=w(i5)+(l1(5)-sum(w(:,i5)))/3
end
  1 comentario
Stephen23
Stephen23 el 10 de Ag. de 2017
@ kitty varghese: why are you using loops anyway? These are simple arithmetic operations, which could easily be vectorized:

Iniciar sesión para comentar.

Respuesta aceptada

kitty varghese
kitty varghese el 10 de Ag. de 2017
Editada: Stephen23 el 10 de Ag. de 2017
u can make an outer loop for changing the value of l1
for i0=1:5
for i1=1:3
w(i1)=w(i1)+(l1(i0)-sum(w(:,i1)))/3
end
end
  1 comentario
Jan
Jan el 10 de Ag. de 2017
Editada: Jan el 10 de Ag. de 2017
This looks strange:
w(i1)=w(i1)+(l1(1)-sum(w(:,i1)))/3
you access w as a vector on the left, and as a matrix on the right.
w=double(abs(rand(n,5)));
is the same as
w = rand(n,5);
Instead of
l1=zeros(5,1);
for k=1:5
l1(k)=(l2(k)*(sqrt(3)-(sqrt(3)-1)*0.9))
end
you can write:
l1 = l2 * (sqrt(3)-(sqrt(3)-1)*0.9));
This is nicer and faster.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by