Items tagged with for-loop

I have a nested for loop that iterates through a range of values for x and y coordinates to create a 3d surface for illustration of my research. after the x loop there is a y loop, and inside of that y loop is a series of commands to find some eigenvalues of a matrix (which become the z coordinates) and sort them into already open files. This isn't bad when the precision i require is more than .02, but some of my matrices require up to 0.005 or less. The latter precision costs hours of computation time on just one processor. However my laptop has an i7, so I want to see if i can get the for loop to send its next iteration to the next processor in line while it has the previous ones still calculating. Have any tips?

Hi I have the question where i have to create a program in Maple

to find all the solutions to x^2 = -1(mod p) where 0 <= x < p . 

The progam has to be tested with different p values. 



how i can write this line ''for'' in maple?


TopEdge = "C";
BottomEdge = "C";
LeftEdge = "C";
RightEdge = "C";

"For[i = 1, i < m + 2, i++, w[i, 1] = 0; w[i, n + 1] = 0];  For[j = 1, j < n + 2, j++, w[1, j] = 0; w[m + 1, j] = 0];  If[TopEdge == "C", For[i = 1, i < m + 2, i++, w[i, 0] = w[i, 2]],    If[TopEdge == "S", For[i = 1, i < m + 2, i++, w[i, 0] = -w[i, 2]],     "Invalid Input Data!"]]  If[BottomEdge == "C",    For[i = 1, i < m + 2, i++, w[i, n + 2] = w[i, n]],    If[BottomEdge == "S",     For[i = 1, i < m + 2, i++, w[i, n + 2] = -w[i, n]],     "Invalid Input Data!"]]  If[LeftEdge == "C", For[j = 1, j < n + 2, j++, w[0, j] = w[2, j]],    If[LeftEdge == "S", For[j = 1, j < n + 2, j++, w[0, j] = -w[2, j]],     "Invalid Input Data!"]]  If[RightEdge == "C",    For[j = 1, j < n + 2, j++, w[m + 2, j] = w[m, j]],    If[RightEdge == "S",     For[j = 1, j < n + 2, j++, w[m + 2, j] = -w[m, j]],     "Invalid Input Data!"]]  w[0, 0] = w[2, 2]; w[0, n + 2] = w[2, n]; w[m + 2, 0] = w[m, 2];   w[m + 2, n + 2] = w[n, m];"





Where I made a mistake I got this error in for loop and how to fix it?



Error, invalid input: with expects its 1st argument, pname, to be of type {`module`, package}, but received shareman


N := 5:

c__1 := Matrix([[c1__11, c1__12, 0], [c1__12, c1__22, 0], [0, 0, c1__66]]):

c__2 := Matrix([[c2__11, c2__12, 0], [c2__12, c2__22, 0], [0, 0, c2__66]]):

c__3 := Matrix([[c3__11, c3__12, 0], [c3__12, c3__22, 0], [0, 0, c3__66]]):

c__4 := Matrix([[c4__11, c4__12, 0], [c4__12, c4__22, 0], [0, 0, c4__66]]):

c__5 := Matrix([[c5__11, c5__12, 0], [c5__12, c5__22, 0], [0, 0, c5__66]]):


Q := Array(1 .. 3, 1 .. 3, 1 .. N):

A := Matrix([[0, 0, 0], [0, 0, 0], [0, 0, 0]]):

Z := Matrix([[h__1], [h__2], [h__3], [h__4], [h__5], [h__6]]):

for ii to 3 do for jj to 3 do Q(ii, jj, 1) := c__1(ii, jj); Q(ii, jj, 2) := c__2(ii, jj); Q(ii, jj, 3) := c__3(ii, jj); Q(ii, jj, 4) := c__4(ii, jj); Q(ii, jj, 5) := c__5(ii, jj) end do end do

"for i from 1  to 3 do for j from 1 to 3 do Ar:=0:for k from 1 to N do  Ar:=(Q (i,j,k)*(Z(k+1)-Z(k)))+Ar: end do A(i,j):=Ar: end do end do"

