登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書

『簡體書』MATLAB R2015b数值计算方法

書城自編碼: 2960844
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 张德丰
國際書號(ISBN): 9787302456797
出版社: 清华大学出版社
出版日期: 2017-02-01
版次: 1 印次: 1
頁數/字數: 401/633000
書度/開本: 32开 釘裝: 平装

售價:HK$ 100.1

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
唐代中层文官(中华学术·有道)
《 唐代中层文官(中华学术·有道) 》

售價:HK$ 117.6
像冠军一样学习:心理学中的高效学习法
《 像冠军一样学习:心理学中的高效学习法 》

售價:HK$ 70.8
逐利之网:从库克船长到淘金热的太平洋世界
《 逐利之网:从库克船长到淘金热的太平洋世界 》

售價:HK$ 105.6
实用妇科微创手术图谱:机器人与多孔单孔腹腔镜(原书第2版)
《 实用妇科微创手术图谱:机器人与多孔单孔腹腔镜(原书第2版) 》

售價:HK$ 225.6
梦遇 国风拟人插画绘制技法教程
《 梦遇 国风拟人插画绘制技法教程 》

售價:HK$ 155.8
制度变迁视角下的宋代经济社会
《 制度变迁视角下的宋代经济社会 》

售價:HK$ 117.6
生命进化史(增订版)
《 生命进化史(增订版) 》

售價:HK$ 357.6
巧克力的暗黑历史
《 巧克力的暗黑历史 》

售價:HK$ 117.6

 

編輯推薦:
本书是精通MATLAB丛书之一,全书基于MATLAB R2015a平台,以数值计算为主线、MATLAB为辅助工具有机结合进行讲述,实用性非常强,实现的方法也很多。作者还将理论与实践相交融,结合实际工作中的开发经验、心得体会,而且精心编写了240多个MATLAB数值计算方面的典型应用实例,供读者学习、开发时参考。本书提供所有程序源代码。精通MATLAB相关书目如下:(1)MATLAB 8.X实战指南R2014a中文版)(2)数字图像处理高级应用基于MATLAB和CUDA的实现(3)MATLAB通信系统建模与仿真(4)MATLAB R2015a数字图像处理(5)MATLAB R2015b数学建模(6)MATLAB R2015a小波分析(7)MATLAB R2015b神经网络技术(8)MATLAB R2015b*化计算(9)MATLAB R2015b概率与数理统计(10)MATLAB R2015b数值计算方法
內容簡介:
本书以MATLAB R2015b为平台,从实用的角度出发,由浅入深地全面介绍数学中的数值计算方法或基本实验数学内容。全书共分10章,分别介绍MATLAB编程基础、MATLAB可视化、符号与多项式运算、数据插值、数据逼近、数据估计与拟合、矩阵分解与线性方程组的求解、非线性方程与非线性方程组求解、数值积分、微分方程等内容。MATLAB以其独特的魅力,改变了传统数学实验的观念,从而成为数值计算和解决数学问题的有力工具,让读者领略到MATLAB的强大功能,其应用范围广泛。
本书作为数值计算方法或数学实验的学习用书,可以作为广大在校本科生和研究生基本数学实验的学习用书,也可以作为广大科研人员、学者、工程技术人员的参考用书。
目錄
目录

第1章MATLAB R2015b软件编程基础

1.1MATLAB的简概

1.1.1MATLAB发展史

1.1.2MATLAB产品说明

1.1.3MATLAB的特点

1.1.4MATLAB R2015b新功能

1.2MATLAB应用实例

1.3MATLAB工作环境

1.4MATLAB帮助使用

1.5MATLAB语言基本元素

1.5.1变量

1.5.2赋值语句

1.5.3矩阵及其元素表示

1.6矩阵运算

1.6.1矩阵的代数运算

1.6.2矩阵的关系运算

1.6.3矩阵的逻辑运算

1.7MATLAB的程序流程

1.7.1循环控制结构

1.7.2条件选择结构

1.8M文件编写

1.8.1脚本文件

1.8.2函数文件


第2章MATLAB R2015b可视化功能

2.1图形绘制的基本步骤

2.2二维绘图

2.2.1基本二维绘图

2.2.2格栅

2.2.3文字说明

2.2.4坐标轴设置

2.2.5图形迭绘

2.2.6子图绘制

2.2.7交互式绘图

2.2.8双坐标轴绘制

2.2.9函数绘图

2.2.10二维特殊图形

2.3三维绘图

2.3.1曲线图

2.3.2网格图

2.3.3曲面图

2.3.4光照模型

2.3.5等值线

2.3.6三维特殊图形

2.3.7视角设置

2.4四维绘图

2.5图形用户界面

2.5.1图形用户界面控件

2.5.2对话框对象

2.5.3界面菜单

2.6图形用户界面的应用


第3章符号与多项式运算

3.1符号及其运算

3.1.1字符型数据变量的创建

3.1.2符号型数据变量的创建

3.1.3符号计算的运算符与函数

3.1.4寻找符号变量

3.1.5符号精度计算

3.1.6显示符号表达式

3.1.7合并符号表达式

3.1.8展开符号表达式

3.1.9嵌套符号表达式

3.1.10分解符号表达式

3.1.11化简符号表达式

3.1.12替换符号表达式

3.1.13符号函数的操作

3.1.14符号微积分

3.1.15符号积分变换

3.2多项式及其运算

3.2.1多项式的求根

3.2.2多项式的四则运算

3.2.3多项式的导数

3.2.4多项式的积分

3.2.5多项式的估值

3.2.6有理多项式

3.2.7多项式的微分


第4章数据插值

4.1概述

4.2插值函数

4.2.1一维插值

4.2.2二维插值

4.2.3三维插值

4.2.4n维插值

4.2.5栅格数据插值

4.2.6三次样条插值

4.2.7分段三次插值

4.3拉格朗日插值法

4.4牛顿插值

4.5等距节点插值公式

4.6插值中的龙格现象

4.7Hermite插值

4.8艾特肯插值

4.9拉格朗日插值与埃尔米特插值的比较

4.10拉格朗日插值式与三次样条插值的比较


第5章数据逼近

5.1一般提法

5.2Chebshev最佳一致逼近

5.3正交多项式

5.4Legendre多项式

5.5Laguerre多项式

5.6Hermite多项式

5.7Pade逼近

5.8最佳平方逼近


第6章数据估计与拟合

6.1最小二乘估计

6.1.1线性最小二乘的基本公式

6.1.2最小二乘估计的原理

6.1.3超定方程组的最小二乘解

6.1.4最小二乘法估计的SVD分解

6.1.5最小二乘拟合

6.2GaussMarkov估计

6.3正交最小二乘拟合

6.4加权最小方差拟合

6.5指数拟合

6.6Kalman滤波

6.7人口增长模型

6.7.1Malthus人口模型

6.7.2Logistic人口模型


第7章矩阵分解与线性方程组的求解

7.1矩阵的分解

7.1.1LU分解

7.1.2Cholesky分解

7.1.3QR分解

7.1.4Schur分解

7.1.5奇异值分解

7.1.6特征值分解

7.1.7Hessenberg分解

7.2求逆法求解线性方程组

7.3分解法求解线性方程组

7.3.1LU分解法求解线性方程

7.3.2QR分解法求解线性方程组

7.3.3Cholesky分解法求解线性方程组

7.3.4SVD分解法求解线性方程组

7.4消去法求解线性方程组

7.4.1高斯消元法

7.4.2高斯列消去法

7.5迭代法求解线性方程组

7.5.1Jacobi迭代法

7.5.2GaussSeidel迭代法

7.5.3SOR迭代法

7.6梯度法

7.6.1共轭梯度法

7.6.2双共轭梯度法

7.6.3稳定双共轭梯度法

7.6.4共轭梯度的LSQR法

7.6.5复共轭梯度法

7.7残差法

7.7.1最小残差法

7.7.2标准最小残差法

7.7.3广义最小残差法

7.8综合实例分析


第8章非线性方程与非线性方程组求解

8.1MATLAB内置函数求解非线性方程

8.1.1roots函数求解非线性方程

8.1.2fzero函数求解非线性方程

8.1.3fsolve函数求解非线性方程组

8.1.4solve函数求解非线性方程

8.2数值法求解非线性方程

8.2.1二分法

8.2.2不动点迭代

8.2.3Aitken加速法

8.2.4Steffensen迭代法

8.2.5牛顿迭代法

8.2.6重根法

8.2.7割线法

