Get Help

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Community
- :
- PTC Mathcad
- :
- PTC Mathcad
- :
- Re: Programing, random walk applications

Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

06-06-2012
04:29 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-06-2012
04:29 PM

Programing, random walk applications

This is a program I am having a problem getting to run. It is using a random walk to determine a "temperature" at a point (xo,yo) in a square plate. The temperature distribution is T(x,y) with the boundaries held at specified temperatures. There is no heat transfer in the z-direction. The method is solving for

T(x,y) one point at a time for the LaPlace equation.

The method is based on the relaxation technique, where at at given point there is 1/4 probability to move in the four directions x+, x-, y+, y-. Several random walks are performed from (xo,yo), each time reaching a different boundary. The frequency of how often one reaches a given boundary out of N random walk trials times the temperature of that boundary will estimate T(xo,yo) =( Sfi*Ti). (This is a problem given in NUMBER CRUNCHING, by Paul J. Nahin. He writes great books)

The attached Mathcad 14.0 program which includes a schematic of the heat transfer scenario, What I think is the program algorithm and the Mathcad program is attached. I have tried several "permutations" of the program and still can't get it to work. Help, please.

8 REPLIES 8

06-07-2012
12:18 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-07-2012
12:18 AM

Can you provide a bit more information about the algorithm?

I'm confused about the quantities involved here: the first diagram seems to imply that T represents temperature but x & y imply distance (over 0 to 1, which contradicts the xo and yo initial values)

Furthermore, , I can't see how it ever gets into the while loop, as T4 = T2 and T isn't updated at any stage, so the relation T4<y<T2 is never true,

Your "if xdir<0.5" section doesn't appear to agree with the flowchart, which seems to require both xdir ** and** ydir be less than 0.5 to increment x and y?

Stuart

PS. It's unusual to see one-line multiple assignments done as part of a boolean expression; it works but could be confusing to some readers by implying that it's part of the logic.

06-14-2012
03:40 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-14-2012
03:40 PM

This problem is in Nahin's book - Number Crunching. The "exchange" of (x,y) - (Tx, Ty) works out because he chose one side to have a temperature of 100 C and the other three side as 0 C. It is a unit square divided into 100 parts and the temperature is divided into 100 parts. Ordinarily one would have to choose a different "delta" for space and temperature.

As I mentioned, I thought I had the algorithm correct, but not sure. Also, I never have any luck setting up a "while loop". The idea is to random walk in the unit plane until one of the edges is reached. At each point one has four choices: + or - 1 x and + or - 1y ( in temperature units). Depending on which edge is reached a frequency( fi, i =1,2,3 or 4) of one is recorded for that edge. After many random walks, the quantity: sum fiTi then estimates the steady state temperature ( via solution of the LaPlace) for the starting point or (xo, yo).

Nahin sets up this problem in Matlab - I may be able to scan his program. I tried to duplicate his program in Mathcad and obviously didn't succeed.

Don R.

06-15-2012
03:36 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-15-2012
03:36 AM

Donald Regula wrote:

...This problem is in Nahin's book - Number Crunching...

Some of the pages of this book can be found here:

http://books.google.ru/books?id=pxz8G-KF3ZgC&printsec=frontcover&hl=ru#v=onepage&q&f=false

Donald Regula wrote:

...Nahin sets up this problem in Matlab - I may be able to scan his program...

Can you provide some screenshots?

06-15-2012
04:35 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-15-2012
04:35 AM

Donald Regula wrote:

Nahin sets up this problem in Matlab - I may be able to scan his program.

The Matlab code can be obtained from http://press.princeton.edu/links/numbercrunchingcodes.pdf

It is as follows (unfortunately the indentation formatting has been lost in copying!) :

%walk.m

N=input('How many walks?');

X=input('X=?');Y=input('Y=?');

X1=X;Y1=Y;

fraction=zeros(1,4);

for loop=1:N

X=X1;Y=Y1;

while X>0&&X<100&&Y>0&&Y<100

xdir=rand;ydir=rand;

if xdir<0.5

X=X+1;

else

X=X-1;

end

if ydir<0.5

Y=Y+1;

else

Y=Y-1;

end

end

if Y==0

i=1;

elseif Y==100

i=3;

elseif X==0

i=2;

else

i=4;

end

fraction(i)=fraction(i)+1;

end

fraction=fraction/N;

fraction,100*fraction(1)

Alan

06-15-2012
04:22 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-15-2012
04:22 AM

StuartBruff wrote:

Can you provide a bit more information about the algorithm?

If you're interested in the basic idea behind the method it's explained briefly in the attached pdf article. This appeared in Mathematics Today magazine last August. The specific example Donald is trying to solve is only mentioned in passing at the end though.

Alan

06-07-2012
01:28 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-07-2012
01:28 AM

The Mathcad program language has not the goto operator.

Therefore better use not flowcharts but structure symbols for graphical descriptions of Mathcad programs.

See please - http://twt.mpei.ac.ru/ochkov/Mathcad_14/MathcadWorkSheetAsFlowChartEng.pdf

06-07-2012
03:32 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-07-2012
03:32 AM

More like the attached I think (though you'll probably need far more than 360 trials to get a decent result).

Alan

Note: Don't confuse displacement and temperature!! Unfortunately, your displacements (x and y) run from 0 to 100, and your temperatures are either 0 or 100. This doesn't mean you can sensibly compare a displacement and a temperature.

06-07-2012
04:38 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Notify Moderator

06-07-2012
04:38 PM

On second thoughts, my previous effort always made an x-direction change before a y-direction change. The direction changes should be random, so the attached is better.

Alan

PS I agree that Paul Nahin writes great books!