Carl Love

Carl Love

28150 Reputation

25 Badges

13 years, 351 days
Himself
Wayland, Massachusetts, United States
My name was formerly Carl Devore.

MaplePrimes Activity


These are replies submitted by Carl Love

@maplefan123 The latest error that you report---in LinearAlgebra:-Norm---indicates that you're using 2D Input, which is misinterpreting my string catenation operation ...||n||... as a vector norm operation. My code is intended to be run in 1D input (aka Maple Input) only. The code should appear in your worksheet in a red-brown bold monospaced font, exactly as shown in my Reply above. Download this worksheet and execute it directly:

Download AllGraphs.mw

Perhaps the memory issue is also due to the 2D Input, although in that case I don't recognize the exact mechanism of code misinterpretation that would cause a memory allocation error. Like you, I'm also using Windows 10. I've run the code above in Maple 2018, 2019, and 2021 with identical results, and the memory allocation is very small. If you continue to have a memory problem, tell me what the Memory column of Windows Task Manager tells you. The parent process of your Maple session is "Java(TM) Platform SE binary" from the Processes tab. If you don't know how to use Windows Task Manager, let me know, and I'll explain it.

@maplefan123 My code above does not use any significant amount of memory. On the other hand, your original code does use a lot of memory. Yes, things running in the background are using some memory. Keep an eye on your memory usage in Windows Task Manager (or whatever your system's equivalent is).

When you edit a Reply, MaplePrimes does not update the Reply's timestamp. (This is a serious shortcoming of MaplePrimes.) So, you should report errors in new Replies or there's a good chance that no-one will see them. You're just lucky that I saw your edit about the memory issue.

Here are my runs for n from 6 to 9. The memory allocation reported at the bottom of my screen never went above 25Mb. (The number reported as "memory used" by CodeTools:-Usage is irrelevant to this; it does not represent the amount of memory allocated. "Memory used" is a cumulative rather than instantaneous measurement, akin to the distinction between a car's odometer and its speedometer.)

restart:
currentdir("C:/Users/carlj/desktop"): #Change this line!!
AllGraphs:= proc(n::posint)
local
    L:= GraphTheory:-NonIsomorphicGraphs(
        n, output= iterator, outputform= adjacency, 
        selectform= adjacency,
        select= (A-> evalb(ArrayTools:-AnyNonZeros(A[-1]) = 1))
    ),
    Text:= 
        "\ntext1 text2 text3\ntext2 text2 text3\ntext3 text3 text3\n"
        "text4 text4 text4\ntext5 text5 text5\n\n",
    fp:= FileTools:-Text:-Open("Graphs"||n||".txt", create, overwrite),
    k, A
;
    fprintf(
        fp,
        "This is the top of the file.\n\n"
    );
    for k while (A:= L()) <> FAIL do 
        fprintf(fp, "G=%a"||Text, {lhs}~(op(2,A))) 
    od;
    FileTools:-Text:-Close(fp);
    k
end proc
: 
for n from 6 to 9 do
    nprintf("Number of %d graphs", n) = CodeTools:-Usage(AllGraphs(n))
od;
memory used=3.48MiB, alloc change=32.00MiB, 
cpu time=62.00ms, real time=55.00ms, gc time=15.62ms

                    Number of 6 graphs = 123

memory used=14.18MiB, alloc change=0 bytes, 
cpu time=297.00ms, real time=286.00ms, gc time=0ns

                    Number of 7 graphs = 889

memory used=200.24MiB, alloc change=5.00MiB, 
cpu time=3.92s, real time=3.94s, gc time=578.12ms

                   Number of 8 graphs = 11303

memory used=4.71GiB, alloc change=-4.00MiB, 
cpu time=103.84s, real time=106.84s, gc time=15.20s

                  Number of 9 graphs = 262323

@Carl Love In case it's not obvious, my above-recommended value is intended for the dsolve that you did after setting the values of d1, d2, d3, d4, d5, and L. Getting a useful result from your first dsolve requires both assumptions (as used by Preben) and value (used without mention by Preben).

@maplefan123 To put some lines of text at the top of the file, use an fprintf command such as below immediately before the while:

fprintf(
    fp,
    "This is\n5 lines\nof text\nfor the top\nof the file.\n\n"
);

@Preben Alsholm The expressions can be greatly simplified with two further assumptions: 0 < d1, d5 < L.

@Carl Love I tested Answer 1, the value method, and it works. I didn't test Answer 2 because Answer 1 is much easier to implement anyway: After the dsolve command, just do value(%).

@vv Your formula treats (6, -3) as the focus of the parabola, not as its vertex.

@vv In my opinion, using HFloat to wrap the target being searched for is by far the best of the given Answers, but the OP seems to be ignoring your Answer. The other Answers--converting to rationals or using software floats--incur a substantial performance penalty.

@Ali Guzel In brief, you should do this:

numboccur(x2[1], HFloat(0.))

This is because Sample returns an array of hardware floats. Hardware floats are not exact matches to their software-float counterparts. That's what you're missing.

@Preben Alsholm You are passing arguments to numboccur in the wrong order; the first argument should be the container, and the second argument the item being counted.

I'd like to elaborate on what Mac Dude said is his P.S. The fact that a help page says that a command is intended for arguments of a certain type can't be used to infer that it won't also work for some arguments not of that type. I think that your type command returning false can be taken as definitive proof that the object is not type series.

The special parameter _rest can be used to "pass along" optional arguments without a procedure knowing what those arguments are or even whether they're present at all. I find this very useful for any procedure whose output is a plot.

waterfall:= proc(
    data::list(numeric),
    {colors::And(list({name, function, string}), 2 &under nops):= 
        ["green", "red"]
    }
)
uses P= plots, PT= plottools;
local d:= [0, data[]], c:= colors[(sign~(d[..-2] -~ d[2..]) +~ 3)/~2];
    d:= `[]`~([$0..nops(data)], d);
    P:-display(PT:-rectangle~(d[..-2], d[2..], ':-color'=~ c), _rest)
end proc
:
data := [6, 4, 4, 4, 7, 9, 12, 16, 25, 100, 105, 95, 90, 55, 45, 30]:
waterfall(data, colors= [purple, yellow], axes= boxed);

First, let's make sure that I've correctly guessed the package structure. You have a package that you didn't give a name to. I'll call it P. Are A and B both exports of P? Is B a module with a ModuleApply procedure?

Can you write C in such a way that it doesn't use any of P's module locals?

Is there a close relationship between a graph's crossing number and the least complicated surface (such as a torus) on which the graph can be embedded?

If you'd like, I could mark your account as a "spammer", which would delete (but not totally purge) everything related to your account (including this thread) and block the account's ability to make any future posts (thus, it'd be nearly impossible for a hacker to hijack the account and post in your name). I am by no means suggesting that you are a spammer! I only mention the possibility because it's something that I have the power to do. It'd only take about 20 seconds on my part, and you wouldn't need to do anything. So, if you'd like for me to do that, let me know.

@Christian Wolinski 

Your T is reminiscent to me of constructing a *sub*basis (rather than a basis) for a topology S.

[The next few definitions may already be familiar to you. If so, I include them for the benefit of other readers.] Let X be a set, and let S be a subset of the powerset of X containing at least the empty set and X itself. (For convenience, we define an intersection with zero operands to be X, which conforms with the usual rule that an associative operator applied to zero operands equals the identity for that operator.)

1. Definition of topology: Suppose that S contains (as elements) 1.1) all pairwise intersections of its elements and 1.2) all unions (not necessarily pairwise) of its subsets. Then S is called a topology on X and the elements of S are called the open sets. Note that 1.1 implies that S contains all intersections of its finite subsets.

2. Definition of basis (base is also commonly used) of a topology: Let S be a topology on X. Let B be a subset of S such every element of S (i.e., every open set of X) is a union of a subset of B. Then B is called a basis for S.

3. Definition of subbasis (or subbase) of a topology: Let S be a topology on X and let C be a subset of S such that every element of S is a union (not necessarily of a finite number of opetands) of intersections of finite subsets of C. Then C is called a subbasis for S.

Quick examples (that should be familiar to almost all readers): Let R be the real numbers. Let's declare a subset A of R to be open if for all x in A there is a d > 0 such that the open interval (x-d, x+d) is a subset of A. Then the set of all such A is a topology on R (indeed it's the standard topology). The set of all open intervals is a basis for that topology. The set of all open intervals that are unbounded at one end is a subbasis for that topology. (These things require some proof, which is essy, the subbasis part being trivial once the topology and basis are verified).

A place where this analogy between topology and your S and T breaks down is that the elements of a topological subbasis are not necessarily pairwise disjoint. However, it may be worthwhile to restrict your attention to cases where the union of S (in other words, X) is finite. 

First 115 116 117 118 119 120 121 Last Page 117 of 711