8.2.8Halley迭代法

8.2.9抛物线法

8.3数值法求解非线性方程组

8.3.1高斯塞德尔迭代法

8.3.2不动点迭代法

8.3.3牛顿迭代法

8.3.4简化牛顿迭代法

8.3.5拟牛顿法

8.3.6最速下降法

8.3.7松弛迭代法


第9章数值积分

9.1中点公式

9.2插值型求积公式

9.3梯形求积公式

9.3.1梯形求积公式

9.3.2复合梯形公式

9.4Simpson公式

9.4.1Simpson求积公式

9.4.2复合Simpson公式

9.5NewtonCotes求积分公式

9.6复合抛物线求积公式

9.7自适应步长公式

9.7.1自适应步长梯形公式

9.7.2自适应步长Simpson公式

9.7.3Romberg求积公式

9.8高精度求积公式

9.8.1高斯型求积公式

9.8.2Lobatto求积公式

9.9曲线与曲面积分

9.9.1第一型曲线积分

9.9.2第二型曲线积分

9.9.3第一型曲面积分

9.9.4第二曲面积分

9.10数值积分的MATLAB实现


第10章微分方程

10.1微分方程的概述

10.2常微分方程

10.2.1单步法

10.2.2RungeKutta法

10.2.3单步法的收敛性

10.2.4单步法的稳定性

10.3线性多步法

10.3.1Adams外推公式

10.3.2Adams内插法

10.4微分方程的数值计算

10.4.1一阶微分方程组

10.4.2刚性方程组

10.4.3阻尼振动方程

10.4.4打靶法

10.5常微分方程的符号解法

10.6常微分方程的数值解

10.6.1初值问题求解

10.6.2延迟微分方程的求解

10.6.3常微分方程的边界问题

10.7偏微分方程

10.7.1定解问题

10.7.2差分解法

10.8偏微分方程的数值解

10.8.1求解偏微分方程组

10.8.2边界条件及网格化

10.8.3二阶偏微分方程


参考文献
內容試閱
前言
在信息时代,科学技术出现了前所未有的发展,其中数学应用的广泛性和深入性是现代科技发展的重要特征。数学与科学计算、理论研究、科学实验成为科学研究的三大支柱,计算机成为不可或缺的工具。现代数学是自然科学的基本语言,既是应用模式探讨现实世界的主要手段,也是现代工业技术和工程必不可少的工具。数学的学习对于人的素质的培养,至少应该在以下四个方面发挥作用。1 创造。数学能激发人的创造本能,它使人敢于突破常规,不迷信书本、权威;2 归纳。从众多的事物和现象中找出共同性,发掘体现本质内涵的抽象化的思想;3 演绎。从已知的事理中推知新的事实的逻辑性思想;4 数学建模。对现象和过程进行合理的抽象和量化,然后运用数学运算来进行模拟包括计算机模拟和验证的一种模式化思维。早在1959年,著名的数学家华罗庚教授就曾形象地概述了数学的各种应用: 宇宙之大,粒子之微,火箭之速,化工之巧,地球之变,生物之谜,日用之繁等各个方面,无处不有数学的重要贡献。时至今日,计算机计算速度的快速发展使得许多过去无法解决的问题有了解决的可能,大量新兴的数学方法正在被有效地采用,数学的应用范围急剧扩大。近年来,计算机技术的突破、计算机的日益普及、优秀数学应用软件的开发、应用数学方法的发展,使数学已经成为一种能够普通实施的技术。这使得在大学数学教学中对学生广泛进行数学建模能力的培养成为可能。在大学数学教学中,要培养学生的创造与数学实验能力,必须在尽可能少的学时条件下,结合已学过的数学知识,使学生掌握计算技术和应用数学方法。MATLAB作为当今最优秀的科技应用软件之一,以强大的科学计算与可视化功能、简单易用和开放式的扩展环境,特别是所附带的30多种面向不同领域的工具箱支持,在许多科学领域中成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。可以说,MATLAB不仅是一种编程语言,而且在广义上是一种语言开发系统。21世纪培养的各类专业技术人才,应具有将带有专业背景的实际问题建立数学模型的能力,这样才能在实际工作中发挥更大的创新性。将MATLAB与数学应用实践结合起来,探索大学数学教学对学生创造能力和数学建模能力的培养,是本书编写的主要目的。为了满足数学实验发展的需要,结合MATLAB的功能特点编写了本书,本书在以下几个方面做了努力: 由浅入深,详略得当。本书系统地介绍MATLAB编程基础、数学实验、数学实验应用领域等内容,着重介绍怎样利用MATLAB求数学实验等问题。 结构紧凑,分析全面。本书首先介绍MATLAB的使用,然后逐次深入介绍利用MATLAB解决数学实验问题,根据读者的学习习惯和内容的梯度合理安排,非常适合读者学习。 内容翔实,实用性强。书中每介绍一个概念或函数都给出相应的用法及实例进行说明,使读者能快速掌握MATLAB及MATLAB在数学实验中的应用。 图文并茂。对于程序的运行结果,本书给出大量的图形。本书不仅注重基础知识,而且非常注重实践,让读者能迅速掌握MATLAB在数学实验中的应用。通过本书的学习,读者不仅可以全面掌握MATLAB编程和开发技术,还可以快速提高分析和解决实际问题的能力,从而能够在最短的时间内,以最好的效率解决实际数学建模上遇到的问题,提升工作效率。全书分为10章,其各章内容概述如下。第1章介绍MATLAB R2015b软件编程基础,主要包括MATLAB R2015b的特点与安装、MATLAB工作环境、编程基础等内容。第2章介绍MATLAB的可视化功能,主要包括绘制二维图形、三维图形、四维图形及图形用户界面等内容。第3章介绍符号与多项式运算,主要包括符号及其运算、多项式及其运算等内容。第4章介绍数据插值,主要MATLAB的插值函数、拉格朗日插值法和牛顿插值等内容。第5章介绍MATLAB的数据逼近,主要包括Chebshev最佳一致逼近、Pade逼近、最佳平方逼近等内容。第6章介绍数据估计与拟合,主要包括最小二乘估计、GaussMarkov估计、正交最小二乘拟合等内容。第7章介绍矩阵分解与线性方程组的求解,主要包括矩阵的分解、线性方程组的求解等内容。第8章介绍非线性方程与非线性方程组求解,主要包括非线性方程的求解、非线性方程组的求解等内容。第9章介绍数值积分,主要包括中点公式、插值型求积公式、梯形求积公式、Simpson公式等内容。第10章介绍微分方程,主要包括常微分方程、微分方程的数值计算、常微分方程的符号解法、常微分方程的数值解等内容。本书主要由张德丰编写,此外参加编写的还有栾颖、周品、曾虹雁、邓俊辉、邓秀乾、邓耀隆、高泳崇、李嘉乐、李旭波、梁朗星、梁志成、刘超、刘泳、卢佳华、张棣华、张金林、钟东山、詹锦超、叶利辉、杨平和许兴杰。本书可以作为数值计算方法或数学实验的学习用书、广大在校本科生和研究生的基本实验数学内容的学习用书,也可以作为广大科研人员、学者、工程技术人员的参考用书。由于时间仓促,加之作者水平有限,错误和疏漏之处在所难免。在此诚恳地期望得到各领域的专家和广大读者的批评指正。作者2016年12月


