4.1 求极限
limit(f,x,a) |
求符号函数f(x)趋近于a极限值 |
limit(f,a) |
求符号函数f(x)趋近于a极限值 |
limit(f) |
求符号函数f(x)的极限值【默认趋近于0】 |
limit(f,x,a,’right’) |
从右边趋近极限值 |
limit(f,x,a,’left’) |
从左边趋近极限值 |
limit(f,x,a,’inf’) |
变量x趋近于无穷 |
练习
syms x f1=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/sin(x)^3 f=limit(f1,x,0) |
4.2求导数
diff(s) |
默认变量进行一阶导数 |
diff(s,v) |
以v为自变量,对符号表达式s求导 |
diff(s,n) |
对符号表达式s求n阶导 |
diff(s,v,n) |
以v为自变量,对符号表达式s求n阶导 |
4.3求积分
4.3.1使用int()求积分
int(s) |
按照默认变量对符号变量s进行不定积分 |
int(s,v) |
以v为自变量,对s求不定积分 |
int(s,v,a,b) |
以v为自变量,对s求积分,a为下限,b为上限 |
练习
syms x f1=2*x; f=int(f1,x,1,2) |
4.4 0点与极值
4.4.1求0点
x=fzero(fun,x0) |
离x0起始点最近的根 |
x=fzero(fun,x0,options) |
由指定的优化参数options进行最小化 |
x=fzero(problem) |
对problem指定的问题求解 |
练习
syms x fun1=@sin fun2=@cos x=fzero(fun1,3) y=fzero(fun2,[1 2]) 在1-2之间的0点 | |
syms x f1='x^5-3*x^4+2*x^2+x+3'; x=fzero(f1,0) |
syms x f1=@(x) x^5-3*x^4+2*x^2+x+3; x=fzero(f1,0) |
fzero 是一个数值求解器,需要传入一个句柄函数或字符串表达式,而不是符号表达式 |
4.4.2求极值
[x,min]=fminbnd(f,a,b) |
x为取得最小值的点,min为极小值,f为函数 a,b表示取得的极值范围 |
此时的f需要传入函数句柄,如f=@(x)=…… |
4.5 求方程
4.5.1线性方程组求解solve()
使用左除\求解
syms x a = [1 1 1; 3 -1 6; 0 1 3]; b = [1; 7; 4]; format rat % 设置输出为分数形式 x = a \ b % 求解线性方程组并以分数显示 |
% 此处syms可省略,因未涉及符号运算 |
使用solve()函数求解
syms x y z g1=x+y+z==1; g2=x-y+z==2; g3=2*x-y-z==1; [x,y,z]=solve(g1,g2,g3) |
4.5.2符号代数方程求解solve()
solve(f,参数) |
solve(f1,f2,…,fn) |
f:含等号=符号表达式方程,不含等号的符号表达式 |
练习
对方程f1=ax2+bx+c, f2=x2-x-30求解 | |
syms a b c x f1=a*x^2+b*x+c; f2=x^2-x-30; |
fx=solve(f1,x); fa=solve(f1,a); f2=solve(f2,x) |
4.5.3常微分方程组求解dsolve()
定义:MATLAB中,
diff(y,x):y’ |
diff(y,x,2):y’’ |
Dy(0)=5表示y’(0)=5 |
dsolve() |
求解 |
dsolve(e,c,v) |
求解常微分方程e在初值条件c下的特解,其中参数v描述自变量,省略是默认为t |
dsolve(e1,e2,…,en,c1,…cn,v1,v2,…vn) |
求解常微分方程组 |
练习
syms y(x) e1=diff(y,x)==-2*x*y+x*exp(-x^2) y1=dsolve(e1) % y1=dsolve(e1,x) 如果是两个变量,则[变量1值,变量2值]=dsolve(eq1,eq2……) |
4.6 函数拟合与插值
插值方法 |
线性插值 |
多项式插值 | |
样条插值-通常三次样条 |
%%线性插值法-样条插值法对数据进行拟合 x=1:5; y=[3 5 4 6 2]; xi=1:0.1:5; y_1=interp1(x,y,xi,'linear') y_2=interp1(x,y,xi,'spline') plot(x,y,'o',xi,y_1,'-',xi,y_3,'--') |
例题1:极限计算
问题:计算以下极限: 1. ( {x } ) 2. ( {x } (1 + )^x )
代码实现:
syms x % 定义符号变量
% 极限1:sin(x)/x 在x→0时的极限
limit1 = limit(sin(x)/x, x, 0);
% 极限2:(1+2/x)^x 在x→∞时的极限
limit2 = limit((1 + 2/x)^x, x, Inf);
% 显示结果
disp('极限1结果:');
disp(limit1);
disp('极限2结果:');
disp(limit2);
结果说明:
极限1结果为 1(重要极限),极限2结果为 exp(2)(即 ( e^2 ))。
例题2:导数与高阶导数
问题:已知 ( f(x) = x^2 e^{2x} ),求: 1. 一阶导数 ( f’(x) ) 2. 二阶导数 ( f’’(x) ) 3. 在 ( x=1 ) 处的导数值
代码实现:
syms x
f = x^2 * exp(2*x); % 定义函数
% 一阶导数
f1 = diff(f);
% 二阶导数
f2 = diff(f, 2); % 第二个参数指定导数阶数
% x=1处的导数值
f1_val = subs(f1, x, 1);
% 显示结果
disp('一阶导数:');
disp(f1);
disp('二阶导数:');
disp(f2);
disp('x=1处的一阶导数值:');
disp(f1_val);
结果说明:
一阶导数为 ( 2x e^{2x} + 2x^2 e^{2x} ),二阶导数为 ( 2e^{2x} + 8x e^{2x} + 4x^2 e^{2x} ),( x=1 ) 处导数值为 ( 4e^2 )。
例题3:定积分与反常积分
问题:计算: 1. 定积分 ( _0^{} (x x) dx ) 2. 反常积分 ( _0^{} e^{-x} dx )
码实现:
syms x
% 定积分:x*sin(x)从0到π
int1 = int(x*sin(x), x, 0, pi);
% 反常积分:e^(-x)从0到∞
int2 = int(exp(-x), x, 0, Inf);
% 显示结果
disp('定积分结果:');
disp(int1);
disp('反常积分结果:');
disp(int2);
结果说明:
定积分结果为 ( ),反常积分结果为 1(指数函数的无穷积分收敛)。
例题4:多重积分
问题:计算二重积分 ( _D (x^2 + y^2) dxdy ),其中 ( D ) 是由 ( x ),( y ) 围成的矩形区域。
代码实现:
syms x y
% 被积函数
f = x^2 + y^2;
% 二重积分:先对y积分(0到2),再对x积分(0到1)
int_double = int(int(f, y, 0, 2), x, 0, 1);
% 显示结果
disp('二重积分结果:');
disp(int_double);
结果说明:
计算结果为 ( )(分步积分:先对 ( y ) 积分得 ( 2x^2 + ),再对 ( x ) 积分得结果)。
例题5:常微分方程求解
问题:求解微分方程 ( y’’ + 2y’ + y = 0 ),并求满足初始条件 ( y(0)=1 ),( y’(0)=0 ) 的特解。
代码实现:
syms y(x) % 定义符号函数
% 微分方程:y'' + 2y' + y = 0
eqn = diff(y, 2) + 2*diff(y) + y == 0;
% 通解
sol_general = dsolve(eqn);
% 特解(带初始条件)
cond1 = y(0) == 1;
cond2 = diff(y)(0) == 0;
sol_specific = dsolve(eqn, [cond1, cond2]);
% 显示结果
disp('通解:');
disp(sol_general);
disp('特解:');
disp(sol_specific);
结果说明:
通解为 ( y(x) = C_1 e^{-x} + C_2 x e^{-x} ),特解为 ( y(x) = e^{-x} + x e^{-x} )(代入初始条件求得常数 ( C_1=1, C_2=1 ))。
例题6:数值积分(复杂函数)
问题:用数值方法计算 ( _0^1 dx )(被积函数在0处有极限,适合数值计算)。
代码实现:
% 定义被积函数(匿名函数)
f = @(x) sin(x.^2) ./ x;
% 处理x=0处的奇点(补充定义为0的极限值0)
f = @(x) (x == 0) .* 0 + (x ~= 0) .* sin(x.^2) ./ x;
% 数值积分(自适应辛普森法)
result = integral(f, 0, 1);
% 显示结果
disp('数值积分结果:');
disp(result);
结果说明:
数值计算结果约为 0.4388(该积分无解析表达式,需用数值方法求解)。
总结
- 符号计算(syms、limit、diff、int、dsolve)适合求解析解,结果精确,用于公式推导;
- 数值计算(integral、ode45等)适合复杂函数或无解析解的问题,结果为近似值,效率高;
- 实际应用中可结合两者:先用符号计算验证简单情况,再用数值方法解决复杂问题。