新書推薦:
《
情绪传染(当代西方社会心理学名著译丛)
》
售價:NT$
403.0
《
中国年画 1950-1990 THE NEW CHINA: NEW YEAR PICTURE 英文版
》
售價:NT$
1100.0
《
革命与反革命:社会文化视野下的民国政治(近世中国丛书)
》
售價:NT$
435.0
《
画楼:《北洋画报》忆旧(年轮丛书)
》
售價:NT$
1573.0
《
大国脊梁:漫画版
》
售價:NT$
374.0
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:NT$
989.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:NT$
380.0
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:NT$
380.0
|
編輯推薦: |
《数值与非数值分析VC++类库》读者对象为理工类本科生、研究生,尤其是习惯使用VC++编程环境的学生.该类库与VC++环境无缝连接,如果在你们的VC++应用程序中含有大量的数值分析和计算,使用该类库是不错的选择.
|
內容簡介: |
《数值与非数值分析VC++类库》是?VC++和BC++数值分析类库?的增补版.?VC++和BC++数值分析类库?包括矩阵?向量的操作运算和数值分析各种算法,读者几乎可以随心所欲地操作处理矩阵和向量,功能比MATLAB更丰富;数值分析功能涵盖了该学科的各分支.《数值与非数值分析VC++类库》除增补了矩阵向量操作和数值分析功能外,还增加了6项功能:字符串数学表达式解析;数据结构链表?堆栈?队列模板;信号基本分析工具箱;大整数?分数?分数矩阵?向量运算;复数?复数矩阵?向量运算;网络图操作与优化.《数值与非数值分析VC++类库》提供了动态库和静态库,静态库使得用户能编译生成完全独立的应用程序.
|
目錄:
|
前言
如何使用本书VC++类库
第1章矩阵的操作
1.1矩阵的定义、元素访问、重置、销毁与显示
1.1.1动态矩阵及元素的访问
1.1.2关于矩阵的作用域
1.1.3空矩阵与矩阵尺寸的重新设置
1.1.4矩阵的提前销毁
1.1.5矩阵的显示
1.2矩阵的整体赋值与均匀分布随机矩阵
1.2.1使用初始化函数
1.2.2用另一矩阵初始化或整体赋值
1.2.3初始化(或调整)为单位矩阵
1.2.4让矩阵元素服从(a,b)区间上均匀分布
1.2.5产生整数值随机矩阵
1.3矩阵的加、减、乘、转置、反号、置零
1.3.1矩阵相加
1.3.2矩阵的累加
1.3.3矩阵相减
1.3.4矩阵的累减
1.3.5矩阵相乘
1.3.6矩阵的累乘
1.3.7矩阵乘标量
1.3.8矩阵累乘标量
1.3.9矩阵倍加另一矩阵
1.3.10矩阵的转置
1.3.11矩阵反号
1.3.12矩阵置零
1.3.13去除矩阵的垃圾元素
1.4矩阵的初等变换
1.4.1矩阵交换两行
1.4.2矩阵交换两列
1.4.3矩阵倍乘一行
1.4.4矩阵倍乘一列
1.4.5矩阵行倍加
1.4.6矩阵列倍加
1.5矩阵行、列的添加、插入与删除
1.5.1矩阵添加一零行
1.5.2矩阵添加一零列
1.5.3矩阵插入一零行
1.5.4矩阵插入一零列
1.5.5矩阵删除一行
1.5.6矩阵删除一列
1.5.7获取矩阵的行、列数
1.6矩阵取子块与矩阵拼接
1.6.1取矩阵的任意子块
1.6.2取矩阵的四角块
1.6.3取矩阵的连续若干行
1.6.4取矩阵的连续若干列
1.6.5矩阵的填补(一)
1.6.6矩阵的填补(二)
1.6.7矩阵的横向拼接(一)
1.6.8矩阵的横向拼接(二)
1.6.9矩阵的竖向拼接(一)
1.6.10矩阵的竖向拼接(二)
1.7矩阵的存盘与读取
1.7.1矩阵存储为磁盘文件
1.7.2读取磁盘文件矩阵
1.8矩阵与C/C++数组交换数据
1.8.1矩阵串行为C/C++数组
1.8.2C/C++数组排列成矩阵
1.9其他
1.9.1方阵的对角线加常量
1.9.2矩阵的所有元素加常量
1.9.3方阵的迹
1.9.4矩阵元素的平均值
1.9.5由一个矩阵产生的协方差矩阵
1.9.6矩阵的绝对值最大元素及定位
1.9.7矩阵的最大元素及定位
1.9.8矩阵的绝对值最小元素及定位
1.9.9矩阵的最小元素及定位
第2章向量的操作
2.1向量的定义、元素访问、重置、销毁与显示
2.1.1向量的定义、元素访问及作用域
2.1.2空向量与向量长度的重置
2.1.3向量的提前销毁
2.1.4向量的显示
2.2向量的整体赋值与随机向量
2.2.1使用初始化函数
2.2.2用另一向量初始化或整体赋值
2.2.3将向量初始化或设置为单位向量
2.2.4使向量的所有元素都相同
2.2.5使向量的元素为区间的等分点
2.2.6一元函数在若干坐标点上的值构成向量
2.2.7(a,b)均匀分布的随机数构成向量
2.2.8(—|N|,|N|)范围内的随机整数值构成向量
2.2.9服从正态分布的随机数构成向量
2.2.10服从伽马分布的随机数构成向量
2.2.11服从贝塔分布的随机数构成向量
2.2.12向量数据的频率
2.3向量的加、减、乘运算及置零
2.3.1向量相加
2.3.2向量的累加
2.3.3向量相减
2.3.4向量的累减
2.3.5向量的内积
2.3.6向量乘标量
2.3.7向量累乘标量
2.3.8向量每个元素加上同一标量
2.3.9向量倍加另一向量
2.3.10向量置零
2.3.11两向量的欧氏距离
2.3.12去除向量的垃圾元素
2.4向量元素的添加、插入、删除
2.4.1向量添加一元素
2.4.2向量插入一元素
2.4.3向量删除一元素
2.4.4获取向量的维数
2.5向量的拼接、截取和填补
2.5.1向量的拼接(一)
2.5.2向量的拼接(二)
2.5.3截取向量的左段
2.5.4截取向量的中段
2.5.5截取向量的右段
2.5.6向量的填补
2.6向量的存盘与读取
2.6.1向量存储为磁盘文件
2.6.2读取磁盘文件向量
2.7向量与C/C++数组交换数据
2.7.1向量转换为C/C++数组
2.7.2C/C++数组转换成向量
2.8其他
2.8.1向量元素的均值
2.8.2向量元素的方差
2.8.3向量的绝对值最大元素及定位
2.8.4向量的绝对值最小元素及定位
2.8.5向量的最大元素及定位
2.8.6向量的最小元素及定位
2.8.7向量元素按升序排列
2.8.8向量元素按降序排列
2.8.9一个实数的区间定位
2.8.10计算n次二项展开式的系数
2.8.11向量的逆转
2.8.12向量的移位
……
第3章矩阵与向量的关联操作
第4章矩阵的数值分析
第5章函数的数值分析
第6章matrix、vector新增功能
第7章新增的类
|
內容試閱:
|
第1章 矩阵的操作
1.1 矩阵的定义?元素访问?重置?销毁与显示
1.1.1 动态矩阵及元素的访问
在CC++中,定义一个行数和列数为常量的矩阵很简单,例如:定义了一个10×15的double型元素矩阵.当这条语句在一对{}之间,A 位于栈空间.然而,在下面两种情况下,这样的定义是不行的.
其一,如果矩阵的尺寸较大,例如,A 是400×400的double型矩阵,这样的定义方式会使程序运行时出错.因为栈空间的大小是很有限的,这个A 足以“撑破”栈空间.解决的办法是把A 定义成全局变量不在任何{}之内:这里加一个修饰词static以保证A 不会与其他文件中可能定义的变量名A 冲突.
其二,如果矩阵大小要到程序运行时才能确定,也就是说,矩阵的行数和列数是变量,例如,我们想定义一个矩阵用来存放某班学生各门课程的成绩,学生的人数和课程的门数都是可变的,那么,应该使用内存动态分配,即让程序在运行时分配内存.如上,把A 定义成全局矩阵固然能解决大小问题,但是,这么大的矩阵自始至终霸占在内存里,是不是有点遗憾? 不太明智.而动态分配内存不但能解决大小问题取决于你有多大的内存,甚至可以使用硬盘,而且当你不再需要A 时能回收A 占用的内存.
在C++中动态分配一个矩阵可如下执行:假设m,n 是已赋正整数值的整型变量,下面这段程序在内存中定义一个m×n 阶double型元素矩阵:
double* * A = newdouble* [m];
forinti=0;i m;i++
A[i]= newdouble[n];
如此,可以通过A[i][j]访问A 第i 行第j 列的元素.别忘了,当不再需要这个矩阵时,应该回收它占用的内存:
fori=0;i m;i++
delete[]A[i];
delete[]A;
动态分配虽然好,但是有些麻烦.使用这个数值库,你就轻松多了.假设m,n 是已赋正整数值的整型变量m,n 当然也可以是常量,下面这一条语句
就为你动态定义了一个m×n 阶double型元素矩阵,并将每一个元素初始化为零,而且,不用你操心内存回收问题.
如何给矩阵元素赋值和读取矩阵元素的值呢? 看
A2,3=3.1415926;
double pi= A2,3;
第一句给矩阵的第2行第3列元素赋值,第二句读取矩阵该元素的值.有两点要注意,第一,用标识符Ai,j而不是A[i][j]访问A 的元素;第二,矩阵的行列下标都是从1开始,这更符合数学上的思维习惯.如果矩阵只有一行或只有一列,使用数值库中的“向量”更方便,效率也更高第2章.
1.1.2 关于矩阵的作用域
在数值库中,矩阵作为一种变量类型,其作用域与普通变量例如char,int,double一样,限于由包含它的最内层的{}所确定的代码块内,一旦程序运行脱离该代码块,矩阵占用的内存被自动收回.
示例1.01 解释矩阵的作用域.
# include "matrix.h" 在使用了数值分析库的源文件中,必须包含此头文件matrix A3,5; 定义了一个全局的3×5 矩阵
void mainvoid
{
{
int m = 10, n = 30;
matrix Bm,n ; 定义了一个局部的10×30 矩阵
{
matrix Cm + 8, n + 6; 定义了一个局部的18×36 矩阵
}
矩阵C 失效,矩阵A,B 有效
}
矩阵B 失效,矩阵A 有效
}
1.1.3 空矩阵与矩阵尺寸的重新设置
可以先定义一个矩阵,但暂时不指定它的尺寸.这样的矩阵称为空矩阵,可以理解为0×0的矩阵.当需要时,再根据需要设置它的尺寸.语句
matrixA;
定义A 为空矩阵.语句
A.Setm,n;
将已经定义的矩阵A 设置为m ×n 矩阵,并将所有元素置零.可以对A 多次设置.
示例1.02 空矩阵及重新设置
# include "matrix.h"
void mainvoid
{
matrix A
A.Set4,5; A 为4×5 矩阵,并将所有元素初始化为零
A.Set8,7; A 为8×7 矩阵,A 原来的数据丢失,现在所有元素为零.
}
1.1.4 矩阵的提前销毁
虽然矩阵脱离作用域后能自行销毁回收内存,有时你可能想提前销毁它,更早地回收内存,这只要执行语句:
A.Destroy;
所谓销毁一个矩阵,就是回收它占用的内存,使它变成0×0的空矩阵.在其作用域内,它还可以重新设置.
示例1.03 提早回收矩阵所占内存
# include "matrix.h"
void mainvoid
{
matrix A500,1000;
A.Destroy ; 提早回收矩阵A 所占内存.若有必要,还可以再重新设置它
}
1.1.5 矩阵的显示
在CC++ 中要想照矩阵的原样显示一个矩阵,不是一件容易的事情.你必须很仔细地设置显示格式.当矩阵较大时,即使你正确地设置了显示格式,也未必能如愿以偿.因为console控制台窗口并不能随意滚动如果你用图形界面,另当别论,显示出来的矩阵可能会乱七八糟,面目全非.另外,当调试一个程序时,通常想一览无余地看到整个矩阵.而CC++ 编译器其他任何编译器不能满足这个愿望.使用数值库,你会心想事成.它会用“记事本”NotePad窗口或者“写字板”WordPad窗口根据矩阵的大小而定照矩阵的原样分行分列地显示一个矩阵,还可以指定显示精度缺省为6位,最多16位.如果显示多个矩阵,每个窗口的标题条上会按显示的次序标记数字1,2,3,
假设A 是一个已有定义的矩阵,显示A 的语句是
A.Printn;
其中,n 是显示的精度,缺省值为6.
示例1.04 矩阵的显示
# include"matrix.h"
void mainvoid
{
matrix A3,3;
A1,1 = 0.111111111111111;
A1,2 = 0.222222222222222;
A1,3 = 0.333333333333333;
A2,1 = 0.444444444444444;
A2,2 = 0.555555555555555;
A2,3 = 0.666666666666666;
A3,1 = 0.777777777777777;
A3,2 = 0.888888888888888;
A3,3 = 0.999999999999999;
A.Print ; 不指定显示精度,缺省为6 位有效数字,图1G1G1
A.Print16; 显示16 位有效数字,图1G1G2
}
显示结果:如图1G1G1和图1G1G2.
图1G1G1
图1G1G2
1.2 矩阵的整体赋值与均匀分布随机矩阵
1.2.1 使用初始化函数
类似于CC++,可以使用初始化函数Init将一批数据赋给矩阵的相应元素.赋值的次序是“先行后列”,即按照,,amn 的次序.
示例1.05 矩阵元素的成批数据赋值
# include "matrix.h"
void mainvoid
{
matrix A4,3; 赋值前必须明确行列数
A.Init1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0;
注意,每个数据必须使用实数格式.即使它是一个整数值,也必须带小数点
A.Print ;
}
显示结果:如图1G2G1.
读者特别要注意:
1.函数Init中的每一个数据必须使用实数格式.即使它是一个整数值,也必须带小数点.每个数据之间用逗号隔开.
2.如果Init中的数据个数多于矩阵的元素个数,多余的数据被忽略.如果Init中的数据不够填充矩阵的元素,则矩阵的剩余元素保持原值不变.
1.2.2 用另一矩阵初始化或整体赋值
你也许想在内存中为一个已有的矩阵A 做一个备份.这又分为两种情况.一种情况是新定义一个矩阵C 用来备份A ;另一种情况是用已有的但不再需要保留其数据的矩阵B 来备份A .第一种情况可如下执行:
matrix C = A ;
或者
matrixC;
C=A;
第二种情况如下执行因为B 已经有定义了:
B = A;
这里矩阵B 或C 不必与矩阵A 同阶,数值库会将B 或C 调整为与A 同样的尺寸,并拷贝相应的元素.总之,B 或C 成为与A 完全一样的矩阵.
示例1.06 矩阵的整体赋值
# include "matrix.h"
void mainvoid
{
matrix A2,2;
A.Init1.414,3.14159,2.71828,1.732;
matrix B3,3;
B.Init1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0;
matrix C = A; 新定义一个矩阵C 用来备份A
B = A; 用已有的矩阵B 来备份A
C.Print ;
B.Print ;
}
显示结果:如图1-2-2.
|
|