Error, invalid loop statement termination

"for i from 1  to 3 do for j from 1 to 3 do Ar:=0:for k from 1 to N do Ar:=(Q (i,j,k)*(Z(k+1)-Z(k)))+Ar: end do A(i,j):=Ar: end do end do"






how to convert a nested for loop to iterative version with stack

In C++, we use continue statement to continue with the loop. What is maple's equivalent statement of continue as used in C++?


So below is a calculation im trying to create, but it just tells me there is an unexpected IF error, and returns me to the third For line. I have tried it straight and as a procedure but i just cant seem to get it to work. Any ideas or tweaks to make this work would be much appreciated. All of the other variables I've named work in their respective lines of code, which I have left out as it is long as it is!

ComlexAlgorithm:= proc(L)
local N, j, kf, o, DeltaMag, DeltaBond;
global NConfig, Configz1, Col, Row, OldConfig, NewConfig, NewTable;

# Set Delta values to zero.

# Creates loops to loop through the correct changes in values i.e. Add -1, then 1 to first point, move across each point one by one, repeat from the beginning for each configuration then repeat whole process for the amount of rows.
for N from -1 to 1 by 2 do
   for j from 1 to Col do
      for w from 0 to NConfig-1 do   
         for o from 1 to Row do

# Calculate DeltaMag.
if N=-1 then DeltaMag:=DeltaMag+1 else DeltaMag:=DeltaMag-1
end if:

# Calculate all relevant bonds i.e. 3 values for DeltaMag, except at "corner" lattice points where there is only 2 bonds.
if N= Configz1[w](o, j) then DeltaBond:= DeltaBond-1 else DeltaBond:= DeltaBond+1
end if:

if j-1>1 then
   if N <> Configz1[w](o, j+1) then DeltaBond:= DeltaBond+1
      if N = Configz1[w](o, j+1) then DeltaBond:= DeltaBond-1
else DeltaBond:= DeltaBond
end if:
end if:
end if:

if j+1<Col then
   if N <> Configz1[w](o, j+1) then DeltaBond:= DeltaBond+1
      if N = Configz1[w](o, j+1) then DeltaBond:= DeltaBond-1
else DeltaBond:= DeltaBond
end if:
end if:
end if:

# Calculate if, and by what degree, conifguration number changes using 2^(j-1) which is the arithmetric series for binary. Changes only occur when "incoming" spin is different.
if N= -1 then
   if Configz1[w](o, j) <> N then NewConfig[w]:= OldConfig[w-(2^(j-1))] 
else NewConfig[w]:= OldConfig[w]
end if:
end if:

if N= 1 then
   if Configz1[kf](o, j) <> N then NewConfig[w]:= OldConfig[w+(2^(j-1))] 
else NewConfig[kf]:= OldConfig[w]
end if:
end if:

NewTable[kf]:= [NewConfig[w], BondEnergy(w)+DeltaBond, MagEnergy(w)+DeltaMag];

# Set Delta values to zero to finsh.

end do:
end do:
end do:
end do:
end proc:

i want to write the result of a calculation to a file in a way that i can be able to call them later. for example :

n := 40; h := 40;
a := h*i/(2*n);

sys1 := [diff(x(t), t) = 2*t+1, diff(y(t), t) = 1+5*t, x(0) = 1, y(1) = 0];

for i from 0 by .5 to 1 do res := dsolve(sys1, numeric); res(a) end do;

i would like to write just the values of t and y(t) to a file/vector or whatever.

Thx in advance


I would like to thank everyone who takes their time to respond to posts on this page. I have another question.

I have about 11 trillion lists that are of the form A shown below. The lists ofcourse have more elements than A (about 50 elements). What I want is to compute this value I call f, and the moment this value is found to be 1, we stop, and if all the values of f are 0, then we print(A). Here is my code, which has a problem and doesn't give me the result I want. How do I modify this so that if any value of f=1, then we stop, elif no 1 is found, we print just one value for A and not for every 0 produced?

