Matlab符号运算(符号的创建和简单运算、函数求导、不定积分和定积分、解方程组)代码和解释
这篇笔记来自清风老师和自己学习整理
一、符号的创建和简单运算
%% 符号变量的创建和简单运算% 简单符号变量的创建
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符号运算(符号的创建和简单运算、函数求导、不定积分和定积分、解方程组)代码和解释相关推荐
- MATLAB符号变量的创建和简单运算
声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB符号变量的创建和简单运算 1.符号变量 1. 1 符号变量的创建 1.2 符号方程的创建 3 符号矩阵的创建 2.符号运算 2.1 简 ...
- C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?
已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少? 用共用体方法:共用体内的空间是公用的,每一个成员都可以访问共用 ...
- sympy 符号函数求导
原文链接: sympy 符号函数求导 上一篇: python 一阶线性拟合 下一篇: python 非线性方程组 使用sympy 对指定函数表达式求值和求指定位置的导数 from sympy impo ...
- matlab用辛普森公式求积分_变限积分函数求导以及高阶导数求法的一些总结
感谢 @聚创考研 的张帆老师,给我上了一堂生动的课.特此总结一下课上求导数的方法(怕自己忘了). 1.变限积分函数求导 变限积分函数求导简单的分为三类: 第一类(或者形如 这种)可以直接得到 ,第二. ...
- python函数求导_python构建计算图1——简单实现自动求导
机器学习和深度学习中比较重要的内容便是计算图,主流的框架如tensorflow,pytorch都是以计算图为主要框架.而计算图的核心便是自动求导. 所谓自动求导,就是在表达式或者网络结构确定之时,其( ...
- matlab的多项式拟合,函数求导,画函数曲线
给一列数据. 拟合出该数据的函数曲线.多项式拟合. 然后画出函数曲线来.以及给出函数形式. 求导. 再画出导数的曲线.以及给出导数函数形式. matlab代码: clc close all clear ...
- matlab中函数求导 求反,关于一个函数的反函数求导问题,一个超复杂函数……急啊!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在做课设,现在时间很紧了-- 关于一个函数的反函数求导问题,用matlab弄出来的超复杂函数-- 函数的大概形式是:L_bc=f(k); 我想求的是:k ...
- 带求和符号的函数求导
- matlab匿名函数求导,Matlab中的匿名函数的使用
转载自:http://blog.sina.com.cn/s/blog_71fb42f70100uyfx.html#commonComment 1.匿名函数的基本用法. handle = @(argli ...
- matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数
在MATLAB和Python中都有一个叫做匿名函数的东西,在这里对比一下. 一. MATLAB中这样来定义一个匿名函数: f = @(x1, x2, ...) exper @后面的括号里面是自变量,然 ...
最新文章
- java regexp_java中使用regexp
- 数据库中间件MyCAT源码分析:调试环境搭建
- shell命令之---LVM文件系统
- BellmanFord
- Struts2 拦截器: 拦截器与过滤器区别
- jsp 内置对象 登录 cookie + session
- 华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解)
- 字体 素材_4个网站,涵盖几乎所有素材,字体、设计、图片各种资源管够
- python左闭右开_漫话:为什么程序员喜欢使用0 ≤ i 10这种左闭右开的形式写for循环?...
- linux c代码调试工具,在 Linux 中调试 C 程序的福音——gdb
- Android异步批量下载图片并缓存
- docker 中 NGINX+PHP+MYSQL+REDIS+Elasticsearch 环境搭建 (linux系统)
- delphi 10.3.1 android沉浸式透明状态栏
- 基于Python实现的DHT嗅探器
- Spring Aop 的配置与运用
- PP点点通介绍与下载
- openlayers+vue水流图
- 深度学习面试专用:深度学习500问;文字版吴恩达深度学习,机器学习
- QTableWidget获取一行数据
- 知道创宇优质混合云解决方案,点击了解~