1、用C+语言编写数学惯用算法书稿介绍第1页内容提要本书主要研究用C+语言编写各种与实数和复数相关惯用数学算法程序,如线性代数,矩阵运算,实数方程求解,插值,拟合,数值积分,微分方程求解,特殊函数,函数变换,回归分析等等。本书给读者提供两个方便实现数学算法类,矩阵类和函数类。书中全部程序均调试经过,并存放在附带光盘上。本书提供类库为作者独创,含有编程轻易,效率高特点。本书有一章专门谈VC+视窗编程,并给出了独特子窗口技术。本书可供科研人员,工程技术人员和程序员阅读使用以及提供软件工具,也可作为中高等院校学生学习、研究和软件开发参考书。第2页两个大类矩阵类 实矩阵类 复矩阵类函数类 实函数类 复函数
2、类 矩阵函数类第3页矩阵类例假如要做以下矩阵运算:G=PHT(HPHT+R)-1其中,P,H,R,G都是矩阵,则用本书类库实现,只需要一个语句:g=p*h.t()/(h*p*h.t()+r);即可实现,其中g,p,h,r都是matrix类变量。本书中充分利用了C+语言特有运算符重载优势。第4页矩阵类例语句settomemory();matrix p,r;settodisk();metrix h,g;g=p*h.t()/(h*p*h.t()+r);则还是完成矩阵运算功效,不过p,r内容存放在内存中,而h,g则利用磁盘暂时文件存放数据。还能够依据自己需要自定义缓存器类。第5页函数类例func f(
3、sin);/将正弦函数包装到一个函数类变量将正弦函数包装到一个函数类变量f中中cout sin(0.83)is f(0.83)n“;/显示函数值显示函数值sin(0.83)static double b102=0.1,0.94837,0.15,0.860708,0.25,0.778801,0.40,0.670320,0.5,0.606531,0.57,0.565525,0.7,0.496585,0.85,0.427415,0.93,0.394554,1.0,0.367879;matrix m(b,10,2);/用双精度实数数组用双精度实数数组b产生实矩阵变量产生实矩阵变量func g=func
4、enter2(m);/用这十个坐标对产生不等距插值函数用这十个坐标对产生不等距插值函数g(x)cout “g(0.83)is”g(0.83)“n“;func h;/产生新函数类变量产生新函数类变量hh=f+g;/h被设为函数被设为函数sin(x)+g(x)cout h(0.83)ish(0.83)n;/显示函数值显示函数值h(0.83)为为1.17398cout integ h(x)from 0.1 to 0.9:h.integ(0.1,0.9)n;/显示显示h从从0.1到到0.9积分值积分值0.872394第6页表示式表示式执行使程序做事及返回结果f+g产生并返回f(x)+g(x)f+=g使
5、f改为f(x)+g(x)并返回f引用f+cos或cos+f产生并返回f(x)+cos(x)f+=cos使f改为f(x)+cos(x)并返回f引用f+a或a+f产生并返回f(x)+af+=af改为f(x)+a并返回f引用f.neg()f改为本身负函数并返回f引用-f产生并返回-f(x),f本身不改变f-g产生并返回f(x)-g(x)f-=gf改为f(x)-g(x)并返回f引用f-cos产生并返回f(x)-cos(x)cos-f产生并返回cos(x)-f(x)函数运算符使用方法一览表第7页表示式表示式执行使程序做事及返回结果f-=cosf改为f(x)-cos(x)并返回f引用f-a产生并返回f(x
6、)-af-=af改为f(x)-a并返回f引用f*g产生并返回f(x)g(x)f*=gf改为f(x)g(x)并返回f引用f*cos或cos*f产生并返回f(x)cos(x)f*=cosf改为f(x)cos(x)f*a或a*f产生并返回af(x)f*=af改为af(x)并返回f引用f/g产生并返回f(x)/g(x)f/=gf改为f(x)/g(x)并返回f引用函数运算符使用方法一览表第8页表示式表示式执行使程序做事及返回结果f/cos产生并返回f(x)/cos(x)cos/f产生并返回cos(x)/f(x)f/=cosf改为f(x)/cos(x)并返回f引用f/a产生并返回f(x)/aa/f产生并返
7、回a/f(x)f/=af改为f(x)/a并返回f引用f.power(g)f改为f(x)g(x)乘方函数并返回f引用fg产生并返回f(x)g(x)乘方f.power(a)f改为f(x)a次方并返回f引用fa产生并返回f(x)a次方f(g)产生并返回f(x)和g(x)复合函数f(g(x)函数运算符使用方法一览表第9页函数在x轴上平移和缩放假设f为一函数类func变量,对应于函数f(x),a和b都是双精度实数double型变量,则语句f.shiftxas(a);使f代表函数为f(x-a),即完成在x轴上平移功效。而语句f.xroom(b);使f代表函数改为f(bx),即在x轴上缩放,假如b为负值,则
8、函数反向。第10页第五章用VC+编程特点不需要读者之前有任何VC+编程知识。仅看这一章,就已经能够进行最基本VC+编程。给出了任何VC+编程指导书所没有介绍技术,子窗口技术。给出了两个主要子窗口类:Ccurve类:用来显示函数曲线Crecord类:用来录制存取和播放声音第11页本章最终用这两个类编写了一个对声音处理平台样例程序,界面以下:第12页现实状况和背景现在全国各大学每年有大量本科生和硕士需要做毕业论文,所以经常需要对搜集和试验数据进行数学处理,需要进行编程。而他们大多数专业并非计算机软件。第13页现实状况和背景而现在市面上绝大多数C+编程指导书,都是面向商业软件编程,讲数学编程和科研方面编程书是相当少。已经有一些国内和国外已经出版相关数学C+语言方面书,有许多其实依然是利用C语言特征编写函数集,并没有充分利用C+语言特点。第14页现实状况和背景假如要用那些书中介绍C程序函数,通常要将那些函数源文件进行一些更动,才能够加入到自己程序中,这就破坏了封装性,而C+语言编程,是极易犯错。第15页现实状况和背景现在许多本科生和硕士,从接到课题到完成论文,通常有三个月到六个月或者一年不等研究时间,所以通常抽不出大量时间来研究C+编程技术。而本书在读者只需要粗通C+语言情况下,只看第一章和第五章,就能够快速掌握在视窗下编写科研程序技术。所以本书将是全部这些人好帮手。(结束)第16页






