matlab学习(六)[数值;符号]*[微积分,方程]

一、数值微积分

1、数值微分
数值差分与差商
微积分中,任意函数f(x)在x0点的导数是通过极限定义的在这里插入图片描述
MATLAB提供了求向前差分的函数diff,其调用格式有三种: 
dx=diff(x):计算向量x的向前差分,dx(i)=x(i+1)-x(i),i=1,2,…,n-1。 
dx=diff(x,n):计算向量x的n阶向前差分。例如,diff(x,2)=diff(diff(x))。 
dx=diff(A,n,dim):计算矩阵A的n阶差分,dim=1时(默认状态),按列计算 差分;dim=2,按行计算差分。
样例一: 设f(x)=sin x , 在[0,2π]范围内随机采样,计算f’(x)的近似值

>> x=[0,sort(2*pi*rand(1,5000)),2*pi]; 
>> y=sin(x);
>> f1=diff(y)./diff(x); 
>> f2=cos(x(1:end-1)); 
>> d=norm(f1-f2)

d=0.0456
2. 数值积分
在高等数学中,计算定积分依靠微积分基本定理,只要找到被积函数f(x)
的原函数大F(x),则可用牛顿—莱布尼兹(Newton-Leibniz)公式:在这里插入图片描述
基于自适应辛普森方法
[I,n]=quad(filename,a,b,tol,trace)
基于自适应Gauss-Lobatto方法
[I,n]=quadl(filename,a,b,tol,trace)
其中,filename是被积函数名;a和b分别是定积分的下限和上限,积分限[a,b] 必须是有限的,不能为无穷大(Inf);tol用来控制积分精度,默认时取 tol=10-6;trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展 现,默认时取trace=0;返回参数I即定积分的值,n为被积函数的调用次数。

样例二:分别用quad函数和quadl函数求定积分的近似值,并在相同的积分精度下,比较被积函数的调用次数。
在这里插入图片描述

>> format long 
>>  f=@(x) 4./(1+x.^2); 
>> [I,n]=quad(f,0,1,1e-8) 
>>  [I,n]=quadl(f,0,1,1e-8) 
>>  (atan(1)-atan(0))*4 

ans=3.141592653589793
样例三:分别求二重积分和三重积分。
在这里插入图片描述

>> f1=@(x,y) exp(-x.^2/2).*sin(x.^2+y);
>> I1=quad2d(f1,-2,2,-1,1)
>> f2=@(x,y,z) 4*x.*z.*exp(-z.*z.*y-x.*x)
>> I2=integral3(f2,0,pi,0,pi,0,1) 

I1=1.574498141468206
I2= 1.732762223027684
(CSDN编辑器直接从命令行窗口复制结果粘贴到markdown编辑器上会有bug)

二、数值方程

线性方程组求解
直接法
高斯(Gauss)消去法  列主元消去法  矩阵的三角分解法
样例四:利用左除运算符的直接解法

>> A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; 
>>  b=[13,-8,6,0]'; 
>>  x=A\b 

在这里插入图片描述
迭代法
雅可比(Jacobi)迭代法

function [y,n]=jacobi(A,b,x0,ep) 
D=diag(diag(A)); 
L=-tril(A,-1); 
U=-triu(A,1); 
B=D\(L+U); 
f=D\b; 
y=B*x0+f;
n=1; 
while norm(y-x0)>=ep     
    x0=y;     
    y=B*x0+f;     
    n=n+1; 
end 

高斯-赛德尔(Gauss-Serdel)迭代法

function [y,n]=gauseidel(A,b,x0,ep) 
D=diag(diag(A)); 
L=-tril(A,-1);  
U=-triu(A,1); 
B=(D-L)\U; 
f=(D-L)\b;
y=B*x0+f; 
n=1; 
while norm(y-x0)>=ep     
    x0=y;     
    y=B*x0+f;     
    n=n+1; 
end 

样例五:分别用雅可比迭代法和高斯-赛德尔迭代法求解线性方程组。

