建模笔记之maple学习
建模筆記之 maple 學習
本筆記主要介紹基本的方程組求解,對于語法、畫圖功能不加以闡述。在數學建模中,大部分的編程工作還是由matlab或python來完成,而maple可以快速解決一些需要手算的操作。比如建模國賽18年的A題隔熱服的問題,掌握maple就會簡單的多。
若想更深入的學習,可以看看這個博客。http://blog.sina.com.cn/s/articlelist_1525587631_5_1.html
在學習的過程中,建議多使用maple自帶的幫助,里面也提供了一些簡單易懂的例子
% 代指上一個公式
ifactor
分解的意思,頗有最小公倍數的意味。
ifactor(60);
expand
展開
expand((x + 1)*(x + 2));
evalf
將結果轉化為浮點數,也有求解的意思,求解后直接化為浮點數
2^30*sqrt(3); evalf(%);
sum
求和
sum((1 + i)/(i^4 + 1), i = 1 … 100); evalf(%);
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同理
value
化簡、求值,可以求解sum、product、limit等
Sum( 1/k^2, k=1…infinity ); value(%);
factor
合并
expr := (x + y)^15; expand(expr);factor(%);
simplify
化簡
normal
化簡
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 );
:=
定義變量
expr1 := (41*x2+x+1)2*(2*x-1);
定義函數
f := x -> x^2 + 1/2;
unapply
使用unapply命令將表達式轉化為函數
g := unapply(x^2 + 1/2, x); g(2);
解方程(組)
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
解不等式
ineq := x+y+4/(x+y) < 10: # 此處的:類似于matlab的循環運算里的冒號,不過也可以改成分號
solve( ineq, {x} );
{solve({x^2 = 9, x + y < 10}, {x, y})};
微積分
f := x -> xsin(ax) + b*x^2; #定義函數
diff(f(x), x); #求導
int(f(x), x); #不定積分
int(f(x), x = 1 … 2); #定積分
三重積分
Int(Int(Int(1, x = 0 … 1), y = 0 … 2), z = 0 … 3);
value(%);
求極限
expr := (2x + 3)/(7x + 5); #定義表達式
limit(expr, x = infinity); #求函數式在正無窮處的極限
展開為級數和轉化為多項式
expr := sin(4*x)*cos(x): #定義表達式
approx1 := series( expr, x=0 ); #展開為級數
poly1 := convert( approx1, polynom ); #轉化為多項式
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);
求解微分方程組
格式為 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的一階導數和原函數的特值
主次迭代法
已知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);
公眾號:湛嵐寧的小屋
總結
以上是生活随笔為你收集整理的建模笔记之maple学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DEDECMS安装使用教程
- 下一篇: Android【ContentProvi