自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 markdown替换所有\def命令

最近在用pandoc将markdown转word的时候发现,如果存在\def命令,pandoc不会自动替换,导致导出的word中大量数学公式无法转换。因此我写了如下程序,可以预处理markdown文件并替换一些pandoc无法识别的命令。(我写的markdown文件为GBK编码的,如果是UTF-8编码请注释掉倒数第7行)#include <fstream>#include <string>#include <sstream>#include <iostrea

2024-05-10 12:42:53 358

原创 (C++)简单计算器

输入是一个带有括号的四则运算表达式,输出是计算得出的正确计算结果。采用递归的思想解决括号,并根据优先级和结合方向逐个处理运算符。又因为运算符个数不确定,故采用标准库类型。由于待求值表达式长度不限,故采用标准库类型。要能检查错误,故包含。要能计算小数,故采用。)用于存储待求值表达式;结果:求出表达式的值。的成员函数以及库函数。

2024-01-24 00:05:02 984

原创 (C++)八皇后问题

在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后,并将结果以某种方式显示出来。采用了回溯算法,较穷举法大大提高了效率。由于递归效率较低,故又写了非递归的程序。结果:输出了八皇后问题的第一种情况。)表示特定列的皇后要放的行位置,条主对角线上已经有皇后,条副对角线上已经有皇后;改为指针用于操作数组。改为循环变量,将标记。

2024-01-23 15:55:13 398

原创 幂法和反幂法(C++)

反幂法, 顾名思义, 就是与幂法相反的算法. 它用来用来计算矩阵按模最小的特征值及其特征向量. 设。应用幂法即可得到矩阵按模最小的特征值及其特征向量, 这种方法被称为反幂法.按模最小的特征值及其特征向量. 也就是说, 我们可以求得矩阵。幂法就是用于求主特征值和主特征向量的一种数值方法.对应的非零分量的比值近似于主特征值., 因此幂法是线性收敛的算法. 但当。的主特征值. 因此, 我们只需要对。在反幂法的基础上, 如果我们对矩阵。为非奇异矩阵, 即它的特征值满足。的主特征值, 称对应的特征向量。

2024-01-23 15:54:46 1171

原创 (C++)n阶方阵求逆

但由于浮点数运算的偏差,容易出现极小数,往后可以通过编写一个有理数类加以解决。,输出是它的逆矩阵,再将得到的逆矩阵与原来的矩阵相乘,验证其结果是单位矩阵。采用初等变换法求逆矩阵,较伴随矩阵法较复杂,但避免了递归,效率更高。)存储原矩阵的首地址,)存储逆矩阵的首地址,)存储乘积的首地址;

2024-01-22 20:12:10 857

原创 三对角方程组的求解(C++)

三对角方程组是一类特殊的线性方程组, 其系数矩阵具有三对角的性质, 即除了主对角线上的元素外, 只有上对角线和下对角线上的非零元素. 这种形式的方程组在科学和工程领域中经常出现, 因此求解三对角方程组具有重要的应用价值.本文我们讨论一类特殊的线性方程组, 即三对角方程组。代入程序求得解向量为。

2024-01-22 08:37:19 1031

原创 迭代法求解线性方程组(C++)

xk1Fk​xkxk−1⋯x0k01⋯若xk1只与xk有关, 且Fk​是线性的, 即xk1Bk​xkfk​其中,Bk​∈Rn×n, 称为单步线性迭代法,Bk​称为迭代矩阵. 若Bk​与fk​都与k无关, 即xk1Bxkf称为单步定常线性迭代法. 本文主要讨论这种类型的迭代法.

2024-01-21 00:04:10 1501

原创 (C++)报数问题

输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。输出先后被“淘汰”的人的编号。有n人围坐成一圈(假设他们的编号沿顺时针方向依次为1到n)。编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户通过。特点:采用指针算法,效率比利用取余运算更高。结果:输出了淘汰顺序和胜出者。

2024-01-20 09:38:17 495

原创 (C++)成绩排序

