求导 diff 积分 int 数值积分:[定积分的近似值] integral
%% 符号函数的求导 clear;clc % 一元函数的导数 syms x y = x^4-5*x^2+6 diff(y) %求一阶导数 % 4*x^3 - 10*x diff(y,2) %求二阶导数 % 12*x^2 - 10 y = cos(x)*tan(x) dy = diff(y,10) %求十阶导数 simplify(dy) y = sin(x)*tan(x) dy = diff(y,10) %求十阶导数 simplify(dy) % 多元函数的导数 syms x1 x2 x3 y1 = x1^5*x2+x2*x3-x1^2*x3 py1 = diff(y1,x1,1) % 对x1求一阶偏导 % 5*x2*x1^4 - 2*x3*x1 py2 = diff(y1,x1,2) % 对x1求二阶偏导 % 20*x2*x1^3 - 2*x3 py3 = diff(y1,x1,x2) % 先对x1求偏导,再对x2求偏导 % 5*x1^4 py4 = diff(y1,x2,x1) % 先对x2求偏导,再对x1求偏导 % 5*x1^4 %% 注意,如果diff函数作用的对象不是符号函数,而是矩阵,那么对应的功能是求差分。 A=[4 5 6 3 2 1]; diff(A) % 求向量A的一阶差分 1 1 -3 -1 -1 diff(A,2) % 在一阶差分的基础上再差分一次 0 -4 2 0 A=[4 5 6; 7 4 2; 5 6 2] A1=diff(A) % 下一行减去上一行求一阶差分 % 3 -1 -4 % -2 2 0 A2=diff(A,2) % 下一行减去上一行求二阶差分(在一阶差分的基础上再差分一次) % -5 3 4 A3=diff(A,2,1) % 最后面的1表示在行上进行差分(在列的方向上进行差分) % -5 3 4 A4=diff(A,1,2) % 后一列减去前一列求一阶差分, 最后面的2表示在列上进行差分(在行的方向上进行差分) % 1 1 % -3 -2 % 1 -4 A4=diff(A,2,2) % 后一列减去前一列求二阶差分 % 0 % 1 % -5(solve)—— 求解 (vpasolve)—— 指定范围求解
%% matlab求解方程和方程组 % 不同的MATLAB版本之间的语法存在不兼容的情况:https://www.zhihu.com/question/360875116/answer/937256480 % 视频里面用到的是Matlab2017a版本,如果低版本版本可能会报错。 % 更多关于Matlab求方程的介绍可看这个博客:https://blog.csdn.net/weixin_30724853/article/details/99004382 %% solve函数 %% 例题1: 求解单变量方程 clear;clc syms x answ = solve(sin(x) == 1, x) % 注意:这里的等号一定要有两个,一个等号表示赋值,两个等号才表示左右两边相等 answ = solve(sin(x) == 1) % 只有一个符号变量x,所以可以不指定未知数 % 也可以这样写 clear;clc syms x eqn = (sin(x) == 1); % eqn = sin(x) == 1; answ = solve(eqn, x) % 因为三角函数是周期函数,如果要得到所有的解,则需要加上条件 [answ, params, condions] = solve(eqn, x, 'ReturnConditions', true) %% 例题2: 多变量方程求解 clear;clc syms a b c x eqn = (a*x^2 + b*x + c == 0); answ1 = solve(eqn, x) % 将x视为未知数求解 % -(b + (b^2 - 4*a*c)^(1/2))/(2*a) % -(b - (b^2 - 4*a*c)^(1/2))/(2*a) answ2 = solve(eqn, a) % 将a视为未知数求解 % -(c + b*x)/x^2 %% 例题3:方程组求解 clear;clc syms u v a eqn = [2*u + v == a, u - v == 1]; answ = solve(eqn, [u, v]) answ.u answ.v [answ_u, answ_v] = solve(eqn, [u, v]) %% solve 可能会警告【一般不用这个】 syms x eqn = (sin(x) == x^2 - 1); solve(eqn, x) % 警告: Cannot solve symbolically. Returning a numeric approximation instead. % 画图看看 fplot(sin(x), [-2 2]) % fplot函数可绘制表达式的图形 hold on fplot(x^2 - 1, [-2 2]) %% vpasolve函数求解【求解功能更为强大,可以指定区间】 % 用vpasolve函数指定求[0 2]上的解 syms x eqn = sin(x) == x^2 - 1; vpasolve(eqn, x, [0 2]) vpasolve(eqn, x, [-1 0]) vpasolve(eqn, x, [-10 10]) % vpasolve returns all solutions only for polynomial equations. % For nonpolynomial equations, there is no general method of finding all solutions. % When you look for numerical solutions of a nonpolynomial equation or system that has several solutions, % then, by default, vpasolve returns only one solution, if any. % To find more than just one solution, set random to true. % Now, calling vpasolve repeatedly might return several different solutions. vpasolve(eqn, x, 'random', true) % 找不到所有的解,random 随机找解 vpasolve(eqn, x, -5) % 给定搜索的起始点 ,找到靠近 -5 的解 %% 来看一个更复杂的例子 syms x y eqn = [x^2 - 2*x - 3*x*y == 10, y^4 == exp(-2*x/3)] [answ_x, answ_y] = vpasolve(eqn, [x, y], 'random', true) % 画图看看 ezplot(x^2 - 2*x - 3*x*y == 10, [-10 10]) hold on ezplot(y^4 == exp(-2*x/3*y), [-10 10]) close % 关闭图形 % ezplot函数比较鸡肋,下面这个函数比较厉害哦 fimplicit(x^2 - 2*x - 3*x*y == 10, [-10 10],'r') % R2016b版本之后才有 hold on fimplicit(y^4 == exp(-2*x/3*y), [-10 10],'b') % R2016b版本之后才有 [answ_x, answ_y] = vpasolve(eqn, [x, y],[-4 -1;1 5]) % 指定搜索的范围:x位于[-4 -1], y位于[1 5] hold on plot(answ_x, answ_y,'ko', 'MarkerSize',10) % plot(double(answ_x), double(answ_y),'ko', 'MarkerSize',10) % double可以将我们的符号变量转换为数值变量 %% fsolve函数(求解功能最为强大哦) % fsolve是Matlab优化工具箱中的一个函数,可专门用来求解特别复杂的方程和方程组 x0 = [0,0]; % 初始值 result_x = fsolve(@my_fun,x0) % my_fun.m 需要提前给编写好,放到同目录的文件夹下 % 当然你也可以用vpasolve函数试试 clear; clc syms x1 x2 eqn = [exp(-exp(-(x1+x2))) - x2*(1+x1^2) == 0, x1*cos(x2) + x2*sin(x1) - 0.5 == 0] [answ_x1, answ_x2] = vpasolve(eqn, [x1, x2], [0 0])