A := [[1, 2], [1, 7], [5, 6], [1, 6], [1, 9], [6, 5], [9, 1], [2, 1], [7, 1], [6, 1], [5, 6]]; n := 9;
for i to n do for j to n do for k to nops(A) do if [i, j] = A[k] then a := Search([i, j], A); b := Search([j, i], A); if a < b then f := `mod`(b-a, 2); if f = 1 then break else print(A) end if end if end if end do end do end do;

Presently what I am doing is to Append all values of f into an Array and check that 1 is not an element of that Array. This is however very inconvenient since my lists are huge, and they are many, and we do not have to cpompute all the values of f once we come across a 1. Other than this, is there a way I can make my program run faster? Any suggestions are welcomed.



I tried to use a for loop to assign the bounds for creating an RTable in a Maple C wrapper (actually it does not matter what I do here). I checked that the for loop syntax is correct C syntax, for example even as simple as for (int i = 0; i < 2; i++){...} but the loop becomes an infinite loop and takes forever to run. Has anyone encountered the same problem as I did

hello everybody, 

Is there some trick to bypass the limiited scope of the semicolon statement operator ?

More specifically, is it possible to force Maple to display (apart from the explicit use of the 'print' command) the results of the commands within two nested loops or within a loop and and a conditional statement ?

From the help page concerning statement operators it seems that it is truly impossible ...

"Note: This rule does not apply to statements enclosed in the body of another statement such as an if statement, loop, procedure, module, use statement, or try statement. In these cases, all enclosed statements must be separated by a semicolon or colon."

While not blocking it is a rather irritating limitation :-)

I'm new to Maple, and I come from using Matlab.  Apparently my Matlab way of thinking isn't working on Maple.  I'm trying  to ride a bit of code that simulates flipping a coin 1000 times.  The code counts one partiuclar result (1=heads) at the end prints that result.


Here's the code:




for i from 1 to 10000 do  

roll := rand(1..2):  


if (roll=1) then count:=count+1 end if  

end do  


 I get errors saying I didn't terminate my loops correctly.  Help, please.

the program is not recognized kthe program is not recognized the k

Assume we have a sreach with 10 for, for example


for i[1] from 1 by 1 to 5 do

    for i[2] from 1 by 1 to 5 do 


        if .... then answer=1: print(i[1],...,i[10]); "quitting the search"


     end do

end do

If I write break at qutting part, it will only exit from one for, one idea is putting if answer=1 break before end do of the rest for, that is why I used the local extra variable "answer" but is this the best idea? Any better idea which contains checking less if is apprecied.

Hi everyone,

Can anybody help me to write a programme in maple? I want to do a loop that iterate from an integer from 0 to N where I want to write a prodedure, say, MEC(N). Then I want to organise the output into a list of three lists  [[min points],[escape],[capture]], which, if correct, should include all integers from 0 to N exactly once.

> MEC := proc (N)
local IsEmpty, Escape, escape, capture, minpoints, Capture, z, MinPts, ic;
IsEmpty := array(0 .. 2*N);
Escape := array(0 .. 2*N);
Capture := array(0 .. 2*N);
MinPts := array(0 .. N);
IsEmpty := true;
Escape := true;
Capture := true;
MinPts := true;

for ic from 0 to N do
if IsEmpty then
z := ic;
MinPts[ic] := true;
z := ic;
while z <= 2*N and F(z) <= 2*N do
z := F(z);
IsEmpty[z] := true;
Escape[z] := true
end do;

z := ic;
while z <= 2*N and Finv(z) <= 2*N do
z := Finv(z);
IsEmpty[z] := true;
Capture[z] := true end do fi;
end do;
return [MinPts(z), Escape(z), Capture(z)]
end proc;

There are two operations involved in the program which is the function F and F inverse called Finv. 
i need to produce the output which contain the list of integers exactly once.

I could not figure out which logical expression that I do wrong.

Thank you for your help!

1 2 Page 1 of 2