假设某年级有4个班,每班有45名同学。本学期有5门课程考试,每门课程成绩是百分制。采用分函数编写,结构清晰,将复杂的问题简化为一个个函数的小问题,实现了系统的编写。缺点:增加了函数调用的时空成本。由于有4个班,为了区别每个班,故构造二维数组,第一个维度表示班级,第二个维度表示班内学号。),用于存储学生数据;),用于计算平均分,下标与。(成绩,用于构造链表)。

2024-01-19 00:02:12 611

原创 (C++)大数计算问题

数组看作256进制的数,而不是十进制数,节约了内存空间,并利用动态内存分配技术,解决了大数问题。在实验过程中,我原本是打算逐个扩充数组(每次数组长度加1),后来发现运行的效率很低,就采用了和标准库类型。大数是超过整数表示范围的整数,针对正整数运算,定义一个大数类,并编写两个大数类对象的加法和减法函数。类似的内存分配方法,每次多扩充29位,解决了效率低的问题。实验中出现的bug:忽略了大数的进位、退位问题。解决方案:定义更大的临时数据数组并逐位处理。)数据成员及构造函数、析构函数等成员函数。

2024-01-18 13:08:30 1097

原创 (C++)矩阵运算

输入两个矩阵,根据选择进行加、减、乘运算。应能判断能否进行相应运算,并输出运算结果。采用二维数组进行矩阵运算, 以获取计算结果。存储矩阵1和矩阵2,它们指向一级指针数组,并用一级指针指向各行来访问矩阵的每个元素。能否运算的条件判断:加减都要求矩阵1和矩阵2的行列数相等,乘法要求矩阵1的列数等于矩阵2的行数。设计综合使用了顺序结构、选择结构和循环结构,实现了判断并计算矩阵的和、差、积的目的。类型的数据存储行列数,其中。

2024-01-17 11:23:48 816

原创 LU分解(C++)

LU分解是一种重要的数值线性代数技术, 用于解决线性方程组和矩阵求逆等问题. 在科学工程领域, 经常需要解决形如Axb的线性方程组, 其中A是系数矩阵,x是未知向量,b是已知向量. LU分解是一种将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的方法, 即ALU. 这个分解有许多优点, 其中之一是它可以帮助我们更有效地解决多个不同的右端向量b对应的线性方程组, 而无需每次都重新分解A. 此外, LU分解也有助于计算矩阵的逆, 因为一旦我们得到了ALU。

2024-01-16 00:01:41 1611

原创 非线性方程求根迭代法(C++)

迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化为一个等价的不动点方程, 然后通过迭代逼近不动点, 从而得到非线性方程的根.迭代法的基本思想是将隐式方程转化为显式的计算公式, 然后通过迭代, 求方程近似根.

2024-01-15 00:04:10 2130

原创 数据结构-无向图(C++)

采用形式化的定义,图G由两个集合V和E组成,记为GVE,其中V是顶点的有限集合,记为VGE是连接V中两个不同顶点(顶点对)的边的有限集合,记为EG。如果在图G中,若ij>∈EG必有ji>∈EG,即EG是对称的,则用ij代替这两个顶点对,表示顶点i与顶点j的一条无向边,则称G为无向图。图的存储结构除了要存储图中各个顶点本身的信息以外,同时还要存储顶点与顶点之间的所有关系(边的信息)。常用的图的存储结构有邻接矩阵和邻接表。

2024-01-14 00:02:41 1667

原创 Gauss消去法(C++)

Gauss消去法是求解线性方程组较为有效的方法, 它主要包括两个操作, 即消元和回代. 所谓消元是指将线性方程组转化为与其同解的上三角方程组;回代是指通过上三角方程组逐个解出方程组的未知数. Gauss消去法通常有顺序Gauss消去法, 列主元Gauss消去法, 全主元Gauss消去法及Gauss-Jordan消去法.

2024-01-13 00:02:07 2028

原创 数据结构-树(C++)