>>  A=[4,-2,-1;-2,4,3;-1,-3,3]; 
>>  b=[1,5,0]'; 
>>  [x,n]=jacobi(A,b,[0,0,0]',1.0e-6) 
>> [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)

结果:
在这里插入图片描述
在这里插入图片描述
非线性方程求解与函数极值计算
1、非线性方程求解
单变量方程函数的调用格式为:
x=fzero(filename,x0)
其中,filename是待求根方程左端的函数表达式,x0是初始值。
在MATLAB的最优化工具箱中提供了非线性方程组的求解函数fsolve,其调用
格式如下:
x=fsolve(filename,x0,option)
样例六:求下列方程组在(1,1,1)附近的解并对结果进行验证。
在这里插入图片描述

>>  f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)]; 
>>  f([1,1,1]) 
>> x=fsolve(f,[1,1,1],optimset('Display','off')) 
>> f(x) 

x= -0.593079135684327
y= 0.000000000000930
z= 0.000638901649239
2.函数极值的计算
求最小值的函数为:
[xmin,fmin]=fminbnd(filename,x1,x2,option)
[xmin,fmin]=fminsearch(filename,x0,option)
[xmin,fmin]=fminunc(filename,x0,option)
其中,xmin表示极小值点,fmin表示最小值,filename是定义的目标函数。第一 个函数的输入变量xl、x2分别表示被研究区间的左、右边界。后两个函数的输入 变量x0是一个向量,表示极值点的初值。option为优化参数,可以通过optimset 函数来设置。
样例七:求函数在这里插入图片描述
在区间(-10,-1)和(1,10)上的最小值点。

>>  f=@(x) x-1./x+5; 
>>  [xmin,fmin]=fminbnd(f,-10,-1) 
>> [xmin,fmin]=fminbnd(f,1,10)

(-9.999946678462546,-4.899946145244329)
(1.000053455645318,5.0001069084332830

常微分方程数值求解

 MATLAB提供了多个求常微分方程初值问题数值解的函数,一般调用格式为: [t,y]=solver(filename,tspan,y0,option) 其中,t和y分别给出时间向量和相应的数值解。solver为求常微分方程数值解 的函数。filename是定义f(t,y)的函数名,该函数必须返回一个列向量。 tspan形式为[t0,tf ],表示求解区间。y0是初始状态列向量。Option是可选 参数,用于设置求解属性,常用的属性包括相对误差值RelTol ( 默认值是 10-3) 和绝对误差值AbsTol(默认值是 10-6)。常微分方程数值求解函数的统一命名格式:ode  nn  xx

三、符号微积分

求符号函数极限的命令为limit,其调用格式为: limit(f,x,a) 即求函数f关于变量x在a点的极限。  limit函数的另一种功能是求单边极限,其调用格式为: limit(f,x,a,‘right’) limit(f,x,a,‘left’)
MATLAB中的求导函数为: diff(f,x,n) 即求函数f关于变量x的n阶导数。参数x的用法同求极限 函数limit,可以缺省,默认值与limit相同,n的默认值 是1。
(1)不定积分 在MATLAB中,求不定积分的函数是int(),其常用 的调用格式为: int(f,x) 即求函数f对变量x的不定积分。
(2)定积分 在MATLAB中,定积分的计算也使用int()函数,但调用格式有区别: int(f,x,a,b) 其中,a、b分别表示定积分的下限和上限。
样例八:河道水流量的估算问题

xi=0:50:600; 
yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.4,5.2,4.9,4.8,4.7]; 
p=polyfit(xi,yi,3); 
plot(xi,yi,'o',xi,polyval(p,xi)); 
syms y x;
y=poly2sym(p,x);
s=int(y,x,0,600);    
v=s*0.6;             
eval(v)

在这里插入图片描述

四、符号方程

在MATLAB中,求解用符号表达式表示的代数方程可由函数 solve()实现,其调用格式为: ① solve(s):求解符号表达式s的代数方程,求解变量为 默认变量。 ② solve(s,v):求解符号表达式s的代数方程,求解变量 为v。 ③ solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式 s1,s2,…,sn组成的代数方程组,求解变量分别为v1, v2,…,vn。
样例九:
解方程 在这里插入图片描述

>> syms x y a b c; 
>> solve(a*x^2+b*x+c==0)

猜你喜欢

转载自blog.csdn.net/qq_41622092/article/details/89057817