这篇笔记来自清风老师和自己学习整理

一、符号的创建和简单运算

%% 符号变量的创建和简单运算% 简单符号变量的创建
syms x  %  sym是symbolic的缩写
syms a b c% 符号方程的创建,有两种方法
%第一种:
syms a x
y = a*x+x^2
%第二种:
% y = str2sym('a*x+x^2')  %Matlab 2017b 版本后推出% 符号矩阵
syms alpha
M = [cos(alpha)  -sin(alpha);sin(alpha)  cos(alpha)]%% 简单运算
syms a b c d e
y = a + b
x = c - d
y1 = x*y % (a + b)*(c - d)
y2 = y1/y % c - d
y3 = y1^3  % (a + b)^3*(c - d)^3
y4 = sqrt(y3)   % ((a + b)^3*(c - d)^3)^(1/2)
y5 = exp(y4) % exp(((a + b)^3*(c - d)^3)^(1/2))%% 符号表达式的整理
clear;clc
% 化简
syms a
y=(cot(a/2)-tan(a/2))*(1+tan(a)*tan(a/2))
simplify(y) % 2/sin(a)%% 因式分解
factor(12) % 对常数进行因式分解
%      2     2     3
syms m n x
y = -24*m^2*x-16*n^2*x
factor(y)
% [ -8, x, 3*m^2 + 2*n^2]
y1=m^3-n^3
factor(y1)
% [ m - n, m^2 + m*n + n^2]%% 多项式展开
syms a x
y = a*(x^2-a)^2+(x-2)
expand(y)
% a^3 - 2*a^2*x^2 + a*x^4 + x - 2%% 合并
syms x y
z = (x+y)^2*y+5*y*x-2*x^3
% expand(z)   - 2*x^3 + x^2*y + 2*x*y^2 + 5*x*y + y^3
collect(z,x)
% y*x^2 - 2*x^3 + (2*y^2 + 5*y)*x + y^3
collect(z,y)
% y^3 + 2*x*y^2 + (x^2 + 5*x)*y - 2*x^3%% 计算分子与分母
% [z1,z2] = numden(2.5)  % 会报错,因为numden的输入变量不能是数值,只能是符号变量
% ans = sym(2.5);  % sym函数可以将数值2.5转换为符号
[z1,z2] = numden(sym(2.5)) % 对常数计算分子与分母
% z1 = 5
% z2 = 2
syms x y
z = 1/x*y+x/(x^2-2*y)
[z1,z2] = numden(z)  %z1分子,z2分母
% z1 = - x^2*y - x^2 + 2*y^2
% z2 = x*(- x^2 + 2*y)%% 让结果显示的更加自然
syms x y
M = (1/x*y+x/(x^2-2*y)-x^2/(3+y)^2)^2;
expand(M)
% y^2/x^2 + x^4/(y^4 + 12*y^3 + 54*y^2 + 108*y + 81) + (2*x^3)/(- x^2*y^2 - 6*x^2*y - 9*x^2 + 2*y^3 + 12*y^2 + 18*y) - (2*y)/(- x^2 + 2*y) + x^2/(x^4 - 4*x^2*y + 4*y^2) - (2*x*y)/(y^2 + 6*y + 9)
mupad % 未来的版本可能会移除这个mupad工具箱,可以点击Matlab的主页,新建实时脚本

二、符号函数的求导

%% 符号函数的求导
clear;clc% 一元函数的导数
syms x
y = x^4-5*x^2+6
diff(y) %求一阶导数 4*x^3 - 10*x
diff(y,2) %求二阶导数 12*x^2 - 10y = 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     0A=[4 5 6; 7 4 2;5 6 2]
A1=diff(A)  % 下一行减去上一行求一阶差分
%      3    -1    -4
%     -2     2     0
A2=diff(A,2) % 下一行减去上一行求二阶差分(在一阶差分的基础上再差分一次)
%     -5     3     4A3=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

三、计算定积分和不定积分

%% 计算不定积分
clear;clcsyms x
y = x^2
int(y,x)% x^3/3
% 注意:Matlab计算时不会给我们加上常数Csyms x
y = 1/x
int(y,x) % log(x)
% 注意:Matlab计算1/x形式的不定积分时不会给我们加上绝对值syms x
y = x^2 / (1+x^2)
int(y,x) % x - atan(x)syms x
y = 1/(exp(x)+1)
int(y,x) % x - log(exp(x) + 1)syms x a
y = 1/sqrt(x^2-a^2)
int(y,x)
% log(x + (x^2 - a^2)^(1/2))%% 计算定积分
syms x
y = sin(x)
int(y,x,0,pi/2) % 1syms x a b
y = exp(x)
int(y,x,a,b) % exp(b) - exp(a)syms x
y = (sin(x))^2 / x^2
b=int(y,x,0,+inf) % pi/2% 注意,不是所有的函数都可以利用int函数计算出最后的结果,如:
syms x
y = 1 / exp(x) * log(x+2*x^2+sin(x))
int(y,x,0,4) % int(exp(-x)*log(x + sin(x) + 2*x^2), x, 0, 4)% 我们可以计算数值积分:数值积分可用于求定积分的近似值
% 在数值分析中,数值积分是计算定积分数值的方法和理论
% 在数学分析中,给定函数的定积分的计算不总是可行的
% 许多定积分不能用已知的积分公式得到精确值
y = @(x) 1 ./ exp(x) .* log(x+2.*x.^2+sin(x))
% 注意,写成函数句柄时,要用点乘或者点除
integral(y,0,4)xx = 0:0.1:4;
yy = 1 ./ exp(xx) .* log(xx+2*xx.^2+sin(xx));
plot(xx,yy,'-')