树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树是一种特殊的数据结构。它满足:每个顶点有零个或多个子顶点;没有父顶点的顶点称为根顶点;每一个非根顶点有且只有一个父顶点;除了根顶点外,每个子顶点可以分为多个不相交的子树。下面将利用二叉链表完成二叉树类的编写。实际上,对于一般的树,只需将指针域由两个指针更改为指针数组即可,其基本思想不变,因此只编写二叉树类。

2024-01-12 00:01:15 610

原创 数据结构-线性表及其应用(C++)

线性表是最基本、最简单、也是最常用的一种数据结构。它是由n个具有相同特性的数据元素的有限序列。其数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。其主要的物理存储方式分为顺序表(相邻数据元素在底层结构上是连续的)和链表(一般是不连续的)。

2024-01-11 09:25:11 1455

原创 基于Windows套接字的网络编程(MFC)

从CSocket编程模型知道,服务器端需要两种套接字,一个用来侦听连接请求,一个用来与请求连接的套接字建立连接。因此,利用类向导为程序添加两个CSocket和。下面在套接字类里加入对话框类信息。1然后在两个套接字类里添加公有对话框类指针数据成员m_Dlg2首先类似服务器端添加一个套接字类,并添加对话框变量及其相应构造。类似这个问题是由于派生了套接字类并连接了对话框类导致的,引入工程文件的头文件即可解决问题。

2024-01-10 00:11:17 1375

原创 基于ODBC的数据库应用(MFC)

数据库是指以一定的组织形式存放在计算机上的相互关联的数据的集合。一般一个库中有多个表组成,一张表中由多条记录组成,一条记录由若干字段组成。例:学生信息库——基本信息表、成绩表基本信息表——每个学生的基本信息记录基本信息记录——姓名、性别、年龄、专业等字段组成DBMS数据库管理系统为用户提供对数据库操作的各种命令、工具及方法。例:Access/Oracle/SQL Sever等等// 最后一条。

2024-01-09 00:12:35 1266

原创 简易计算器的实现(MFC)

一开始的思路是将数字栈和运算符栈设置在全局区,一边输入一边进栈处理。但是这样必然导致需要一个历史记录容器进行存储历史操作,反而使问题复杂化了,因此将数字栈和运算符栈设置为局部变量。

2024-01-08 10:00:08 1308

原创 时钟的实现(MFC)

在MFC中,用CTime类表示绝对的时间和日期,用CTimeSpan类表示时间间隔。它们都没有基类,是不可派生的。因为没有虚函数,CTime和CTimeSpan对象的大小都正好是4个字节。其大多数成员函数都是内联的。CTime和CTimeSpan类引入了数据类型以及其相关的运行时函数,其中包括向或自一个Gregorian日期和24小时时间的转换功能。这些函数将秒转换为日、时、分和秒的各种组合。CTime值是基于世界标准时间(UCT)的,UCT时间等于格林威治(Greenwich)时间(GMT)。

2024-01-07 08:51:50 1533 1

原创 资源类的使用(MFC)

系统默认生成的工具栏资源为,可以在此基础上设计自己的工具栏,删除或添加一些按钮。需要为工具栏按钮提供ID号,一般取某个菜单项的ID。编程时,菜单、快捷键、工具栏资源往往配合使用。具有相同ID号的菜单项、工具栏按钮、快捷键被用户操作后,会产生相同的命令消息,只需要进行一次消息映射。与颜色对话框类似,MFC也提供了,但使用时有所不同。首先,虽然它也提供了GetFont()接口,但直接使用会编译报错。因此需要借用一个LOGFONT临时变量来接收用户传递的字体。另外,成员变量m_font。

2024-01-06 16:37:04 1075 1

原创 常微分方程组的数值解法(C++)

常微分方程组的数值解法是一种数学方法, 用于求解一组多元的常微分方程(Ordinary Differential Equations, ODEs). 常微分方程组通常描述了多个变量随时间或其他独立变量的演化方式, 这些方程是自然界和工程问题中的常见数学建模工具. 解这些方程组的确切解通常难以找到, 因此需要数值方法来近似解. 与常微分方程数值解法类似, 常微分方程组的数值解法也有相应的Euler法和Runge-Kutta法.

