Info

This question is closed. Reopen it to edit or answer.

matrix operation by element of other matrix

1 view (last 30 days)
Offroad Jeep
Offroad Jeep on 7 Apr 2015
Closed: MATLAB Answer Bot on 20 Aug 2021
Hi All, Hope all going fine...... I need your help please....... THANKS IN ADVANCE FOR TAKING OUT TIME..............
Consider A = 3 X 3 matrix. then I want to generate N number of random values. take first value and add to the matrix. if the value reduces accept and replace the element of A with that new value otherwise keep the value.
EXAMPLE : for understanding of helpers A = 2 -3 7 RANDOM NUMBERS= -1 3 -2 -1 TAKE FIRST RANDOM NUMBER THAT IS -1, ADD TO A A_NEW = 1 -4 6 NOW I WANT TO KEEP 1 AND 6 BECAUSE THE COME CLOSER TO 0 BUT -4 HAS GONE FAR FROM ZERO SO REJECT IT AND GIVE OUTPUT AS A = 1 -3 6
NOW TAKE THE NEXT RANDOM NUMBER DO THE SAME PROCEDURE NOW A_NEW BECOMES = 4 0 9 REJECT 4 AND 9 AND MAKE A AS A = 1 0 6
NOW TAKE NEXT RANDOM NO BUT DON'T OPERATE ON 0 VALUES THAT IS NEXT RANDOM NO IS -2 SO A_NEW WILL BE -1 0 4 . IMPORTANT 1 HAS CROSSED ZERO AND BECAME -1 SO DONT CHANGE IT AND KEEP A = -1 0 4
IN EASY WORDS GENERATE A MATRIX N x N WITH + AND - VALUES .... TAKE RANDOM NUMBERS IN + AND -, .... OPERATE THEM IF THE ELEMENT APPROACHES 0 CHANGE IT WITH NEW ONE AND IF NOT RETAIN THE PREVIOUS VALUE. ULTIMATELY AFTER SEVERAL NUMBER OF MONTE CARLO STEPS THE ENTIRE MATRIX MOST OF THE VALUES WILL BE NEAR TO ZERO.............
I have tried the following code but want to stop it when values reach between -0.5 and 0.5
clc
clear all
format compact
a = randi(6,3,3)-3
a = a(:)
nmc = 50
da(1:nmc)=((rand(1,nmc))-0.5)
for i = 1:nmc
a_trial = a + da(i)
if a_trial < a
a(:,:) = a_trial
elseif a_trial > a
a_trial = a(:,:)
end
end

Answers (1)

James Tursa
James Tursa on 7 Apr 2015
Edited: James Tursa on 7 Apr 2015
for i = 1:nmc
a_trial = a + da(i);
x = abs(a_trial) < abs(a); % Find all indexes where a_trial is closer to 0
a(x) = a_trial(x); % Replace elements of a with elements of a_trial closer to 0
if( max(abs(a)) <= 0.5 ) % If all elements are between -0.5 and +0.5
break;
end
end

Tags

Community Treasure Hunt

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

Start Hunting!