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

本文详细介绍了MATLAB在数值计算方面的应用,包括数值微积分、数值方程的解法。在数值微积分部分,讲解了如何使用diff函数进行数值差分和quad函数进行数值积分。在数值方程求解方面,介绍了直接法和迭代法解线性方程组,以及非线性方程的fzero和fsolve函数。此外,还涉及到了符号微积分的基本操作,如limit、diff、int函数,以及符号方程的solve函数。
摘要由CSDN通过智能技术生成

一、数值微积分

1、数值微分 

数值差分与差商

微积分中,任意函数f(x)在x0点的导数是通过极限定义的

a6a74508e60d064d3b030ff6b72aefc3.png

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)公式:

8d42b64f998086f49557af81d450a0eb.png

基于自适应辛普森方法

[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函数求定积分的近似值,并在相同的积分精度下,比较被积函数的调用次数。

a5a1ef2ddc05bb7d9e586d23dcd05284.png

>> 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

样例三:分别求二重积分和三重积分。

736df4d424298603038b68cce949ce52.png

>> 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

c67bf106756760139d6357a25a2d4b33.png

迭代法

雅可比(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)

结果:

5ece9b81dc10905ef97d5a5199c9b595.png

3220c7a4d2f73501f2aca17adb5043f8.png

非线性方程求解与函数极值计算

1、非线性方程求解

单变量方程函数的调用格式为:

x=fzero(filename,x0)

其中,filename是待求根方程左端的函数表达式,x0是初始值。

在MATLAB的最优化工具箱中提供了非线性方程组的求解函数fsolve,其调用

格式如下:

x=fsolve(filename,x0,option)

样例六:求下列方程组在(1,1,1)附近的解并对结果进行验证。

f4f76cc8a24c878e9beb5d51230e9652.png

>> 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 函数来设置。

样例七:求函数

f306c5811eedfa34371c96c386bb8cc7.png

在区间(-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)

5c6d14303e7e38270f1f1198a709222e.png

四、符号方程

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

样例九:

解方程

ef641188c0cd66722a414ed495842f15.png

>> syms x y a b c;

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

标签:函数,求解,积分,微积分,数值,filename,matlab,diff,x0

来源: https://blog.csdn.net/qq_41622092/article/details/89057817

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值