2023-12-03 16:17:41 1466 1

原创 MFC标准控件实验

一个很自然的想法是使用Formats.Format(TEXT("%s,%s,%s%s人也。\n您的兴趣有%s%s%s%s%s%s\n您的地址:%s%s"), t_name.GetBuffer(), sex?TEXT("男") : TEXT("女"), t_province.GetBuffer(), t_city.GetBuffer(), exercise?TEXT("运动;TEXT("游戏;TEXT("音乐;TEXT("读书;TEXT("电影;TEXT("旅游;但运行后发现格式化中的%s。

2023-11-04 11:57:48 171 1

原创 CView类中CDC的使用(MFC)

一开始在CDC类的文档里未找到对应的api,后查阅资料获知需要借助CPen类型进行设置。由于函数图像和坐标轴均为实线,故采用PS_SOLID风格。而nWidth和crColor按实验要求填写即可。另一种方式是利用CreatePen参数与构造函数相同,故不赘述。

2023-11-03 07:47:12 174

原创 MFC鼠标和键盘编程实验

最开始想到的并不是MFC框架下的CString类,而是标准库的string类来格式化输出。但运行调试时出现了形参实参不匹配的问题以及多字节和宽字节的矛盾的问题。这是因为在创建项目时使用的是宽字节编码,而是多字节,这中间出现了编码转换的问题,可以使用宏TEXT进行转换,但使用TEXT对的c_str()返回的C风格字符串转换时会报错。因此最终使用了MFC框架下的CString类进行格式化输出。

2023-11-02 09:49:53 211 1

原创 常微分方程的数值解法(C++)

文章目录Euler方法Runge-Kutta方法二级二阶三级三阶四级四阶算法实现显式Euler法向量形式文件形式隐式Euler法向量形式文件形式经典4阶Runge-Kutta法向量形式文件形式实例分析对于一阶常微分方程, 数值解法是一种用离散的点来逼近微分方程的解的方法. 常微分方程的一般形式为:dydx=f(x,y)\frac{{\rm d}y}{{\rm d}x} = f(x, y) dxdy​=f(x,y)其中f(x,y)f(x, y)f(x,y)是已知的函数, yyy是未知的函数, 我们的

2023-11-01 19:43:24 985 1

原创 非线性方程求根划界法(C++)

求解非线性方程的根是科学研究和工程计算中另一个非常重要的问题. 无论是在数学理论上的微分方程求解, 优化问题, 数值模拟, 还是在工程科学中的诸如流体动力学, 结构力学, 电磁场等领域, 以及在一些经济学科和其他社会科学学科中的模型研究中, 经常会遇到求解非线性方程.非线性方程的数值解法大致分为划界法与迭代法两类. 每一类方法中都有很多经典的方法, 各有特色. 划界法主要有图解法, 二分法以及试位法;

2023-10-31 08:14:48 275 1

原创 Julia集和Mandelbrot集绘制(C++)

在本实验中, 我们主要考虑两个特殊的迭代, 即分形几何中非常有名的Julia集和Mandelbrot集. 两者均是由复函数fzz2C。

2023-10-30 08:55:40 887 1

原创 线性随机IFS迭代法(C++)

中, 每一个仿射变换被调用的概率不一定是等同的, 也就是说, 落入图形各部分中点的数目不一定相同, 这就需要引进一个新的量, 即仿射变换。控制着图形的结构和形状, 由于仿射变换的形式是相同的, 所以不同的形状取决于仿射变换的系数. 另外, 仿射变换族。对于一个比较复杂的图形, 可能需要多个不同的仿射变换来实现, 仿射变换族。给定一个IFS码, 我们便可以进行多次迭代, 最终生成所需的图形.便组成了线性随机IFS迭代最关键的部分——IFS码.在本文仅在平面上考虑线性随机IFS迭代.

2023-10-29 19:59:09 650

原创 Romberg求积法(C++)

Romberg求积法是一种数值分析中的求积算法, 它利用了外推的思想方法, 以提高代数精度. 这种方法通过不断缩小积分区间, 将区间划分为更小的子区间, 并计算每个子区间的积分值, 从而逼近更为准确的求积值. 这个过程是通过计算一系列的近似值, 并逐步改进这些近似值, 以得到更为精确的结果. 在实现过程中, 通常采用逐次分半加速法, 将积分区间逐次分割为更小的子区间. 前一次分割得到的函数值在分半之后仍可被利用, 且易于编程实现.

2023-10-28 10:32:35 1094 1

原创 复化求积法(C++)

复化求积法是一种数值积分的方法, 它通过将积分区间进行分段, 并在各分段子区间上采用低阶的Newton-Cotes求积公式, 对各个小区间上的积分值进行近似, 最后再累加起来. 这种方法避免了随着插值点增多导致的高阶Newton-Cotes公式不稳定的缺陷, 常用的复化求积法有复化梯形求积和复化Simpson求积.

2023-10-27 19:12:03 414 1

原创 插值型求积公式(C++)

插值型求积公式是一种用于计算定积分的数学方法. 它基于把未知的定积分分解为可求解的函数值的积分, 然后将函数拟合为多项式或其他函数, 最后使用拟合函数去近似定积分. 由于拟合的函数具有更好的变化性, 效果更好, 而改进的插值型求积公式又能更好地拟合变化的函数, 因此它们被认为是计算积分的有效方法.

2023-10-26 12:38:01 288 1

原创 分段低次插值(C++)

文章目录分段线性插值分段三次Hermite插值三次样条插值三弯矩算法三转角算法代码实现分段线性插值分段三次Hermite插值三次样条插值测试案例由于实际应用时, 高次插值的逼近效果并不好, 因此需要将插值区间进行分段, 这就是分段低次插值. 通过对每两个数据点之间的小区间进行低次多项式插值来避免Runge现象, 并且可以有效地控制截断误差.分段低次插值的具体做法因插值多项式的次数不同而有所差异. 例如, 分段线性插值就是将所有数据点用折线连起来, 得到的分段函数就是分段线性插值; 分段三次Hermite

2023-10-25 12:51:19 1031 1

原创 Hermite插值法(C++)

Hermite插值法是一种常用的数值方法, 主要用于在给定的数据点集上构造一个可微的函数来近似描述这些数据点的趋势和特征. 它可以通过已知的函数值和导数值来推断出未知的函数值和导数值, 并且可以用于多元插值问题. Hermite插值法构造的多项式是可微的, 这意味着它可以用来近似描述数据点的导数和曲率等特征, 对于需要对数据进行微积分分析的问题非常有用, 例如优化、控制和工程设计等领域. 此外, Hermite插值法可以通过增加数据点的函数值和导数来扩展到高次多项式, 从而提高插值的精度和可微性.

2023-10-24 09:07:29 574

原创 多项式插值法(C++)

Lagrange插值法是一种通过已知的若干点找到一个多项式, 使得该多项式的图像能够经过这些点的方法. 这个方法最早由英国数学家爱德华·华林于1779年发现, 不久后由莱昂哈德·欧拉在1783年再次发现, 并在1795年由法国数学家约瑟夫·路易斯·拉格朗日发表在他的著作《师范学校数学基础教程》中, 因此被称为拉格朗日插值法.Lagrange插值法的核心思想是利用已知的插值节点构造一个多项式函数, 使得该函数在这些节点上的值等于已知的值, 而在其他节点上的值等于0, 即Lagrange插值基函数lkx。

2023-10-23 19:37:51 631

原创 C++实现简单计算器(字符串替换)

本文介绍了一种使用字符串替换的方法来计算数学表达式的值。相对于使用栈的方式,这种方法效率较低。这种计算器支持带括号的四则运算。

2023-10-22 19:51:45 372

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除