慕课matlab学习 第七章-039

第七节-Matlab符号计算

02-符号运算计算函数微积分





% 第七节-Matlab符号计算
% 02-符号运算计算函数微积分


% 符号函数的极限.
% 符号函数的导数
% 符号函数的积分

% 符号函数的极限
% 求符号函数极限的命令为limit,其调用格式为
% limit(f,x,a)
% f:所求极限的函数 x为变量  a为常数
% 即求函数【f】关于变量x在【a点的极限】。若x省略,则采用系统默认的自变量。a的默认值为0.

% limit函数的另- -种功能是求 单边极限,其调用格式为:
% limit(f,x,a,'right') %右极限
% limit(f,x,a,left')     %左极限

%eg 求 lim(x->a) (x)^1/m -(a)^1/m /(x-a)  (2)lim(x->oo)(1+1/n)^n
syms a m x n
f=(x^(1/m)-a^(1/m))/(x-a); 
limit(f,x,a) % 求x自变量趋向于a的时候,f(x)的值

g=(1+1/n)^n;
limit(g,n,inf) %n->oo 的时候 g(n)=e

% 符号函数的导数
% MATLAB中的求导函数为:
% dif(f.x,n)
% 即求函数f关于变量x的n阶导数。参数x的用法同求极限函数
% limit,可以缺省,默认值与limit相同,n的默认值是1,求n阶导。
% x 表示自己定义的主变量,在有多个自变量时,需要确定一个自变量,这样就相当于
% 求得是关于自变量x的偏导数



% eg 求 y=(a+e^x)^1/2,求y'
syms x y ;
f=sqrt(1+exp(x))
diff(f) % 没有 指定的情况下 ,系统会默认一个自变量,还有一个求解导数n=1,默认一阶导数 

% eg z=x*e^y/y^2  求 zx' zy'

z=x*exp(y)/y^2
diff(z,x) %求解函数 z,关于x的一阶偏导数
diff(z,y) %求解函数 z,关于y的一阶偏导数

% 符号函数的积分
% (1)不定积分
% 在MATLAB中,求不定积分的函数是int,其常用的调用格
% 式为:
% intlf,x)
% 表示:求函数f对【变量x】的不定积分。 (注:是变量X,其他变量(如;y,z)当作常量处理)


% eg:求下列不定积分
% fx=(3-x^2)^3
syms x t
f=(3-x^2)^3
int(f) %表示对函数f进行积分,系统自动默认给定自变量x,(注:f函数中只有一个变量x)

% g(x,t)=5*x*t/(1+x^2)d(t) 对自变量 t 求积分
g=5*x*t/(1+x^2)
int(g,t) %对自变量 t 求积分,这里要指定自变量(t),因为g函数有两个自变量【x,t】


%(2)【定积分】
%   在MATLAB中,定积分的计算也使用int命令,但调用格式有区别:
%   intlf,x,a,b)
%   其中,a、b分别表示定积分的下限和上限。【注:a,b可以是具体的值,也可以是一个数值符号】
%   当函数关于变量x在闭区间[a,b]可积时,函数返回一个定积分结果。
%   当a、b中有一个是【inf:无穷】时, 函数返回一个广义积分。
%   当a、b中有一个符号表达式时,函数返回一个符号函数。

%  求定积分
% |1-x|d(x) x=[12]
syms x t
int(abs(1-x),1,2)  %求函数  x=[12]的积分
%  1/1+x^2d(x)  x=[-oo,+oo]
int(1/(1+x^2),-inf,+inf) %求函数  x=[-oo,+oo]的积分
%  4x/t d(x)       x=[2,sin x]
int(4*x/t,t,2,sin(x))  %指定对自变量t求积分,t=[2,sin(x)]
%计算出来的是一个自变量的结果函数


% 实际应用
% 河道水流量的估算问题
% 根据实际测量,得到河流某处宽600m,其横截面不同位置某一
% 时刻的水深如下表所示:
xi=0:50:600 ;
yi=[4.4,    4.5,    4.6,    4.8,    4.9,    5.1 ...
    ,5.4    ,5.2    ,5.5    ,5.2    ,4.9    ,4.8    ,4.7] ;
% ①若此刻水流的流速为0.6m/s,试估计该河流此刻的流量。
% ②已知x方向[50,60]区间为坡式护岸的下部护脚部分,根据相关
% 堤防设计规范,抛石护岸护脚坡度应缓于1:1.5 ( tan(x)正切值) ,% 估计水流冲刷是否已破坏该区域的护脚。


% 分析:
% (1)先拟合出河床曲线,然后进行定积分,计算出河流横截面,即
% 可估计流量。
xi
yi
p=polyfit(xi,yi,3)
plot(xi,yi,'o',xi,polyval(p,xi),'r') %曲线拟合得到曲线图形(即河床轮廓)
syms y x 
y=poly2sym(p,x)     %拟合曲线的多项式转化为符号表达式
S=int(y,x,0,600)    %计算横截面积
v=S*0.6             %计算水流量
eval(v)



% (2)根据河床曲线,计算其导函数,并判断相应范围内导函数的取
% 值是否大于1:1.5。
yn=-yi;  % 实际河床轮廓形状,水平面是平的
figure(2)
p=polyfit(xi,yn,3)
plot(xi,yn,'o',xi,polyval(p,xi)) %曲线拟合得到曲线图形(即河床轮廓)
syms y x yii
y=poly2sym(p,x)     %拟合曲线的多项式转化为符号表达式
yii=diff(y,x)       %对曲线进行求导
x=50:60;
k=eval(yii)         %[50,60]求导后的数据进行计算导数(也就是斜率)
all(abs(k)<1/1.5)   %判断斜率是否小于1/1.5

%
x=50:60;
y=polyval(p,x); %计算函数【5060】的值
k=diff(y)/1 %计算数值导数
all(abs(k)<1/1.5) %判断斜率时候满足条件





你可能感兴趣的:(Matlab)