第3章符号与多项式运算
在解决工程技术问题时,通常首先要建立问题的数学模型,然后设计合理的算法,并通过计算机计算得到的问题解。MATLAB提供了丰富的用于数值计算和处理的函数,并且具有良好的数值稳定性,计算速度快、精度高、效率高。3.1符号及其运算MATLAB中提供了强大的符号运算功能,可以按照推理解析的方法进行运算。MATLAB的符号运算的功能是建立在数学计算软件Maple基础上的。值得注意的是,在符号运算的整个计算过程中,所有的运算均是以符号进行的,即使以数字形式出现的量也是字符量。3.1.1字符型数据变量的创建在MATLAB工作空间中,字符型数据变量同数值型变量一样是以矩阵形式进行保存的。它的语法格式为
var=''expression''
【例31】字符型数据变量的创建。其MATLAB代码编程如下:
C=''China''
C =
China
A=''a b-c-d''
A =
a b-c-d
B=''MATLAB Mathwork''
B =
MATLAB Mathwork
Z=''1 sin23''
Z =
1 sin23
应用size函数可以检查前面几个字符变量的大小:
S=sizeC
S =
15
S2=sizeA
S2 =
17
S3=sizeB
S3 =
115
S4=sizeZ
S4 =
110
上例的结果充分说明了字符型变量是以矩阵的形式存储在MATLAB的工作空间内的。3.1.2符号型数据变量的创建作为符号对象的符号常量、符号变量、符号函数及符号表达式,可以使用sym及syms函数规定和创建,利用class函数可以测试建立的操作对象为何种操作对象类型及是否为符号对象类型。1. sym函数sym函数可以生成单个的符号变量,其调用格式为var = sym''var'': 创建一个符号变量var。var = sym''var'',set: 创建一个符号变量var,并设置符号对象的格式。 ''positive'': 限定var表示正的实型符号变量。 ''real'': 限定var为实型符号变量。 ''unreal'': 限定var为非实型符号变量。sym''var'',''clear'': 清除先前设置的符号变量var。Num = symNum: 将一个数值转换为符号形式。Num = symNum,flag: 将一个数值转换为符号形式。输入参数flag为转换的符合对象应该符合的格式类型,flag可以有如下选择。 ''r'': 最接近有理表示,为系数默认设置。 ''e'': 带估计误差的有理表示。 ''f'': 十六进制浮点表示。 ''d'': 最接近的十进制浮点精确表示。A = sym''A'',dim: 创建一个矢量或矩阵的符号变量。A = symA,set: 创建一个符号矩阵,set用于设置矩阵的维数。symA,''clear'': 清除前面已创建的符号矩阵A。farg1,,argN= sym''farg1,,argN'': 根据f指定的输入参数arg1,,argN创建符号对象farg1,,argN。【例32】利用sym函数创建符号对象。其MATLAB代码编程如下:
sqrt3
ans =
1.7321
a=sqrtsym3
a =
3^12
doublea
ans =
1.7321
sym3sym5
ans =
35
35 67
ans =
1.4571
sym3sym5 sym6sym7
ans =
5135
以上可以看出字符型变量与其他数据类型的区别。2. syms函数syms函数的功能比sym函数要更为强大,它可以一次创建任意多个符号变量。而且syms函数的使用格式也很简单,其调用格式为syms var1varN: 创建符号变量var1varN。syms var1varN set: 创建符号变量var1varN,并指定符号对象的格式。 ''positive'': 限定var表示正的实型符号变量。 ''real'': 限定var为实型符号变量。syms var1varN clear: 清除前面已指定的符号对象var1varN。syms farg1,,argN: 创建符号函数f,函数中包含符号变量arg1,,argN。【例33】利用syms函数创建符号表达式。其MATLAB代码编程如下:
syms st fx,y
fx,y = x 2*y
fx, y =
x 2*y
f1,2
ans =
5
whos
NameSizeBytes ClassAttributes
A1x714 char
B1x1530 char
C1x510 char
S1x216 double
S21x216 double
S31x216 double
S41x216 double
Z1x1020 char
a1x160 sym
ans1x160 sym
f1x160 symfun
s1x160 symfun
t1x160 sym
x1x160 sym
y1x160 sym
此外,利用sym及syms函数也可以创建符号矩阵。【例34】创建符号矩阵。其MATLAB代码编程如下:
clear all;
m1=[1,2 x,1;3-x,1,4 y;1,2 y,0]
m1 =
[1, x 2,1]
[ 3 - x,1, y 4]
[1, y 2,0]
m2=sym''[[1,2 x,1;3-x,1,4 y;1,2 y,0]]''
m2 =
[ [1, x 2, 1], [3 - x, 1, y 4], [1, y 2, 0]]
fx = [x x^3; x^2 x^4]
fx =
[x, x^3]
[ x^2, x^4]
f2
ans =
[ 2,8]
[ 4, 16]
y = f[1 2 3; 4 5 6]
y =
[2x3 sym][2x3 sym]
[2x3 sym][2x3 sym]
y{1}
ans =
[ 1, 2, 3]
[ 4, 5, 6]
y{2}
ans =
[1,4,9]
[ 16, 25, 36]
y{3}
ans =
[1,8,27]
[ 64,125,216]
3.1.3符号计算的运算符与函数MATLAB采用全新的数据结构、面向对象编程和重载技术,使得符号计算和数值计算在形式和风格上浑然统一,符号计算表达式的运算符和基本函数,无论在形状、名称上,还是在使用方法上,都与数值计算中的运算符和基本函数近乎相同。1. 算术运算符号1 运算符号 、-、*、\、、^分别实现符号矩阵的加法、减法、乘法、左除、右除和求幂运算。【例35】符号的算术运算。其MATLAB代码编程如下:
clear all;
A=sym''[x^2 3; 4*x cosx]'';
B=sym''[1x^2 2*x;3 x^2 x]'';
C=A B%符号矩阵的加法运算
C =
[ 1x^2 x^2,2*x 3]
[4*x 3, x cosx x^2]
D=A-B%符号矩阵的减法运算
D =
[ x^2 - 1x^2,3 - 2*x]
[4*x - 3, cosx - x - x^2]
E=A*B%符号矩阵的乘法运算
E =
[10,2*x^3 3*x^2 3*x]
[ 3*cosx 4x, 8*x^2 cosx*x^2 x]
F=AB%符号矩阵的右除运算
F =
[x*x^4 x^3 - 9- 6*x^2 x 1,-2*x^5 - 3x*- 6*x^2 x 1]
[ 4*x^3 - 3*x*cosx 4*x^4- 6*x^2 x 1, cosx - 8*x^4x*- 6*x^2 x 1]
J=A\B%符号矩阵的左除运算
J =
[ cosx - 9*x^2x^4*cosx - 12*x^3, -3*x - 2*cosx 3x*cosx - 12]
[3*x^3 - 4x^3*cosx - 12*x^2,x*x^2 x - 8x*cosx - 12]
K=A^2%符号矩阵的幂运算
K =
[x^4 12*x, 3*cosx 3*x^2]
[ 4*x*cosx 4*x^3,cosx^2 12*x]
M=expB%符号的指数运算
M =
[ exp1x^2,exp2*x]
[exp3, expx^2 x]
2 运算符号.*、.\、.、.^分别实现元素对元素的数组乘法、左除、右除和求幂运算。【例36】符号矩阵的点乘也点除运算。其MATLAB代码编程如下:
clear all;
syms a b c d e f g h;
A=sym''[a,b;c,d]''
A =
[ a, b]
[ c, d]
B=sym''[e,f;g,h]''
B =
[ e, f]
[ g, h]
R=A*B
R =
[ a*e b*g, a*f b*h]
[ c*e d*g, c*f d*h]
R2=A.*B
R2 =
[ a*e, b*f]
[ c*g, d*h]
R3=A.B
R3 =
[ ae, bf]
[ cg, dh]
R4=A.\B
R4 =
[ ea, fb]
[ gc, hd]
3 运算符号''、.''分别实现符号矩阵的共轭转置和非共轭转置。【例37】符号矩阵的转置运算。其MATLAB代码编程如下:
syms a b c d;
A=sym''[a b;c d]'';
R1=A''
R1 =
[ conja, conjc]
[ conjb, conjd]
R2=A.''
R2 =
[ a, c]
[ b, d]
2. 关系运算符号与数值计算中的关系运算符号相区别的是,符号计算中的关系运算符只有以下两种。1 运算符号==表示对运算符两边的符号对象进行相等的比较,返回值为1表示相等,返回值为0表示不相等。2 运算符号~=表示对运算符号两边的符号对象进行不相等的比较,返回值为1表示不相等,返回值为0表示相等。3. 复数函数复数函数包括复数的共轭conj、实部real、虚部imag和模abs函数,在数值计算和符号计算中用法都是一样的。4. 矩阵代数函数在符号计算中,常用的矩阵代数函数包括: diag函数、triu函数、tril函数、inv函数、det函数、rank函数、rref函数、null函数、colspace函数、poly函数、expm函数、eig函数和svd函数。除了svd函数的使用方法有所不同外,其余函数的用法与数值计算一致。【例38】符号矩阵的SVD分解。其MATLAB代码编程如下:
clear all;
f=sym''[1 2 1;2 3 5;1 7 9]''
f =
[ 1, 2, 1]
[ 2, 3, 5]
[ 1, 7, 9]
[U,S,V]=svdf
U =
[ 0.16282766200529790566464473003047, 0.36344034057570734984922459430431, 0.91727764135407896387284636832453]
[ 0.46068074153566191523968894576701, 0.79411905473576600135312190977843,-0.39641919893431769076779069408513]
[ 0.87250238215379167379020797827246, -0.4871201553495680712962919278634,0.038125416563908403817930647866644]
S =
[ 13.091328222514682899973119408907, 0,0]
[ 0, 1.4959270998972672350546531909101,0]
[0, 0, 1.1744477349731254100487373117268]
V =
[ 0.14946470625228561177821440226895,0.9790305254836614659283923986005, 0.13841796038124413606394471745808]
[ 0.59697641758407588719014824902336, -0.2009477882370790108765833185168, 0.77668471289906891033206501338361]
[ 0.7882128255956008130632759591861, -0.033454694346410448946610710523496,-0.61449273794959304507931576957863]
syms x y u v;
A=sym''[x,y;u,v]''
A =
[ x, y]
[ u, v]
[U,S,V]=svdA
错误使用 symsvd line 84
Input arguments must be convertible to floating-point numbers.
提示: 符号工具箱仅支持元素为符号常量的符号矩阵的SVD分解。3.1.4寻找符号变量MATLAB中的符号对象可以表示符号常量和符号变量。findsym函数可以帮助用户查找一个符号表达式中的符号变量。函数的调用格式为findsyms: 寻找符号表达式s中所有的符号变量。findsyms,n: 寻找符号表达式中n个在字母表中与x最接近的变量。【例39】利用findsym寻找符号表达式中的变量。其MATLAB代码编程如下:
clear all;
syms a b x y;
f=a^2 6*b cosx-2 log5 y 4-5i%符号表达式
f =
6*b cosx - 2 logy 5 a^2 4 - 5*i
findsymf%查找符号变量
ans =
a,b,x,y
findsymf,2
ans =
x,y
findsymf,3
ans =
x,y,b
findsymf,4
ans =
x,y,b,a
3.1.5符号精度计算符号计算的一个非常显著的特点是: 由于计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。如果希望计算结果精确,那么就可以牺牲计算时间和存储空间,用符号计算来获得足够高的计算精度。在符号运算工具箱中有3种不同类型的算术运算。 数值类型: MATLAB的浮点算术运算。 有理数类型: Maple的精度符号计算。 VPA类型: Maple的任意精度算术运算。这3种运算各有利弊,在计算时应根据计算精度、时间、存储空间的要求进行合理的选择。浮点运算是最快的运算,需要的计算机内存最小,但是结果不精确。MATLAB双精度数输出的数字位数由format函数控制,但它内部采用的是由计算机硬件提供的8位浮点数的表示方法。符号运算中的有理数算术运算所需要的时间和内存开销都是很大的。只要有足够的内存和足够长的计算时间,总能产生精确的结果。一般符号计算的结果都是字符串,特别是一些符号计算结果从形式上来看是数值,但从变量类型上看,它们仍然是字符串。要从精确解中获得任意精度的解,并改变默认精度,把任意精度符号解变成真正的数值解,就如下几个函数。1 digits函数digits函数用于设定所用数值的精度。函数的调用格式为digitsd: 符号对象的近似解的精度变为d位有效数字,参数d的默认值为32位。d = digits: 得到当前采用的数值计算的精度。【例310】利用digits函数进行精度控制。其MATLAB代码编程如下:
clear all;
digits%默认精度
Digits = 32
a1=sym1.6,''d''
a1 =
1.6000000000000000888178419700125
digits42%设置精度为42
digits
Digits = 42
a2=sym1.6,''d''
a2 =
1.60000000000000008881784197001252323389053
在程序中,利用digits函数进行数值精度的设置。系统默认值为32位,程序中将其改为42位,并进行输出。2 vpa函数vpa函数用于进行可控精度运算。函数的调用格式为R = vpaA: 计算符号矩阵A的近似解,精度为函数digitsd指定的有效位数。R = vpaA,d: 计算符号矩阵A的近似解,有效位数由参数d指定。【例311】利用函数vpa进行精度控制。其MATLAB代码编程如下:
clear all;
a=vpahilb2%系统默认
a =
[ 1.0, 0.5]
[ 0.5, 0.33333333333333333333333333333333]
b=vpahilb3,6 %设置为6位
b =
[ 1.0, 0.5, 0.333333]
[ 0.5, 0.333333,0.25]
[ 0.333333, 0.25,0.2]
c=vpapi%默认
c =
3.1415926535897932384626433832795
c=vpapi,88 %设置为88位
c =
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628035
3.1.6显示符号表达式在符号表达式的显示过程中,默认采用MATLAB式的显示。除了默认的显示方式外,MATLAB符号工具箱中提供了显示函数pretty,允许用户将符号表达式显示为符合一般数学表达习惯的数学表达式。prettyX: 将符号表达式用书写方式显示出来,使用默认的宽。【例312】利用pretty函数显示符号表达式。其MATLAB代码编程如下:
syms x
s = solvex^4 2*x 1, x,''MaxDegree'',3;
prettys
-1\
||
|21|
|#2----- -|
|9 #23|
||
|1#21 |
|-----#1--- - |
| 9 #223 |
||
|1#21 |
| #1 ------- -|
\9 #223
where
2\
sqrt3|---- #2|1i
\9#2
#1==----------------
2
sqrt11sqrt2717\13
#2 == | -----------|
\2727
3.1.7合并符号表达式在MATLAB中,提供了collect函数用于实现将符号表达式中的同类项进行合并。函数的调用格式为R = collectS: 将表达式S中相同的次幂的项合并,系统默认为按照x的相同次幂项进行合并。R = collectS,v: 将表达式S按照v的相同次幂项进行合并。输入参数S可以是一个表达式,也可以是一个符号矩阵。【例313】利用collect函数对符号表达式进行合并同类项。其MATLAB代码编程如下:
syms x y
collectexpx x*x 2
ans =
x^2 expx 2*x 2*expx
collectx^2*y y*x - x^2 - 2*x, x
ans =
y - 1*x^2 y - 2*x
collectx^2*y y*x - x^2 - 2*x, y
ans =
x^2 x*y - x^2 - 2*x
collect2*x*i - 3*i*y, i
ans =
2*x - 3*y*1i
collectx*pi*pi - y x*pi i 3*pi*y, pi
ans =
x*pi^2 x 3*y - x*y*pi x*1i
3.1.8展开符号表达式在MATLAB中,提供了expand函数用于实现将符号表达式展开。函数的调用格式为expandS: 表达式S中如果包含函数,MATLAB会利用恒等式变形将其写成相应的形式。这个展开函数主要用于多项式、三角函数、指数函数和对数函数。默认x为第一变量。expandS,Name,Value: 设置展开式的参数名Name及其对应的参数值Value。【例314】利用expand函数对符号表达式进行展开。其MATLAB代码编程如下:
syms x y a b c t
expandx - 2*x - 4
ans =
x^2 - 6*x 8
expandcosx y
ans =
cosx*cosy - sinx*siny
expandexpa b^2
ans =
expa^2*expb^2*exp2*a*b
expand[sin2*t, cos2*t]
ans =
[ 2*cost*sint, 2*cost^2 - 1]
expandsin3*x - 1^2, ''ArithmeticOnly'', true
ans =
sin3*x^2 - 2*sin3*x 1
expandloga*bc^2
ans =
loga^2*b^2c^2
expandloga*bc^2, ''IgnoreAnalyticConstraints'', true
ans =
2*loga 2*logb - 2*logc
3.1.9嵌套符号表达式在MATLAB中,提供了horner函数实现对符号表达式进行嵌套。函数的调用格式为R=hornerP: P为待嵌套的符号表达式,R为嵌套后的符号表达式。【例315】利用horner函数实现符号表达式的嵌套。其MATLAB代码编程如下:
syms x y
hornerx^3 - 6*x^2 11*x - 6
ans =
x*x*x - 6 11 - 6
horner[x^2 x; y^3 - 2*y]
ans =
x*x 1
y*y^2 - 2
3.1.10分解符号表达式在MATLAB中,提供了factor函数用于实现符号表达式的分解。函数的调用格式为factorX: X为多项式或多项式矩阵,系数是有理数,MATLAB会将表达式X表示成为有理数的低阶多项式相乘的形式; 如果多项式X不能进行在有理数范围内因式分解,则会返回X本身。【例316】利用factor对符号表达式进行分解。其MATLAB代码编程如下:
syms x y
factorx^3-y^3
ans =
x - y*x^2 x*y y^2
syms a b
factor[a^2 - b^2, a^3 b^3]''
ans =
conja - conjb*conja conjb
conja conjb*conja^2 conjb^2 - conja*conjb
factorsym''12345678901234567890''
ans =
2*3^2*5*101*3541*3607*3803*27961
在程序中,利用factor函数进行符号多项式的因式分解,系数按照从小到大的顺序进行排列。3.1.11化简符号表达式MATLAB根据一定的规则对符号表达式进行简化,简化的函数为simplify。函数的调用格式为simplifyS: 输入参数S为符号表达式或符号矩阵。simplifyS,Name,Value: 指定一个符号表达式的属性名及对应的属性值,并对表达式或矩阵进行化简。【例317】利用simplify函数对符号表达式或矩阵进行化简。其MATLAB代码编程如下:
clear all;
%对符号表达式进行化简
syms x a b c
simplifysinx^2 cosx^2
ans =
1
simplifyexpc*logsqrta b
ans =
a b^c2
%对符号矩阵进行化简
simplify[x^2 5*x 6x 2, sinx*sin2*x cosx*cos2*x;exp-x*i*i2 - expx*i*i2, sqrt16]
ans =
[ x 3, cosx]
[ sinx,4]
%使用IgnoreAnalyticConstraints规则对符号表达式进行化简
s = logx^2 2*x 1 - logx 1*sqrtx^2;
simplifys
ans =
-logx 1 - logx 1^2*x^2^12
simplifys, ''IgnoreAnalyticConstraints'', true
ans =
x*logx 1
f = exp-x*i*i2 - expx*i*i2exp-x*i2 expx*i2;
simplifyf
ans =
-expx*2*i*i - iexpx*2*i 1
f = expx exp-x*i2 - expx*i2*i2 - exp- x - exp-x*i2 expx*i2*i2;
simplifyf, ''Criterion'',''preferReal'', ''Steps'', 100%化简100步
ans =
cossinx*sinhx*i sinsinx*coshx
3.1.12替换符号表达式在处理一些结构较为复杂、变量较多的数学模型时,引入一些新的变量进行代换,以简化其结果,从而达到解决问题的目的,这种方法称为变量代换法。例如,求不定积分1tt7 2dt,设x=1t,则
1tt7 2dt=-x61 2x7dx=-114ln|1 2t7| c
=-114ln|2 t7| 12ln|t| c
变量代换法是一种非常有效的解题方法,尤其是处理一些复杂的不等式问题时,效果明显。合理代换往往能简化题目的信息,凸显隐含条件,沟通量与量之间的关系,对发现解题思路、优化解题过程有着重要的作用。MATLAB提供了subs函数和subexpr函数进行变量代换或者叫作符号表达式的替换。subs函数利用符号变量或符号表达式替换目标符号表达中的符号变量包括符号常量; subexpr函数利用符号变量替换目标符号表达式的某个子符号表达式。1. subs函数subs函数可以用指定符号替换符号表达式中的某一特定符号。函数的调用格式为R = subsS: 用函数中的值或MATLAB工作区间的值替代符号表达式S中的所有变量,如果没有指定某符号变量的值,则返回值中的该符号变量不被替换。R = subsS, new: 用新的符号变量new代替原来的符号表达式S中的默认变量。R = subsS, old, new: 用新的符号变量new替换原来符号表达式S中的变量old,当new是数值形式的符号时,实际上用数值替换原来的符号计算表达式的值,结果仍为字符串形式。【例318】利用subs函数对符号表达式进行替换。其MATLAB代码编程如下:
syms a b;
subsa b, a, 4
ans =
b 4
syms a b;
subscosa sinb, {a, b}, {sym''alpha'', 2}
ans =
sin2 cosalpha
syms t;
subsexpa*t, ''a'', -magic2
ans =
[1expt, 1exp3*t]
[ 1exp4*t, 1exp2*t]
syms x y;
subsx*y, {x, y}, {[0 1; -1 0], [1 -1; -2 1]}
ans =
0-1
20
2. subexpr函数subexpr函数将表达式中重复出现的字符串用变量代换。函数的调用格式为[Y,SIGMA] = subexprX,SIGMA: 指定用变量SIGMA的值,来代替符号表达式中重复出现的字符串。进行符号替换后,函数的返回值为Y,被替换的符号变量由SIGMA返回。[Y,SIGMA] = subexprX,''SIGMA'': 函数中输入参数SIGMA为字符或字符串,用来替换符号表达式中重复出现的字符串。进行符号替换返回值为Y,被替换的符号变量由SIGMA返回。【例319】利用subexpr函数对符号表达式进行替换。
syms a b c d x
solutions = solvea*x^3 b*x^2 c*x d == 0, x, ''MaxDegree'', 3;
[r, sigma] = subexprsolutions
r = sigma^13 - b3*a - - b^29*a^2 c3*asigma^13
- b^29*a^2 c3*a2*sigma^13 - sigma^132 - 3^12*sigma^13 - b^29*a^2 c3*asigma^13*1i2 - b3*a
- b^29*a^2 c3*a2*sigma^13 - sigma^132 3^12*sigma^13 - b^29*a^2 c3*asigma^13*1i2 - b3*a
sigma =
d2*a b^327*a^3 - b*c6*a^2^2 - b^29*a^2 c3*a^3^12 - b^327*a^3 - d2*a b*c6*a^2
solutions = solvea*x^2 b*x c == 0, x
solutions =
-b b^2 - 4*a*c^122*a
-b - b^2 - 4*a*c^122*a
[abbrSolutions,s] = subexprsolutions,s
abbrSolutions =
-b s2*a
-b - s2*a
s =
b^2 - 4*a*c^12
3.1.13符号函数的操作MATLAB具有对符号表达式执行更高级运算的功能。MATLAB提供了把两个符号函数复合成一个符号函数的功能函数,同时也提供了对符号函数求函数表达式的逆功能函数等。1. compose函数在MATLAB中,提供了compose函数用于将符号表达式的复合函数运算。函数的调用格式为composef,g: 返回函数当f=fx和g=gy时的复合函数fgy。其中,x为由函数findsym确定的f的符号变量,y为由函数findsym确定的g的符号变量。composef,g,z: 返回f=fx和g=gy时的复合函数fgz,返回的函数以z为自变量。例如,如果f=sinxt,那么函数composef,g,z将返回singzf。composef,g,x,z: 返回复合函数fgz,x为函数f的独立变量。例如,如果f=sinxt,那么函数composef,g,t,z将返回singzf,并且函数composef,g,t,z将返回sinxgz。composef,g,x,y,z: 返回复合函数fgz,并且x为函数f的独立变量,y为函数g的独立变量。例如,如果y=sinxt,并且g=cosyu,那么函数composef,g,x,y,z将返回sincoszut,并且函数composef,g,x,u,z将返回sincosyzt。【例320】利用compose函数对符号表达式进行复合操作。其MATLAB代码编程如下:
clear all;
syms x y z t u
f = 11 x^2;
g = siny;
h = x^t;
p = exp-yu;
a = composef,g
a =
1siny^2 1
b = composef,g,t
b =
1sint^2 1
c = composeh,g,x,z
c =
sinz^t
d = composeh,g,t,z
d =
x^sinz
e = composeh,p,x,y,z
e =
exp-zu^t
f = composeh,p,t,u,z
f =
x^exp-yz
2. finverse函数在MATLAB中,提供了finverse函数用于实现符号表达式的反函数操作。函数的调用格式为g = finversef: 将会计算输入参数f的反函数,其中f为符号表达式,以默认的变量为自变量。函数的返回值g也是一个符号表达式,如果默认的变量为x,则满足gfx=x。g = finversef,var: 输入参数var为一个符号变量,是函数f中的变量,且该函数的返回值g是以var为自变量。符号表达式g必须满足gfvar=var。【例321】利用finverse函数求符号表达式的反函数。其MATLAB代码编程如下:
clear all;
syms t x
f1=finverselogt%反函数,以默认x为自变量
f1 =
expt
f2=finversecos2*t 1
f2 =
acost - 12
f3=finverseexpt-2*x,t%以t为自变量
f3 =
2*x logt
f4=finverseexpx - 2*t, x
f4 =
2*t logx
提示: 当函数finverse求得的解不唯一时,MATLAB会给出警告信息。
3.1.14符号微积分微积分运算在数学计算中的重要性是不言而喻的,整个高等数学就是建立在微积分运算的基础上的。在符号数学工具箱中提供了一些常用的函数来支持具有重要基础意义的微积分运算,涉及微分、求极限、积分、级数求和泰勒级数等。1. 符号表达式的极限求微分的基本思想是当自变量趋近某个值时,求函数值的变化。无穷逼近是微积分的一个基本思想,求极限是非常普遍的。事实上,导数就是由极限给出的:
fx=limh0fx h-fxh
在MATLAB中,用limit函数来求表达式的极限。函数的调用格式为limitexpr, x, a: 求符号函数exprx的极限值。即计算当变量x趋近于常数a时,exprx函数的极限值。limitexpr, a: 求符号函数exprx的极限值。由于没有指定符号函数exprx的自变量,则使用该格式时,符号函数exprx的变量为函数findsymexpr确定的默认自变量,即变量x趋近于a。limitexpr: 求符号函数exprx的极限值。符号函数exprx的变量为函数findsymexpr确定的默认变量; 没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。limitexpr, x, a, ''left'': 求符号函数expr的极限值。left表示变量x从左边趋近于a。limitexpr, x, a, ''right'': 求符号函数expr的极限值。right表示变量x从右边趋近于a。函数limit要求第一个输入变量为符号函数,limit不支持符号函数的句柄,但是对符号函数句柄f,可以将fx作为输入变量。【例322】利用limit函数求符号表达式的极限。其MATLAB代码编程如下:
clear all;
syms x;
f1=symcosx sinx-xx
f1 =
cosx - x sinxx
limitf1,x,inf
ans =
-1
limitf1,x,-inf
ans =
-1
limitf1,x,0
ans =
NaN
f2=sym''sinx-xx''
f2 =
-x - sinxx
limitf2,x,0,''right''
ans =
0
limitf2,x,0,''left''
ans =
0
2. 符号表达式的微分MATLAB提供的函数可以完成一元及多元符号表达式函数的各阶微分,功能函数diff可以完成一元或多元函数的任意阶数的微分。对于自变量的个数多于一个的符号矩阵,微分为Jocabian矩阵,采用jacobian函数实现微分。1 diff函数当创建符号表达式后,就可以利用diff对其进行微分运算了。函数的调用格式为diffexpr: 没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式expr求一阶导数。diffexpr,v: 指定符号表达式的变量为v。diffexpr, sym''v'': 计算符号表达式expr的一阶导数,以符号变量v为自变量。diffexpr,n: 对符号表达式expr求n阶导数。diffexpr,v,n: 计算符号表达式expr的n阶导数,以符号变量v为自变量。【例323】求函数fx=e-2xcos3x的4阶导数。其MATLAB代码编程如下:
syms x
f=exp-2*x*cos3*x^0.5
g=difff,4 %求复合函数的3阶导数
运行程序,输出如下:
f =
exp-2*x*cos3*x^12
g =
16*exp-2*x*cos3*x^12 48*exp-2*x*sin3*x^12x^12-54*exp-2*x*cos3*x^12x-9*exp-2*x*sin3*x^12x^32-35116*exp-2*x*cos3*x^12x^2-98*exp-2*x*sin3*x^12x^52-13516*exp-2*x*cos3*x^12x^3 4516*exp-2*x*sin3*x^12x^72
再执行以下代码:
prettyg
运行程序,输出如下:
12
12 exp-2 x sin3 x
16 exp-2 x cos3 x 48 ---------------------
12
x
1212
exp-2 x cos3 xexp-2 x sin3 x
- 54 --------------------- - 9 ---------------------
x32
x
1212
351 exp-2 x cos3 xexp-2 x sin3 x
--------------------------98---------------------
16252
xx
1212
135 exp-2 x cos3 x 45 exp-2 x sin3 x
------------------------- ------------------------
163 1672
xx
2 jacobian函数在MATLAB中,提供了jacobian函数用于求多元函数的导数。函数的调用格式为jacobianf,v: 计算数量或向量f对于向量v的Jacobian矩阵。函数的返回值第i行第j列的数为dfidvj。当f为数量时,该函数返回f的梯度。此外,参数v可以是数量,jacobianf,v等价于difff,v。【例324】利用jacobian函数求多元函数的导数。其MATLAB代码编程如下:
syms x y z
f = [x*y*z; y; x z];
v = [x, y, z];
R = jacobianf, v
R =
[ y*z, x*z, x*y]
[0,1,0]
[1,0,1]
b = jacobianx z, v
b =
[ 1, 0, 1]
3. 符号表达式的积分数学中,积分和微分是一对互逆的运算。符号数学工具箱中提供了int函数来求符号表达式的积分,函数的调用格式为intf: 没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式f求不定积分。intf,v: 以v为自变量,对被积函数或符号表达式f求不定积分。intf, a, b: 符号表达式采用默认变量,该函数求默认变量从a到b时符号表达式f的定积分数值。如果f为符号矩阵,则积分对各个元素分别进行积分。intf, v, a, b: a、b分别表示定积分的下限和上限。该函数求被积函数f在区间[a, b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷inf。当函数f关于变量x在闭区间[a, b]上可积时,函数返回一个定积分结果。当a、b中有一个是inf时,函数返回一个广义积分。当a,b中有一个是符号表达式时,函数返回一个符号函数。【例325】利用int函数对符号表达式进行积分运算。其MATLAB代码编程如下:
syms a x t z
int-2*x1 x^2^2
ans =
1x^2 1
intx1 z^2, x
ans =
x^22*z^2 1
intx1 z^2, z
ans =
x*atanz
intx*log1 x, 0, 1
ans =
14
int2*x, [sint, 1]
ans =
cost^2
int[expt, expa*t; sint, cost]
ans =
[ expt, expa*ta]
[ -cost, sint]
4. 级数求和在MATLAB中提供了symsum函数用于求符号表达式的和。其调用格式为:F = symsumf,k,a,b: 求符号表达式f中变量k从a变到b时的有限和。F = symsumf,k: 计算符号表达式f中指定变量为k的有限项和。【例326】利用symsum函数对符号表达式进行级数求和。其MATLAB代码编程如下:
syms k x
S1 = symsumk^2, k, 0, 10
S2 = symsum1k^2, k, 1, Inf
S3 = symsumx^kfactorialk, k, 0, Inf
S1 =
385
S2 =
pi^26
S3 =
expx
S4=symsumk, k
S5=symsum1k^2, k
S4 =
k^22 - k2
S5 =
-psi1, k
5. 泰勒级数在MATLAB中,提供了taylor函数用于求符号表达式的泰勒级数展开式。函数的调用格式为taylorf,var: 指定符号变量为var,求Maclaurin多项式。taylorf,var,a: 返回符号表达式f中的指定符号自变量var若表达式f中有多个变量时的n-1阶的Maclaurin多项式即在零点附近v=0近似式,其中var可以是字符串或符号变量。taylor,Name,Value: 指定一个或多个属性名及其属性值,实现对符号表达式进行求泰勒级数。【例327】利用taylor函数对符号表达式进行泰勒级展开式。其MATLAB代码编程如下:
syms x
taylorexpx
taylorsinx
taylorcosx
ans =
x^5120 x^424 x^36 x^22 x 1
ans =
x^5120 - x^36 x
ans =
x^424 - x^22 1
taylorlogx, x, ''ExpansionPoint'', 1
ans =
x - x - 1^22 x - 1^33 - x - 1^44 x - 1^55 - 1
tayloracotx, x, 1
ans =
pi4 - x2 x - 1^24 - x - 1^312 x - 1^540 12
taylor1expx - expx 2*x, x, ''Order'', 5
ans =
-x^33
taylor1expx - expx 2*x, x, ''Order'', 5, ''OrderMode'', ''relative''
ans =
- x^72520 - x^560 - x^33
3.1.15符号积分变换在数学中,为了把较复杂的运算转换为比较简单的运算,经常采用一种变换手段。例如数量的乘积或商可以变换成对数的和或差,然后再取反对数即可求得原来数量的乘积或商。这一变换方法的目的就是把比较复杂的乘除运算通过对数变换转换为简单的加减运算。
所谓积分变换,就是通过积分运算,把一类函数A变换成另一类函数B,函数B一般是含有参量的积分: baftKt,dt。这一变换的目的就是把某函数类A中的函数ft通过积分运算变换成另一类函数B中的函数F。这里Kt,是一个确定的二元函数,叫作积分变换的核。当选取不同的积分区间与变换核时,就成为不同的积分变换。ft叫作原函数,F叫作象函数。在一定条件下,原函数与象函数两者一一对应,成为一个积分变换对。变换是可逆的,由原函数求象函数叫作正变换,反之则是逆变换。
积分变换的理论与方法,在自然科学与工程技术的各个领域中都有着极广泛的应用,成为不可缺少的运算工具。变换的使用,会极大地简化计算,有的变换则为开创新的学科奠定了基础。1. 傅里叶变换及反变换时域中的ft与它在频域中的Fourier变换F之间存在如下关系:
F=-fte-jtdt
ft=12-Fejtd
由计算机完成这种变换的途径有两条: 一是直接调用fourier和ifourier进行; 二是根据上面的定义,利用积分函数int实现。fourier和ifourier函数的调用格式为Fw=fourierf, t, w: 求时域上函数f的傅里叶变换Fw,其中f是以t为自变量的时域函数,Fw是以圆频率w为自变量的频域函数。f=ifourierFw,w,t: 求频域上函数Fw的傅里叶反变换f,其中f是以t为自变量的时域函数,Fw是以圆频率w为自变量的频域函数。【例328】实现傅里叶变换及其反变换。其MATLAB代码编程如下:
%傅里叶变换
syms w x y z a b c d t
f = exp-x^2;
fourierf, x, y
ans =
pi^12*exp-y^24
f2 = exp-x^2*exp-t^2;
fourierf2, y
ans =
pi^12*exp-t^2*exp-y^24
fourierf2
ans =
pi^12*exp-t^2*exp-w^24
fouriert^3, t, w
ans =
-pi*dirac3, w*2i
fourierx,[x, w; y, z],[a, b; c, d]
ans =
[ pi*dirac1, a*2i, 2*pi*x*diracb]
[ 2*pi*x*diracc, 2*pi*x*diracd]
%傅里叶反变换
F = sqrtsympi*exp-y^24;
ifourierF, y, x
ans =
exp-x^2
F = exp-w^24*a^2;
ifourierF, t
ans =
exp-a^2*t^22*pi^12*14*a^2^12
ifourier[expx, 1; siny, i*z],[w, x; y, z],[a, b; c, d]
ans =
[ expx*diraca,diracb]
[ diracc - 1*1i2 - diracc 1*1i2, dirac1, d]
2. 拉普拉斯变换及反变换Laplace变换及其反变换的定义为
Fs=0fte-stdt
ft=12jc c-Fsestds
与Fourier变换相似,Laplace变换与反变换的实现也有两条途径: 直接调用laplace和ilaplace函数; 或者根据上面的定义,利用积分函数int实现。比较而言,直接使用laplace和ilaplace函数实现变换较为简单。函数的调用格式为Fs=laplacef,trans_var,eval_point: 求时域上函数f的拉普拉斯变换Fs,其中f是以trans_var为自变量的时域函数,Fs是以复频率eval_point为自变量的频域函数。f=ilaplaceFs,trans_var,eval_point: 求频域上函数Fs的拉普拉斯反变换f,其中f是以trans_var为自变量的时域函数,Fs是以复频率eval_point为自变量的频域函数。【例329】实现拉普拉斯变换及其反变换。其MATLAB代码编程如下:
%Laplace变换
syms a b c d w x y z t s
f = 1sqrtx;
laplacef, x, y
ans =
pi^12y^12
f = exp-a*t;
laplacef, y
ans =
1a y
laplacediract - 3, t, s
ans =
exp-3*s
laplace[expx, 1; siny, i*z],[w, x; y, z],[a, b; c, d]
ans =
[ expxa,1b]
[ 1c^2 1, 1id^2]
%Laplace反变换
F = 1y^2;
ilaplaceF, y, x
ans =
x
F = 1s - a^2;
ilaplaceF, x
ans =
x*expa*x
ilaplace1, s, t
ans =
diract
ilaplaceexp-2*ss^2 1 ss^3 1, s, t
ans =
heavisidet - 2*sint - 2 - exp-t3 expt2*cos3^12*t2 3^12*sin3^12*t23
ilaplace[expx, 1; siny, i*z],[w, x; y, z],[a, b; c, d]
ans =
[expx*diraca, diracb]
[ ilaplacesiny, y, c, dirac1, d*1i]
3. Z变换及其反变换一个离散因果序列的Z变换及其反变换定义为
Fz=n=0fnz-n
fn=Z-1{Fz}
涉及Z变换具体计算的方法最常见的有3种,分别是幂级数展开法、部分分式展开法和围线积分法。MATLAB的符号数学工具箱中采用围线积分法设计求Z反变换的iztrans函数,相应的数学表达式为
fn=12jFzzn-1dz
函数的调用格式如下。Fz=ztransf,trans_index,eval_point: 求时域函数f的Z变换Fz,f是以trans_index为自变量的时域序列,Fz是以复频率eval_point为自变量的频域函数。f=iztransFz,trans_index,eval_point: 求频域函数Fz的Z逆变换f,f是以trans_index为自变量的时域序列,Fz是以复频率eval_point为自变量的频域函数。【例330】Z变换及其反变换。其MATLAB代码编程如下:
%Z变换
syms a b c d w x y z k t n
f = sink;
ztransf, k, x
ans =
x*sin1x^2 - 2*cos1*x 1
ztransheavisiden - 3, n, z
ans =
1z - 1 12z^3
ztransnchoosekn, 2*heaviside5 - n, n, z
ans =
zz - 1^3 5z^5 6*z - z^6z - 1^3 3*z^2 z^3z^5
ztrans[expx, 1; siny, i*z],[w, x; y, z],[a, b; c, d]
ans =
[a*expxa - 1,bb - 1]
[ c*sin1c^2 - 2*cos1*c 1, d*1id - 1^2]
%Z反变换
F = 2*xx - 2^2;
iztransF, x, k
ans =
2^k 2^k*k - 1
iztrans1z, z, n
ans =
kroneckerDeltan - 1, 0
iztransz^3 3*z^2 6*z 5z^5, z, n
ans =
kroneckerDeltan - 2, 0 3*kroneckerDeltan - 3, 0 6*kroneckerDeltan - 4, 0 5*kroneckerDeltan - 5, 0
iztrans[expx, 1; siny, i*z],[w, x; y, z],[a, b; c, d]
ans =
[ expx*kroneckerDeltaa, 0, kroneckerDeltab, 0]
[ iztranssiny, y, c,iztransz, z, d*1i]
3.2多项式及其运算在数学上,多项式是一类基本的数学函数,因为它简单且可组成完备函数基,因此在很多研究中用它来作为复杂函数的近似形式。多项式一般可表示为以下形式:
fx=a0xn a1xn-1 an-1x an
对于这种表示形式,很容易用它的系数向量来表示,即
p=[a0,a1,,an-1,an]
在MATLAB中,提供了poly2sym函数实现多项式的构造,其调用格式如下。r = poly2symc: c为多项式的系数向量。r = poly2symc, v: c为多项式的系数向量,v为其变量。【例331】利用poly2sym函数创建多项式。其MATLAB代码编程如下:
poly2sym[1 3 2] %默认创建多项式变量为 x
ans =
x^2 3*x 2
poly2sym[.694228, .333, 6.2832]%默认创建多项式变量为 x
ans =
6253049924220329*x^29007199254740992 333*x1000 3927625
poly2sym[1 0 1 -1 2],''y''%指定多项式变量为y
ans =
y^4 y^2 - y 2
3.2.1多项式的求根1. 多项式的根
找出多项式的根,即使多项式为0的值,可能是许多学科共同的问题。MATLAB能求解这个问题,并提供了特定的函数roots求解一个多项式的根。函数的调用格式为r = rootsc: 其中c为多项式的系数向量,r为求解多项式的根。【例332】利用roots函数求多项式x4-12x3 25x 116。其MATLAB代码编程如下:
clear all;
p=[1 -12 0 25 116]
r=rootsp
p =
1-12025116
r =
11.7473 0.0000i
2.7028 0.0000i
-1.2251 1.4672i
-1.2251 - 1.4672i
注意: 必须包括具有零系数的项。除非特别地辨认,MATLAB无法知道哪一项为零。2. 由根创建多项式因为在MATLAB中,无论是一个多项式,还是多项式的根都是向量,MATLAB按惯例规定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。在MATLAB中,poly函数可以实现,函数的调用格式为p = polyA: 如果A为方阵,则多项式p为该方阵的特征多项式; 如果A为向量,则A的元素为该多项式p的根。n阶方阵的特征多项式存放在行向量中,并且特征多项式最高次数的系数一定为1。接上例,代码为
pp=polyr
pp =
1.0000-12.0000-0.000025.0000116.0000
3.2.2多项式的四则运算1. 多项式的加法
对多项式的加法,MATLAB并未提供一个特别的函数。如果两个多项式向量大小相同,那么多项式相加时就与标准的数组加法相同。【例333】计算给定多项式的和与差。其MATLAB代码编程如下:
clear all;
p1=[5 40 6 21 9 3];
p2=[4 0 3 72 1 8];
p3=p1 p2%多项式的和
p3 =
940 9931011
r1=poly2strp3,''x'' %显示多项式
r1 =
9 x^5 40 x^4 9 x^3 93 x^2 10 x 11
p4=p1-p2%多项式的差
p4 =
1403-518-5
r2=poly2strp4,''x'' %显示多项式
r2 =
x^5 40 x^4 3 x^3 - 51 x^2 8 x - 5
注意:当两个多项式阶次不同时,低阶的多项式用首零填补,使其与高阶多项式有同样的阶次。要求首零而不是尾零,是因为相关的系数像x幂次一样,必须整齐。2. 多项式的乘法在MATLAB中提供了conv函数用于实现多项式的乘运算,提供了deconv函数实现多项式的除运算。它们调用格式如下。c = conva,b: 执行a,b两个向量的卷积运算。c = conva,b,''shape'': 按形参''shape''返回卷积运算,shape的取值如下。 full: 为返回完整的卷积,其为默认值。 same: 为返回部分卷积,其大小与向量a大小相等。 valid: 只返回无填充零部分的卷积,此时输出向量c的最大值为maxlengtha-max0,lengthb-1, 0。【例334】利用conv函数求多项式fx=x4 4x3-2x2 7x 11和gx=9x4-11x3 5x2 8的乘法运算。其MATLAB代码编程如下:
clear all;
f=[1 4 -2 7 11];
g=[9 -11 5 0 8];
c=convf,g
运行程序,输出如下:
c =
925-5710520-54395688
提示:conv函数只能进行两个多项式的乘法,两个以上的多项式的乘法需要重复使用conv。在一些特殊情况下,一个多项式需要除以另一个多项式。在MATLAB中,这是由函数deconv完成的。函数的调用格式为[q,r] = deconvv,u: 求多项式v,u的除法运算,其中q为返回多项式v除以u的商式,r为返回v除以u的余式。返回的q与r仍为多项式系数向量。【例335】多项式的除法运算。其MATLAB代码编程如下:
clear all;
c=[1 5 15 35 69 100 118 110 72];
b=[1 2 3 6 8];
[a,r]=deconvc,b
运行程序,输出如下:
a =
13689
r =
00000-2-5-80
a是多项式c除以多项式b的商,余式为r。本例中r为零多项式,因为多项式b和多项式a的乘积恰好是c。3.2.3多项式的导数在MATLAB中提供了polyder函数用于多项式的求导。其调用格式如下。k = polyderp: 求多项式p的导函数多项式。k = polydera,b: 求多项式a与多项式b乘积的导函数多项式。[q,d] = polyderb,a: 求多项式b与多项式a相除的导函数,导函数的分子存入q,分母存入d中。其中,参数p,a与b是多项式的系数向量,返回结果q,d,k也是多项式的系数向量。【例336】多项式px=3x2 6x 9x2 2x的求导运算。其MATLAB代码编程如下:
clear all;
a = [3 6 9];
b = [1 2 0];
k = polydera,b
k =
12364218
K=poly2strk,''x''
K =
12 x^3 36 x^2 42 x 18
[q,d] = polyderb,a
q =
1818
d =
9369010881
3.2.4多项式的积分在MATLAB中,提供了polyint函数用于对多项式进行积分。函数的调用格式为polyintp,k: 返回以向量p为系数的多项式的积分,积分的常数项为k。polyintp: 返回以向量p为系数多项式的积分,积分的常数项为默认值0。【例337】已知多项式x2-x 2,求Fx=pxdx,且F0=12。其MATLAB代码编程如下:
p=[1 -1 2]; %原多项式
k=12; %常数项k
F=polyintp,k %求多项式的积分
F =
0.3333-0.50002.00000.5000
df=poly2symF
df =
x^33 - x^22 2*x 12
所以Fx=13x3-12x2 2x 12。3.2.5多项式的估值在MATLAB中提供了polyval函数与polyvalm函数用于求多项式px在x=a的取值。polyval的输入可以是标量或矩阵。其调用格式为y = polyvalp,x: p为多项式的系数向量,x为矩阵,它是按数组运算规则来求多项式的值。[y,delta] = polyvalp,x,S: 使用可选的结构数组S产生由polyfit函数输出的估计参数值; delta是预测未来的观测估算的误差标准偏差。y = polyvalp,x,[],mu或[y,delta] = polyvalp,x,S,mu: 使x^=x-12替代x,在等式中,1=meanx,2=stdx,其中心点与坐标值mu=[1,2]可由polyfit函数计算得出。polyvalm函数的输入参数只能是N阶方阵,这时可以将多项式看作矩阵函数。其调用格式为Y = polyvalmp,X: p为多项式的系数向量,X为方阵,其是按矩阵运算规则来求多项式的值。【例338】多项式的求值。其MATLAB代码编程如下:
clear all;
X = pascal4%建立四阶pascal矩阵
X =
1111
1234
136 10
141020
p = polyX
p =
1.0000 -29.000072.0000 -29.00001.0000
P=poly2strp,''x''
P =
x^4 - 29 x^3 72 x^2 - 29 x 1
y=polyvalp,X%利用polyval求解多项式的值
y =
1.0e 004 *
0.00160.00160.00160.0016
0.00160.0015-0.0140-0.0563
0.0016-0.0140-0.2549-1.2089
0.0016-0.0563-1.2089-4.3779
Y=polyvalmp,X%利用polyvalm求解多项式的值
Y =
1.0e-010 *
-0.0013-0.0063-0.0104-0.0242
-0.0048-0.0218-0.0360-0.0798
-0.0115-0.0512-0.0822-0.1812
-0.0229-0.0973-0.1560-0.3410
3.2.6有理多项式在许多应用中,例如傅里叶Fourier、拉普拉斯Laplace和Z变换中,出现了两个多项式之比。在MATLAB中,有理多项式由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residue和polyder。函数residue执行部分分式展开的运算。函数的调用格式为[r,p,k] = residueb,a: b, a分别为分子和分母多项式系数的行向量,r为留数行向量。其中,
bsas=b1sm b2sm-1 bm 1a1sn a2sn-1 an 1
[b,a] = residuer,p,k: p为极点行向量,k为直项行向量。其中,
bsas=r1s-p1 r2s-p2 rns-pn ks
【例339】求表达式fxbsas=5s3 3s2-2s 7-4s3 8s 3的部分分式展开式子。其MATLAB代码编程如下:
b = [ 5 3 -2 7]; %分子系数向量
a = [-4 0 8 3];%分母系数向量
[r, p, k] = residueb,a
r =
-1.4167
-0.6653
1.3320
p =
1.5737
-1.1644
-0.4093
k =
-1.2500
[b,a] = residuer,p,k
b =
-1.2500-0.75000.5000-1.7500
a =
1.0000-0.0000-2.0000-0.7500
所以,其部分分式展开表达式为fx=bsas=-1.25s3-0.75s2 0.5s-1.75s3-2s-0.75。3.2.7多项式的微分多项式微分的概念是显然的,对n阶多项式px=anxn an-1xn-1,其微分为n-1阶多项式,即为dpx=nanxn-1 n-1an-1xn-2 a1。原多项式及其微分多项式的多项式表示分别为P=[an,an-1,,a0],dp=[nan,n-1an-1,,a1]。在MATLAB中提供了polyder函数用于求多项式的微分,其调用格式为k = polyderp: p,k分别为原多项式及微分多项式的多项式表示。k = polydera,b: 求多项式a与多项式b乘积的导函数多项式。[q,d] = polyderb,a: 求多项式b与多项式a相除的导函数,导函数的分子存入q,分母存入d。其中,参数a和b是多项式的系数向量,返回结果q和d与是多项式的系数向量。【例340】多项式px=3x2 6x 9x2 2x的微分运算。
clear all;
a = [3 6 9];
b = [1 2 0];
k = polydera,b
k =
12364218
K=poly2strk,''x''
K =
12 x^3 36 x^2 42 x 18
[q,d] = polyderb,a
q =
1818
d =
9369010881

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.