四、求解方程和方程组

%% matlab求解方程和方程组% 不同的MATLAB版本之间的语法可能存在不兼容的情况%% 1.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]) %% 2.vpasolve函数求解
% 用vpasolve函数指定求某个区间上的解
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)
vpasolve(eqn, x, -5)   % 给定搜索的起始点%% 来看一个更复杂的例子
syms x y
eqn = [x^2 - 2*x - 3*x*y == 10, y^4 == exp(-2*x/3*y)]
[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可以将我们的符号变量转换为数值变量%% 3.fsolve函数(求解功能最为强大)
% fsolve是Matlab优化工具箱中的一个函数,可专门用来求解特别复杂的方程和方程组
x0 = [0,0];  % 初始值
result_x = fsolve(@my_fun,x0)% 当然也可以用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])

更多关于Matlab求方程的介绍可看这个博客

Matlab符号运算(符号的创建和简单运算、函数求导、不定积分和定积分、解方程组)代码和解释相关推荐

  1. MATLAB符号变量的创建和简单运算

    声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB符号变量的创建和简单运算 1.符号变量 1. 1 符号变量的创建 1.2 符号方程的创建 3 符号矩阵的创建 2.符号运算 2.1 简 ...

  2. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?

    已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少? 用共用体方法:共用体内的空间是公用的,每一个成员都可以访问共用 ...

  3. sympy 符号函数求导

    原文链接: sympy 符号函数求导 上一篇: python 一阶线性拟合 下一篇: python 非线性方程组 使用sympy 对指定函数表达式求值和求指定位置的导数 from sympy impo ...

  4. matlab用辛普森公式求积分_变限积分函数求导以及高阶导数求法的一些总结

    感谢 @聚创考研 的张帆老师,给我上了一堂生动的课.特此总结一下课上求导数的方法(怕自己忘了). 1.变限积分函数求导 变限积分函数求导简单的分为三类: 第一类(或者形如 这种)可以直接得到 ,第二. ...

  5. python函数求导_python构建计算图1——简单实现自动求导

    机器学习和深度学习中比较重要的内容便是计算图,主流的框架如tensorflow,pytorch都是以计算图为主要框架.而计算图的核心便是自动求导. 所谓自动求导,就是在表达式或者网络结构确定之时,其( ...

  6. matlab的多项式拟合,函数求导,画函数曲线

    给一列数据. 拟合出该数据的函数曲线.多项式拟合. 然后画出函数曲线来.以及给出函数形式. 求导. 再画出导数的曲线.以及给出导数函数形式. matlab代码: clc close all clear ...

  7. matlab中函数求导 求反,关于一个函数的反函数求导问题,一个超复杂函数……急啊!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在做课设,现在时间很紧了-- 关于一个函数的反函数求导问题,用matlab弄出来的超复杂函数-- 函数的大概形式是:L_bc=f(k); 我想求的是:k ...

  8. 带求和符号的函数求导

  9. matlab匿名函数求导,Matlab中的匿名函数的使用

    转载自:http://blog.sina.com.cn/s/blog_71fb42f70100uyfx.html#commonComment 1.匿名函数的基本用法. handle = @(argli ...

  10. matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数

    在MATLAB和Python中都有一个叫做匿名函数的东西,在这里对比一下. 一. MATLAB中这样来定义一个匿名函数: f = @(x1, x2, ...) exper @后面的括号里面是自变量,然 ...

最新文章

  1. java regexp_java中使用regexp
  2. 数据库中间件MyCAT源码分析:调试环境搭建
  3. shell命令之---LVM文件系统
  4. BellmanFord
  5. Struts2 拦截器: 拦截器与过滤器区别
  6. jsp 内置对象 登录 cookie + session
  7. 华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解)
  8. 字体 素材_4个网站,涵盖几乎所有素材,字体、设计、图片各种资源管够
  9. python左闭右开_漫话:为什么程序员喜欢使用0 ≤ i 10这种左闭右开的形式写for循环?...
  10. linux c代码调试工具,在 Linux 中调试 C 程序的福音——gdb
  11. Android异步批量下载图片并缓存
  12. docker 中 NGINX+PHP+MYSQL+REDIS+Elasticsearch 环境搭建 (linux系统)
  13. delphi 10.3.1 android沉浸式透明状态栏
  14. 基于Python实现的DHT嗅探器
  15. Spring Aop 的配置与运用
  16. PP点点通介绍与下载
  17. openlayers+vue水流图
  18. 深度学习面试专用:深度学习500问;文字版吴恩达深度学习,机器学习
  19. QTableWidget获取一行数据
  20. 知道创宇优质混合云解决方案,点击了解~

热门文章

  1. Go 1.9 sync Map 源码阅读笔记
  2. CentOS 6各版本镜像合集下载
  3. LBM学习讨论群推荐
  4. layim手机版嵌入app
  5. USYD悉尼大学DATA1002 OralExam 复习(可能会考的内容)
  6. with revoked permission android.permission.CAMERA
  7. 《DFS》《剪枝》Problem C. 买蛋糕
  8. 请你来说一下数字证书是什么,里面都包含那些内容
  9. tps 、qps、bps、Bps的含义
  10. 京东登录页面(静态页面)