前言:
现在咱们对“matlab基本搜索过程”大概比较关注,同学们都需要了解一些“matlab基本搜索过程”的相关内容。那么小编同时在网上收集了一些有关“matlab基本搜索过程””的相关知识,希望朋友们能喜欢,大家快快来了解一下吧!第六章 符号运算1.53 符号对象
1.符号数值、变量和表达式的创建方法
2.认识函数
sym、syms
3.说明
符号数学工具箱
符号数学工具箱引入了一种特殊的数据类型 - 符号对象
该数据类型包括符号数字,符号变量,符号表达式和符号函数,还包含符号矩阵及上述变量组成的符号数组。
符号数学工具箱提供求解、绘图和操作符号数学方程的功能
4.实例演示
%1_53%freexyn1/6 %双精度浮点型1/6,在Matlab中使用小数表达x=sym(1/6) %创建符号变量,分数形式表达class(x) %测试x类型为符号对象sin(pi) %对双精度浮点pi值求sin值,有舍入误差sin(sym(pi)) %对符号对象数值pi求sin值,完整表达%% 创建符号变量sym('x') %方法1syms x %方法2 声明后可直接使用,无输出结果,但工作区会存储syms x y zsym('x',[1 5]) %方法1的形式也可赋值多个符号变量,并自动编号%% 创建符号表达式f=2*x+1g=x*y+z
1.54 符号函数和符号矩阵
1.符号函数和符号矩阵的创建和应用
2.说明
符号函数和符号矩阵的用法与常规的矩阵和函数相同,差异在于处理的数据类型不同,用符号对象运算时,需要首先声明符号对象。
3.实例演示
%1_54syms x %声明符号对象xf=2*x+1 %符号表达式f(x)=2*x+1 %符号函数f(1) %结果是符号对象3,与双精度3不同syms f(x,y) %直接创建(声明)没有函数表达式的函数f(x,y) %调用f(1,2) %运算结果%% 符号矩阵syms a b c d %声明符号变量A=[a b;c d] %符号矩阵,结果每行用中括号单独表达B=[a 1;c 3] %混合类型符号矩阵sum(A) %符号矩阵运算,与常规矩阵算法相同sum(B)sym('x',[2 2]) %创建2行2列矩阵,自动添加下标sym('x%d%d',[2 2]) %分别引用2个下标sym('x%d2018%d',[2 2]) %2个下标中间添加数字%% 普通矩阵转化为符号矩阵C=hilb(3) %创建3阶希尔伯特矩阵sym(C) %转化为符号矩阵
1.55 基本运算
1.符号对象的算术运算、关系运算和逻辑运算
2.认识函数
isAlways %判断符号表达式是否为真
3.说明
符号对象的基本代数运算与浮点型数据的运算大体相同
4.实例演示
%1_551+1sym(1)+1syms a b x %声明符号变量a+1a+bf=a+b+1f+xg(x)=a*x+b %函数运算g(10)m=[a b;b a] %符号矩阵运算m+1m.*2 %每个元素都乘2m*m %矩阵乘法%% 关系运算1<2 %浮点型关系运算返回逻辑值sym(1)<2 %先转换为符号型再运算,返回符号型表达式isAlways(sym(1)<2) %用符号表达式的判断函数,返回逻辑值a<b %未知参数关系运算f=a<b %表达式赋值给f,以便进行运算isAlways(f) %警告并返回逻辑假,因a b都是未知参数isAlways(abs(a)>=0)isAlways(abs(a)*abs(b)>=abs(a*b))isAlways(abs(a)>=0 | 1>2) %第一项为真,取或运算后,结果为真isAlways(abs(a)>=0 & 1>2) %结果为假a | ba & b1.56 使用假设
1.符号变量使用假设
2.认识函数
设置assume
添加assumeAlso
显示assumptions
3.说明
在符号数学工具箱中,符号变量默认是复数变量
若要运算中不使用全体复数域,可以为变量添加假设指定范围
可以通过假设设置变量属于集合:整数、正数和实数
4.实例演示
%1_56%作者:freexynsyms xassumptions(x) %x不存在假设,属于复数域assume(x>=0) %设置假设assumptions(x) %查看假设% assume(x<=5)% assumptions(x) %会覆盖前面假设内容assumeAlso(x<=5) %追加假设assumptions(x)%% 设置x属于集合assume(x,'integer') %假设x属于整数assumptions(x)assume(x,'positive') %假设x为正数assume(x,'real') %假设x属于实数assumptions(x)%% 符号变量声明时同时设置假设sym('x')sym('x','real') %创建(声明)符号变量并假设属于实数assumptions(x)syms y positive %另一方法,创建(声明)符号变量并假设属于正数assumptions(y)assumptions %不给定参数时,会显示所有假设%% 设置假设的用法solve(y+1==0,y) %solve函数用来解方程,solve(x+1==0,x)
1.57 清除假设
1.清除假设和重置符号引擎
2.认识函数
reset
3.说明
符号变量和它们的假设是分开存储的
符号引擎工作空间通常是空的,Matlab工作空间记录符号变量并在需要时把他们传递到符号引擎工作空间进行计算
符号引擎空间存储了所有的关于符号变量的假设,这些假设会影响方程的求解、化简和变换
清除变量和清除假设是两个过程,运算结束后注意清除假设
4.实例演示
%1_57syms x y z positive %假设不存在工作区中,而在符号引擎工作空间中assumptions %查看所有假设whos %查看所有变量clear x %清除变量x,并不会清除掉假设assumptionswhos% assume(x,'clear') %清除假设:变量x是访问和调用x假设的桥梁,变量若被清除了,则无法访问或清除假设syms x %重新声明假设xassume(x,'clear')assumptionswhosassume([x y],'clear') %可同时清除多个假设,以数组形式assumptionsreset(symengine) %重制符号引擎工作空间:清理所有符号假设assumptions
1.58 可变精度算术
1.可变精度算术的应用
2.认识函数
vpa
3.说明
默认的,Matlab双精度浮点数使用16位数字精度
而符号数学工具箱的vpa函数,提供了无限大的可变精度
它默认使用32位数字精度,32位指的是有效数字的位数
4.实例演示
%1_58pi %默认双精度浮点型pi值,16位精度,默认short格式小数点后4位vpa(pi) %pi转换为可变精度数值,32位精度vpa(pi)+1 %先转换为可变精度数值再运算vpa(pi,100) %通过输入第2个参数指定精度vpa(sqrt(2),100)%% 让整个运行环境使用可变精度digits %获取当前运行环境的精度i=digits(100) %设置运行环境精度100,i返回设置前的精度值digitsvpa(pi) %显示pi的可变参数值,已变为100位vpa(pi)+1digits(32)digitsvpa(pi)
1.59 运算精度的选择
1.分别在以下三种算术条件下求sin(pi)的值
符号运算
可变精度运算
双精度浮点型运算
2.说明
2.1 符号算术
默认的,符号数学工具箱使用确切的数字,进行精确的符号计算
2.2 可变精度算术
是符号数学工具箱的功能,是符号计算的近似数值计算
通过控制数值显示的有效位数实现可变精度
默认32位,运算速度稍快,内存消耗量依赖于设定的精度
2.3 双精度浮点数算术
双精度浮点运算就是常规的Matlab数值计算
有舍入误差,精确到16位精度,运算速度最快,内存消耗最少
3.实例演示
%1_59a=sym(pi) %符号型sin(a)b=vpa(pi) %可变精度型sin(b)c=pi %双精度sin(c)
1.60 数值型的转换
1. 符号型和数值型之间的转换
2.说明
符号数学工具箱允许实现符号对象和常规Matlab数据类型的转换(如数值、字符等)
也可以借助符号变量的精度控制方法实现高精度的数值计算
数值型转换成符号型用sym,返回数值表达式的有理近似值
转换的原理是,通过匹配p/q, pπ/q, (p/q)^1/2,2^q和10^q(其中p和q是中等大小的整数)这样的形式来修正舍入误差(符号型为精确值)
3.实例演示
%1_600.3 %双精度sym(0.3) %转化为符号型sym(0.333333333333333333333333333) %转化为符号型a=1/6 %取小数后4位sym(a)a=pi/6sym(a)a=3^(1/3) %开立方近似值sym(a) %转换成符号型时,无法将近似值转换成精确值的a=3^(1/2) %开平方近似值sym(a) %可以转换成符号型,常规近似值能够精确转换回去sym(0.333333333333333333333333333) %转回符号型1/3sym('0.333333333333333333333333333') %变为符号型sym('x') %上式形式类似于创建符号变量
1.61 查找符号变量
1.查找符号变量
2.认识函数
symvar
3.说明
在符号表达式、符号函数和符号矩阵中查找符号变量
symvar函数自动把查找到的符号变量按字母顺须排列并输出
如果不是查找所有符号变量,那么靠近字母x的变量优先查找
特别的,对于符号函数,作为函数输入参数的符号变量优先查找
大多应用在当没有指定运算变量时,用于确定默认符号变量
4.实例演示
%1_61%freexynsyms a b n t x yf=sin(a*x+b)+x^n+log(y) %符号表达式symvar(f) %查找函数表达式f中的符号变量symvar(f,1) %优先查找靠近x的符号变量symvar(f,2) %查找2个符号变量f(t)=sin(a*t+b)+x^n+log(y) %符号函数symvar(f) %优先查找自变量,然后,查找靠近x的变量symvar(f,1)symvar(f,2)m=[a b n;t x y] %符号矩阵symvar(m)symvar(m,2) %查找2个靠近x的变量
1.62 变量替代
1.符号变量的代入和替代
2.认识函数
subs
3.说明
把符号变量替代为数值
把符号变量替代为矩阵
替换符号矩阵中的元素
4.实例演示
%1_62syms x yf=x+ysubs(f,x,1) %将符号表达式f中变量x替换为1subs(f,y,2)subs(f,1) %符号表达式f中默认符号变量替换为1,默认符号变量即x,或者靠近x最近的变量subs(f,x,y) %x替换为ysubs(f,[x y],[1 2]) %将x和y分别替换成1和2subs(f,x,[1 2]) %x替换为矩阵[1 2]m=[x y x;y x y] %2行3列的符号变量m(1,3)=sym('a') %下标索引替换法subs(m,x,sym('a')) %x替换为asubs(m,m(1,1),sym('a'))subs(m,x,x^2+x+1+y) %将x替换为符号表达式subs(m,x,[2*x 2*y])
1.63 长表达式的缩写
1.长表达式的缩写
2.认识函数
pretty
subexpr
3.说明
长表达式可能含有多个相同的子表达式
可以把这样的子表达式替换并缩写
pretty使用内部算法来选择要缩写的子表达式,可以嵌套缩写
subexpr函数只做一个子表达式的缩写,它不支持嵌套缩写
它默认使用变量sigma来缩写子表达式
4.实例演示
%1_63syms xs=(sqrt(5)+x)/2pretty(s)ss=(s^2+s+1)*(s^2+s-1)/((s^2-s-1)*(s^2-s+1)^2)pretty(ss) %嵌套缩写,将表达式中重复出现的子表达式缩写并拎出说明,子表达式符号无法更改[s1,t]=subexpr(ss,'t') %嵌套缩写,返回表达式名称可指定,且是单行表达
1.64 符号函数绘图
1.简单介绍符号函数、方程和表达式的绘图方法
2.认识函数
fplot
3.实例演示
%1_64% fplot(@sin) %函数句柄调用% fplot(sin) %直接传递函数名,报错% fplot(sin(x)) %函数名传入自变量,报错%%Matlab是一个综合运行环境,上述为Matlab中基础工作模块中的函数%% 符号函数工具箱中,也有fplot% Matlab会根据输入数值类型区别调用工具箱,输入数值型会调用基础模块,输入符号型调用符号函数工具箱syms xfplot(sin(x)) %符号工具箱中可以直接调用函数名称fplot(exp(x))fplot(sin(x)+x^4*log(x))fplot(sin(x)+x^4*log(x),[0 10]) %第二个参数指定绘图范围% f=x^2+x+1 %符号表达式% fplot(f) %传入符号表达式绘图f(x)=x^2+x+1 %符号函数fplot(f) %传入符号函数绘图
(本章结束,本书结束)
欢迎交流和留言
作者/旺旺/ UP:freexyn(邮箱:freexyn@163.com)
整理/注释:韩松岳(邮箱:colincooper@sina.com)
建议、提问、合作、供稿等,请发邮件。
附本书相关链接:
Matlab基础入门手册(第一章 入门)
Matlab基础入门手册(第二章 矩阵)
Matlab基础入门手册(第三章 运算符)
Matlab基础入门手册(第四章 数据类型)
Matlab基础入门手册(第五章 函数/脚本)
【本文】Matlab基础入门手册(第六章 符号函数)
End
标签: #matlab基本搜索过程 #matlab科学计数转化为小数 #matlab将计算结果转化为小数 #matlab怎么把小数变成整数 #matlab 小数变整数