5.1 mathematica程序设计——在高等数学中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
5 mathematica 程序设计(Ⅰ)
—— 在高等数学中的应用
(王积社)
研究问题:
用mathematic 设计程序.计算数学分析、高等代数的问题。
5.1 问题1:求二元多项式函数的极值。
5.1.1 理论基础:
在数学分析中有以下结论:
⑴ 极值与驻点
极值:设函数(,)z f x y =在点00(,)x y 的某个邻域内有定义,如果对在此邻域内除点00(,)x y 外的任意点(,)x y ,均有00(,)(,)f x y f x y <(或者00(,)(,)f x y f x y >),则称点00(,)x y 为函数(,)z f x y =的极大值点(或极小值点). 00(,)f x y 称为极大值(或极小值),极大值点和极小值点统称为极值点,极大值和极小值统称为极值。
驻点: 使(,)0,(,)0x y f x y f x y ==同时成立的实数点(,)x y 称为函数(,)z f x y =的驻点.
⑵ 极值存在的必要条件
设函数(,)z f x y =在点00(,)x y 的某个邻域内有定义,且存在一阶偏导数,如果00(,)x y 是极值点,则必有0000(,)0, (,)0x y f x y f x y ==.
⑶ 极值存在的充分条件
2
设函数(,)z f x y =在点00(,)x y 的某个邻域内具有二阶连续偏导数,且00(,)x y 是驻点. 设00(,)xx A f x y =,00(,)xy B f x y =,00(,)yy C f x y =,则
① 当20B AC -<时,点00(,)x y 是极值点,且当0A <时,点00(,)x y 是极大值点;当0A >时,点00(,)x y 是极小值点;
② 当20B AC ->时,点00(,)x y 不是极值点;
③ 当20B AC -=时,点00(,)x y 有可能是极值点也可能不是极值点. 5.1.1 算法描述:
根据上述结论,可以得到以下算法:
o 1 输入(,)z f x y =;
o 2 求(,)(,)x a x y f x y ='、(,)(,)y
b x y f x y =' 与
(,)(,)xx A x y f x y =、(,)(,)xy B x y f x y =、(,)(,)yy C x y f x y =;
o 3 求2(,)(,)(,)(,)P x y B x y A x y C x y =-
; o
4
解方程组:(,)0(,)0x
y f x y f x y ⎧⎪⎨⎪⎩
='=',取其实数解得到(,)z f x y =的驻点集
S ;
o 5 依次取每个00(,)x y S ∈,计算00(,)P x y ,依照极值存在的充分条来判断
00(,)x y 是否为极值点:
若00(,)0P x y >,则00(,)x y 不是极值点;
若00(,)0P x y <且00(,)0A x y <,则00(,)f x y 是极大值; 若00(,)0P x y <且00(,)0A x y >,则00(,)f x y 是极小值; 若00(,)0P x y =,则不能确定00(,)x y 是否为极值点; 5.1.3 相关的mathematic 命令
① D[f [x,y],x]
功能:求函数f(x,y) 对x 的偏导数。
②D[f[x,y], {x, n}]
功能: 求多元函数f(x,y)对x的n阶偏导数
③D[f [x,y],x,y]
功能:求多元函数f(x,y) 对x、y的混合偏导数。
④Solve[{eqn1, eqn2, …, eqnk}, {x1, x2,…, xk}]
功能:求多项式方程组{eqn1, eqn2, …, eqnk}的所有根, 当其中每个多项式方程的次数n<=4时, 给出所有根的准确形式, 否则,不一定能求出所有的根, 此时,命令输出形式为{ToRules[Roots[{eqn1, eqn2, …, eqnk}, {x1, x2,…, xk} ]]} 。
⑤ NSolve[{eqn1, eqn2, …, eqnk}, {x1, x2,…, xk}]
功能:求多项式方程组{eqn1, eqn2, …, eqnk}所有根的近似形式。
5.1.4 mathematic程序
Clear[f,g,x,y,p,a,b,p1,p2,s,s1,s2,A,B,C1];
f[x_,y_]:=x^3+y^3-3*x*y;
Print["函数f(x,y)=",f[x,y],"的可能极值点有 :"];
a=D[f[x,y],x];
b=D[f[x,y],y];
A[x_,y_]=D[f[x,y],{x,2}];
B[x_,y_]=D[f[x,y],x,y];
C1[x_,y_]=D[f[x,y],{y,2}];
p[x_,y_]=B[x,y]^2-A[x,y]*C1[x,y];
s=Solve[{a 0,b 0},{x,y}];
s2={};
k=Length[s];
For[
i=1,i≤k,i++,
x=x/.s[[i]];
y=y/.s[[i]];
If[Im[x]≠0&&Im[x]≠0,Continue[]];
s1={x,y};
3
]
k=Length[s2];
Print["经检验 :
For[
i=1,i
p1=N[p[x,y]];
Which[p1>0,
Print[" (",x,",",y,")不是极值点 ."],
p1<0 && A[x,y] < 0,
Print[" f(",x,",",y,")=",N[f[x,y]],"是
极大值 ."],
p1<0 && A[x,y] > 0,
Print[" f(",x,",",y,")=",N[f[x,y]],"是
极小值 ."],
p1==0,
Print[" (",x,",",y,")点不能确定 ."];
]
]
5.1.5 计算结果
改变f(x,y)的值,就可以求不同的二元多项式极值,但次数高于4时可能发
4