janhardo

430 Reputation

8 Badges

10 years, 207 days

MaplePrimes Activity


These are questions asked by janhardo

Found this old procedure code and revived it
Trying to include an Exploreplot as well

 

restart;

Odegenerator := proc(V, x, y, df, const_values)
    local input_args, xi, F, result, a0, a1, a2, b0, b1, sol, Fsol, rows, numrows, eq, count, odeplot_cmd, ode_type, row_number, values;
    with(plots);
    with(DEtools);
    with(PDEtools);

    if nargs = 1 and V = "help" then
        printf("Use this procedure as follows:\n");
        printf("Define an ODE template:\n");
        printf("Odegenerator(V, x, y, df, const_values)\n");
        printf("V: A set of values for iteration over constants (if df > 0)\n");
        printf("x: The independent variable\n");
        printf("y: The function\n");
        printf("df: The row number in the DataFrame or 0 for manual input\n");
        printf("const_values: A list of values for the constants (used if df = 0)\n");
        return;
    end if;

    if nargs < 4 or nargs > 5 then
        error "Incorrect number of arguments. Expected: V, x, y, df, [const_values (optional)]";
    end if;

    # Determine the ODE type using odeadvisor for the global eq_template
    ode_type := odeadvisor(eq_template);

    # Display the ODE and its type
    print(eq_template, ode_type);

    rows := [];
    count := 0;

    if df = 0 then
        # If df = 0, use const_values for substitution
        if nargs < 5 or not type(const_values, list) then
            error "When df = 0, a list of constant values must be provided as the fifth argument.";
        end if;

        # Assign constant values
        if nops(const_values) <> 5 then
            error "The list of constant values must contain exactly 5 elements.";
        end if;

        # Find the corresponding row number by unique identification
        count := 1;
        for a0 in V do
            for a1 in V do
                for a2 in V do
                    for b0 in V do
                        for b1 in V do
                            if [a0, a1, a2, b0, b1] = const_values then
                                row_number := sprintf("%d", count);  # Convert to string
                            end if;
                            count := count + 1;
                        end do;
                    end do;
                end do;
            end do;
        end do;

        if not assigned(row_number) then
            row_number := "Unique (outside iterative rows)";  # Mark as unique
        end if;

        # Substitute the given values
        eq := subs({'a__0' = const_values[1], 'a__1' = const_values[2], 'a__2' = const_values[3], 'b__0' = const_values[4], 'b__1' = const_values[5]}, eq_template);

        # Solve the equation
        sol := dsolve(eq, y(x));
        if type(sol, `=`) then
            Fsol := rhs(sol);
        else
            Fsol := "No explicit solution";
        end if;

        # Display the solution and its row number
        odeplot_cmd := DEplot(eq, y(x), x = 0 .. 2, y = -10 .. 10, [[y(0) = 1]]);
        print(plots:-display(odeplot_cmd, size = [550, 550]));

        printf("The found function is:\n");
        print(Fsol);
        printf("The corresponding row number is: %s\n", row_number);

        return Fsol;

    else
        # Iterative approach for DataFrame generation
        for a0 in V do
            for a1 in V do
                for a2 in V do
                    for b0 in V do
                        for b1 in V do
                            xi := x;
                            F := y;

                            # Substitute constant values into the ODE
                            eq := subs({'a__0' = a0, 'a__1' = a1, 'a__2' = a2, 'b__0' = b0, 'b__1' = b1}, eq_template);

                            sol := dsolve(eq, F(xi));
                            if type(sol, `=`) then
                                Fsol := rhs(sol);
                            else
                                Fsol := "No explicit solution";
                            end if;

                            rows := [op(rows), [a0, a1, a2, b0, b1, Fsol]];
                        end do;
                    end do;
                end do;
            end do;
        end do;

        numrows := nops(rows);
        result := DataFrame(Matrix(numrows, 6, rows), columns = ['a__0', 'a__1', 'a__2', 'b__0', 'b__1', y(x)]);

        interface(rtablesize = numrows + 10);

        if df > 0 and df <= numrows then
            a0 := result[df, 'a__0'];
            a1 := result[df, 'a__1'];
            a2 := result[df, 'a__2'];
            b0 := result[df, 'b__0'];
            b1 := result[df, 'b__1'];

            eq := subs({'a__0' = a0, 'a__1' = a1, 'a__2' = a2, 'b__0' = b0, 'b__1' = b1}, eq_template);

            # Display the additional parameters
            print(eq, ode_type, [df], [a0, a1, a2, b0, b1]);

            # Retrieve the solution
            Fsol := result[df, y(x)];

            # Display the solution in DEplot
            odeplot_cmd := DEplot(eq, y(x), x = 0 .. 2, y = -10 .. 10, [[y(0) = 1]]);
            print(plots:-display(odeplot_cmd, size = [550, 550]));

            printf("The found function for row number %d is:\n", df);
            print(Fsol);

        else
            printf("The specified row (%d) is out of bounds for the DataFrame.\n", df);
        end if;

        return result;
    end if;

