建模笔记之maple学习

建模笔记之 maple 学习

本笔记主要介绍基本的方程组求解,对于语法、画图功能不加以阐述。在数学建模中,大部分的编程工作还是由matlab或python来完成,而maple可以快速解决一些需要手算的操作。比如建模国赛18年的A题隔热服的问题,掌握maple就会简单的多。

若想更深入的学习,可以看看这个博客。http://blog.sina.com.cn/s/articlelist_1525587631_5_1.html

在学习的过程中,建议多使用maple自带的帮助,里面也提供了一些简单易懂的例子

  1. % 代指上一个公式

  2. ifactor

    分解的意思,颇有最小公倍数的意味。

    ifactor(60);

  3. expand

    展开

    expand((x + 1)*(x + 2));

  4. evalf

    将结果转化为浮点数,也有求解的意思,求解后直接化为浮点数

    2^30*sqrt(3); evalf(%);

  5. sum

    求和

    sum((1 + i)/(i^4 + 1), i = 1 … 100); evalf(%);

  6. product

    连乘

    product( ((i^2+3*i-11)/(i+3)), i=0…10 );evalf(%);

    发现个规律,sum和product也可以写成Sum和Product,即第一个英文字母大写,若写成Sum时,Maple出来的结果带着∑,而不是数值,例:

    Sum((1 + i)/(i^4 + 1), i = 1 … 100); value(%);evalf(%)

    Sum((1 + i)/(i^4 + 1), i = 1 … 100); evalf(%)

    sum((1 + i)/(i^4 + 1), i = 1 … 100); evalf(%)

    product同理

  7. value

    化简、求值,可以求解sum、product、limit等

    Sum( 1/k^2, k=1…infinity ); value(%);

  8. factor

    合并

    expr := (x + y)^15; expand(expr);factor(%);

  9. simplify

    化简

  10. normal

    化简

  11. eval

    相当于求解,返回表达式计算结果

    expr1 := (41x^2 + x + 1)^2(2*x - 1);
    eval(expr1, x = 1);

    用来检验计算方程在特殊点x的值

    eqn:=x3-1/2*a*x2+13/3*x^2=13/6*a*x+10/3*x-5/3*a;
    eval(eqn , x=1/2*a );

  12. :=

    定义变量

    expr1 := (41*x2+x+1)2*(2*x-1);

  13. 定义函数

    f := x -> x^2 + 1/2;

  14. unapply

    使用unapply命令将表达式转化为函数

    g := unapply(x^2 + 1/2, x); g(2);

  15. 解方程(组)

    eqn1 := a+2*b+3*c+4*d+5*e=41;

    eqn2 := 5*a+5*b+4*c+3*d+2*e=20;

    eqn3 := 3*b+4*c-8*d+2*e=125;

    eqn4 := a+b+c+d+e=9;

    solve( {eqn1, eqn2, eqn3, eqn4}, {a, b, c, d} ); # 用变量e来表示其他未知数a,b,c,d,得到一组解

    solve((ab+bc=c),{c}); #用a、b来表示c

  16. 解不等式

    ineq := x+y+4/(x+y) < 10: # 此处的:类似于matlab的循环运算里的冒号,不过也可以改成分号

    solve( ineq, {x} );

    {solve({x^2 = 9, x + y < 10}, {x, y})};

  17. 微积分

    f := x -> xsin(ax) + b*x^2; #定义函数

    diff(f(x), x); #求导

    int(f(x), x); #不定积分

    int(f(x), x = 1 … 2); #定积分

  18. 三重积分

    Int(Int(Int(1, x = 0 … 1), y = 0 … 2), z = 0 … 3);

    value(%);

  19. 求极限

    expr := (2x + 3)/(7x + 5); #定义表达式

    limit(expr, x = infinity); #求函数式在正无穷处的极限

  20. 展开为级数和转化为多项式

    expr := sin(4*x)*cos(x): #定义表达式
    approx1 := series( expr, x=0 ); #展开为级数
    poly1 := convert( approx1, polynom ); #转化为多项式

  21. diff

    求解微分方程

    格式为 dsolve({equn,conds},y(x)); 其中equn为方程 conds为条件

    ode := diff(x(t), t) = 2*x(t); #maple中因变量必须连同它的自变量一起出现,即x(t)不能简写成x

    ​ #ode表示微分方程x‘(t)=2*x(t)

    dsolve(ode, x(t)); #给出通解

    dsolve({ode, x(0) = 3}, x(t)); #给出特解

    对于一阶常微分方程 可用dsolve直接求得解析解

    ODE:=x*diff(y(x),x)=y(x)*ln(x*y(x))-y(x);

    dsolve(ODE, y(x));

    对于上面例题,必须用y(x)而不能用y,这一点有区别于我们平时的书写方法,为了使其与我们的习惯一致, 可用alias将函数用别称表示:

    alias(y = y(x));

    ODE := x*diff(y, x) = y*ln(x*y) - y;

    dsolve(ODE, y);

  22. 求解微分方程组

    格式为 dsolve({sysODE, ICs}, {funcs}); sysODE为方程组,ICs为条件组

    sys := {diff(x(t), t) = x(t) + y(t), diff(y(t), t) = y(t) - x(t)}; #定义微分方程组

    dsolve(sys, {x(t), y(t)}); #求解

    ode1 := 2*diff(x(t), t $ 2) + 2*x(t) + y(t) = 2*t; #定义第一个二阶方程

    ode2 := diff(y(t), t $ 2) + 2*x(t) + y(t) = t^2; #定义第二个二阶方程

    dsolve({ode1, ode2, x(0) = 0, y(0) = 0, D(x)(0) = 1, D(y)(0) = 0}, {x(t), y(t)});

    #求解,分别给出x、y的一阶导数和原函数的特值

  23. 主次迭代法

    已知y’=1+y^3,y(0)=1,求原函数

    普通方法代码如下:

    ode := diff(y(x), x) = 1 + y(x)^3;

    dsolve({ode, y(0) = 1}, y(x));

    输出结果

    y(x) = sqrt(3)tan(RootOf(sqrt(3)ln(4/(3(tan(_Z)^2 + 1))) + 2sqrt(3)*ln(3/2 + sqrt(3)tan(_Z)/2) - 2sqrt(3)ln(2) - Pi - 6sqrt(3)x + 6_Z))/2 + 1/2

    发现这根本不是常见的结果,在这里,我给大家推荐另外一种方法,主次迭代法。

    该问题的等价积分方程为:

    ode1 := y(x) = 1 + int(1 + y(x)^3, x = 0 … x);

    并利用maple去进行重复的迭代:

    y0 := 1;
    y1 := 1 + int(x^2 + y0^2, x = 0 … x);
    y2 := 1 + int(x^2 + y1^2, x = 0 … x);
    y3 := 1 + int(x^2 + y2^2, x = 0 … x);
    y4 := 1 + int(x^2 + y3^2, x = 0 … x);

公众号:湛岚宁的小屋

猜你喜欢

转载自blog.csdn.net/weixin_44186580/article/details/104804814