end proc:

# Test cases
V := {0, 1};
eq_template := diff(y(t), t) = 'a__0'*sin(t) + 'a__1'*y(t) + 'a__2'*y(t)^2 + 'b__0'*exp(-t);

# Iterative test
result := Odegenerator(V, t, y, 25);

# Manual input test
result_manual := Odegenerator(V, t, y, 0, [1, 1, 0, 0, 0]); #0 after y is rownumber = 0

V := {0, 1}

 

eq_template := diff(y(t), t) = a__0*sin(t)+a__1*y(t)+a__2*y(t)^2+b__0*exp(-t)

 

diff(y(t), t) = a__0*sin(t)+a__1*y(t)+a__2*y(t)^2+b__0*exp(-t), [_Riccati]

 

diff(y(t), t) = sin(t)+y(t), [_Riccati], [25], [1, 1, 0, 0, 0]

 

 

The found function for row number 25 is:

 

-(1/2)*cos(t)-(1/2)*sin(t)+c__1*exp(t)

 

module DataFrame () description "two-dimensional rich data container"; local columns, rows, data, binder; option object(BaseDataObject); end module

 

diff(y(t), t) = a__0*sin(t)+a__1*y(t)+a__2*y(t)^2+b__0*exp(-t), [_Riccati]

 

 

The found function is:

 

-(1/2)*cos(t)-(1/2)*sin(t)+c__1*exp(t)

 

The corresponding row number is: 25

 

-(1/2)*cos(t)-(1/2)*sin(t)+c__1*exp(t)

(1)

 


 

Download ODEGENERATORFUNCTIE_opgepakt-uitgebreid_naar_Mprimes_14-1-2025.mw

Can i get this ode in a "standardform"  ?

verg:= (-delta*eta^2 + alpha*eta)*diff(diff(U(xi), xi), xi) - U(xi)*(2*eta*gamma*theta*(delta*eta - alpha)*U(xi)^2 + eta^2*delta*k^2 + (-alpha*k^2 - 2*delta*k)*eta + 2*k*alpha + delta) = 0;

Writng the Pde wave function solution in a textbook form ?
golfvergelijking_oplossing_gebruiken_om_integraaluisom_te_halen_voorbeeld.mw

I'm a little busy with the Rule feature in Maple 
Just started with the limits and can't get 1 limit rule working in my FSimp procedure yet
As a limit example I saw this in Maple help 

with(Student:-Calculus1);
infolevel[Student[Calculus1]] := 1;

Rule[lhopital, ln(x)](Limit(x*ln(x), x = 0, right));
Creating problem #2

                  lim   (x ln(x)) =   lim   (-x)
                x -> 0+             x -> 0+     

A meaningless example of how one limit of a function is equal to another limit of a function, when I think there is no connection between the two functions. ( I don't see it ) 
You might as well calculate the limit value right away.

It gets more interesting when you analyze the function/expression : x*ln(x) and start rewriting it, to a [0/0] or [infinity/infinity] form in this case and from this it shows the need to start using lhopital rule.

The Rule feature has a Hint capability and gives as a hint, lhopital that this rule is applied 
Of course, you also have a series of standard limits, beyond the lhopital limits
The Rule feature for the limit is not yet step by step, because the need to start using a lhopital limit rule has not yet been demonstrated by the user

Can't figure out what code makes this simplification.
If this simplification works, it will be a part of a larger simplication procedure ( if it not conflicts hopefully) 
vereenvouding_hoe_-vraag_MPF.mw

1 2 3 4 5 6 7 Last Page 1 of 21