自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (7)
  • 收藏
  • 关注

原创 堆排序的改进----多叉堆,C语言实现

多叉堆和二叉堆的相同点和不同点:下面我们对不同的m (子节点个数) 和n (待排序的元素个数) 进行画图 (用Python画图)。从下图我们可以清晰的看到: 当数据量n很小时,不论m是多少,sum的值都差不多,且增长很快。当n ≥ 10000时,sum的增长变得非常缓慢。而这时不同的m之间有较大差别。m为3或4时sum非常接近,当m = 4时sum有最小值。当m ≥ 4时,随着m的增大,sum逐渐增大,当m = 8时,效率与m = 2时相同 (两条曲线完全重合)。从这个图我们得到的结论是:四叉堆的效率最

2020-07-29 09:14:01 1001

原创 线性查找算法(BFPTR算法)的原始实现,以及改进形式, C语言实现

@[浅谈线性查找算法(BFPTR算法)]先说明一下,这里所说的是“线性查找”,而不是“顺序查找”。线性查找算法又叫BFPRT算法,即Blum、Floyd、Pratt、Rivest、Tarjan等5个作者的名字的缩写,Blum、Floyd、Rivest、Tarjan这四个作者都是图灵奖得主,可见这个算法的份量。在具体介绍线性查找算法之前,我们先来看看它的用途:解决Top-K问题。Top-K问题:如果数组arr中的数据不是有序的,怎么样才能找第k大的数?下面是三种解决方案:1、用选择排序的思想,对数组进

2020-07-22 10:42:15 733 3

原创 使快速排序算法的时间复杂度在任何情况下都是O(N * logN)的一种优化策略

使快速排序算法的时间复杂度在任何情况下都是O(N * logN)的一种优化策略本文提出了一种快速排序算法的优化策略,该策略可以使快速排序在最坏的情况下退化为归并排序。由于归并排序在任何情况下都是O (N * logN),因此,采用这种优化策略的快速排序算法的时间复杂度在任何情况下都是O (N * logN)。通过这种方式,本文提出两种改进的快速排序。

2022-05-16 07:10:33 653

原创 PID算法的思路和C#代码

对于PID算法,p表示“比例”、i表示“积分”、d表示“微分”。从高等数学中我们知道,“微分”就是“导数”,也就是AI中的“梯度”。所以PID算法中的d实际上就是利用导数的“预测”能力。下面举例说明:小明站在0m的位置,蒙着眼睛。现在要求小明走到10m的一个位置。小明的速度为2m/s,可以适当增减速度,最快不超过3m/s。每一秒检测一次与目标位置的误差。如果还没到目标位置 (0-10m),则误差为正;如果超过目标位置( > 10m),则误差为负。要求小明在最短时间内准确的到达目标位置。P的

2021-09-05 16:01:32 1536

原创 惠氏桥测量电阻

以下内容包括测量PT1000、PT100等两种电阻的电路图、注意事项和C语言代码。1、PT1000下图是测量温度计探头 (PT1000) 的电阻的电路图。该电路使用5V单片机供电,PT1000的最大工作电流为0.5mA,所以要采用适当的电阻值保证元件正常工作。放大运算器OP07采用+5V和-5V供电,AD转换器只能采集正电压,所以要控制放大电路的放大倍数,使理论输出电压不超出+5V。这个电路的测电阻原理:1、PT1000是热敏电阻,随着温度的变化,电阻发生基本线性的变化。2、0度时,PT100

2021-05-30 11:45:13 3136

原创 Buck-Boost电路

前面我们学习了降压的Buck电路 (左图) 和升压的Boost电路 (右图),那么如果我们把Buck电路和Boost电路结合一下会发生什么情况?我们尝试着画一下:我们用Buck电路作为输入,然后用Boost电路进行调整,最后输出。因此Buck电路中的负载、Boost电路的电源都可以删掉。得到下图:由于Buck电路中的C2的作用是在输出的时候滤波,这个功能已经由Boost电路中的C1实现了,因此可以删除Buck电路中的C2电容。得到下图:这里两个电感处于串联状态,可以合二为一,得到下面的电路:

2021-05-26 21:50:44 38840 8

原创 Boost电路

前一篇文章中,我们介绍了Buck电路。它的特征是电源、开关和负载是串联在一起的。那么,我们能不能把开关与电源/负载进行并联呢?我们试着画画。这里,我们直接在负载RL上并联了电容C1,作用是滤波。这个电路中,当开关闭合时,电源短路。我们可以增加一个电阻或者电感限制开关闭合时的电流。如果用电阻,则电阻会消耗功率;如果用电感,就不会消耗功率。我们就用电感:当开关断开时,电源和电感同时对电容充电,对负载供电。当开关闭合的时候,电源对电感进行充电。我们希望这时电容对负载供电。但实际上电容被开关短路,所以

2021-05-26 20:51:36 8557 4

原创 Buck电路

如果我们希望得到一个20V的直流电压源,我们能想到什么办法?很简单,从220V市电开始,通过变压器降压得到有效值为20V的电压,通过整流桥整流得到不稳定的直流电,接着用一个大的电解电容滤波,就可以得到20V的电压。那么如果我们现在希望得到一个12V的直流电压源,我们该怎么办?依样照葫芦,从220V市电开始,经过降压、整流、滤波得到。这个方法固然没错,但是这样做显然成本太高了。我们可以在上述20V的直流电源的基础上,加一个LM7812稳压块就可以得到12V电压了。然而,这种线性稳压器的根本原理就是串联电

2021-05-26 20:27:47 11044 3

原创 按键开关

单片机的外部设备中,独立按键算是最简单一个外设了。对于共阴极的独立按键,对应的GPIO口初始化为高电平。当按键按下后,GPIO口变为低电平;放开按键后,按键回复,GPIO口变为高电平。但是这个硬件电路该怎么搭呢?直接通过一个按键开关把GPIO和GND连起来可以吗?显然不行,Key1一按下,GPIO就可以GND短路了。为了防止短路,我们在GPIO和GND之间加一个电阻。这样行吗?我们发现当Key没有按下时,GPIO默认为1;当key按下后,5V电压完全落在电阻上,所以GPIO还是1。所以这个电路图中

2021-04-28 17:14:19 1622

原创 Stm32的GPIO驱动直流电机

与GPIO口通过三极管驱动继电器一样,如果想用GPIO口控制直流电动机,我们也需要用三极管放大电流,或者用达林顿管。达林顿管就是把两个三极管连接起来,达林顿管的放大倍数就是两个三极管的乘积。与驱动继电器不同的是,直流电动机可以根据不同的电压值,表现出不同的转速。那么怎么让GPIO口的输出电压发生变化呢?这就需要用到PWM。我们常用的PWM一共有两种,第一种是用硬件实现的,第二种是用软件实现。下面分别进行说明:硬件PWM (图片取自https://zhidao.baidu.com/question/23

2021-04-08 09:39:22 3150

原创 Stm32的GPIO驱动继电器

三极管三极管S8050-D:直插的字体面向自己从左到右依次是发射极E,基极B,集电极C类型:NPN集电极耗散功率Pc:0.625W(贴片:0.3W)集电极电流Ic:0.5A集电极-基极电压Vcbo:40V集电极-发射极电压Vceo:25V集电极-发射极饱和电压Vce(sat): 0.6V特征频率f: 最小150MHz按三极管后缀号分为 B C D档 贴片为 L H档放大倍数:B85-160 C120-200 D160-300 L100-200 H200-350上图中,左边的GPIO

2021-04-06 21:49:54 11368 2

原创 STM32F103C8T6与STC89C52单片机的几个区别

操作51单片机的本质是控制单片机引脚的高低电平、读取单片机引脚的高低电平。如果把STM32F103C8T6看成比51单片机更快、容量更大、资源更多的单片机,则通过GPIO_SetBits()、GPIO_ResetBits()和GPIO_ReadOutputDataBit()这三个函数已经能完成所有的工作了。另外,由于51单片机的Flash只有4K,内存只有256个字节。所以要节约一切可以节约的资源,最显著的特征就是能用char就不会用int。原因就是char是8位的,而int是16位的,使用char可以节

2021-03-23 20:19:13 14854

转载 禁止火狐浏览器自动更新的方法

转载:原文链接:https://blog.csdn.net/sanqima/article/details/90543616火狐浏览器有很多插件,在更新之后有的插件就不能用了,同时火狐浏览器每次加载的时候,都会在后台检测是否最新版本并在后台悄悄下载,为了规避这种情况,下面介绍禁止火狐浏览器自动更新的方法。一、找到Mozilla Firefox\defaults\pref\channel-prefs.js文件  首先关闭Firefox浏览器,然后右击桌面的Firefox快捷方式–> 属性 --&

2021-03-18 19:26:04 729

原创 自适应积分的函数的编写

最近在写软件,需要用到积分。采用多个矩形累加的方法,很容易实现积分的功能,但是这个方法有一个问题:需要分成多少份,也就是n要取多少。如果n太小,则容易导致精度较低,n太大,则计算量太大,且过高的精度在工程上也没有意义。这里我们采用自适应的方式,让程序自己选择n的大小。我们首先定义两个要积分的函数f1和f2。double f1(double x){ return 1/x;}double f2(double x){ return 1/(x * x);}下面是积分函数:4个参数的意义:

2021-02-16 17:15:20 640 2

原创 硬件编程-----根据时序图写C语言驱动

最近要用52单片机读取PT100温度探头和K型热电偶的温度,在设计、并焊接完硬件电路之后,发现用C语言读取具体的温度是个麻烦事。具体来说就是不知道怎么用C语言根据芯片的时序图编写驱动,从而进一步读取AD芯片和Max6675芯片的数据。要完成这个工作,实际上要做一件横跨硬件电路设计、驱动编写、纯C软件编写的工程,对于我这么一个硬件新手来说还是有不小的难度的。在完成这些工作之后,我特意写这篇文章,用来描述根据时序图写C语言驱动的流程,作为对这份工作的纪念,也希望能为后来者提供一点帮助。对于PT100温度探头,

2021-02-12 17:19:47 3324 3

原创 查找算法:逐次逼近

最近在DIY一些电路方面东西,当模拟电路转换成数字电路时,需要用一个ADC转换器读取模拟电路输出的电压。ADC有三种实现方式,用的较多的是“逐次逼近”型的ADC。网上有很多文章介绍“逐次逼近”型的ADC的原理,但我都看得云里雾里,后来仔细一琢磨,不就是把十进制数据转化成二进制嘛,非要用一个“逐次逼近”这样看似高深的词!其实用的就是“二分法”。下面我们就来看看。如果东东手中有一个纸片,上面写着n = 74。根据前面说起的二分法,如果给定数据范围是1~100,则虫虫最多需要猜7次就能猜到这个数。原因是2^6

2021-02-01 13:01:02 2446

原创 AI入门:神经网络实战----迁移学习

前言学过化学的人都知道,到现在为止,世界上一共只发现118种化学元素,通过不同的排列组合,却可以得到我们丰富多彩的世界。同样的,简单的几何结构也就那么几种,但正是由它们组成了这个世界。换个角度看,这个世界中的任何物体都是简单的几何结构中的一种或几种组合而成。从上面的描述我们可以得出一个结论:任何物体的基本结构都是相似的。这个结论跟我们今天要学习的迁移学习有什么关系呢?请看下一段,什么是迁移学习。什么是迁移学习?在计算机视觉中,迁移学习往往使用带有卷积的神经网络 (不记得卷积神经网络的话,请查阅前面的

2021-01-01 22:02:56 1564

原创 AI入门:神经网络实战----WGAN

前言在大数据时代,数据的质量和数量是最重要的。监督学习中的样本需要我们人工进行标注,而人工标注这个工作本身是非常枯燥乏味,且工作量巨大的事情。如果我们的神经网络使用非监督学习,那就可以避免标注工作,节约很多成本,同时获得更多的数据。因此非监督学习是未来的一个重要发展方向。上一节我们学的GAN就是一种非监督学习的神经网络,因此学习和改进GAN是非常重要的。在上一节中,我们提到了GAN的一些缺点:1、GAN要求G和D相互匹配。这一点在实际编程中是比较困难的。2、GAN的训练比较缓慢。3、准确率以及损失

2020-12-25 14:21:53 1089

原创 AI入门----神经网络实战----GAN

前言之前我们学了AutoEncoder生成式神经网络。从效果看,生成的图片有点模糊。这里我们将介绍另一种生成式神经网络:GAN。这可能是深度学习中最让人兴奋的一个方向了。我们在这里做一个形象的比方:AutoEncoder就像是一个圣人,他告诉大家该怎么做事,怎么说话,甚至怎么走路。所以大家都向圣人学习。最后人人都学的类似于圣人。这种方式的优点是学习的速度相对比较快。但是随着时代的发展,我们可以看到原先的圣人并不是什么都是对的,圣人也有错误和缺陷。所以,这种方式的缺点是很难得到最好的结果 (因为没有人知道最

2020-12-24 21:03:52 349

原创 AI入门:神经网络实战----AutoEncoder

前言我们使用的仪器、设备都是有误差的,所以我们拿到的原始数据也都是有误差 (噪音) 的。误差有正有负,但总的结果一般都是在真实结果附近。那么我们怎么才能去掉噪音得到真实结果呢?这就要我们的AutoEncoder出马了。什么是AutoEncoder,为什么要用AutoEncoderAutoEncoder是一个蝴蝶状的神经网络结构,通过中间的瓶颈把输入数据中的噪音压缩除去,最后再重新放大生成与原始数据相同尺寸的图片,这就是AutoEncoder,中文翻译为自动编码器。从这段文字的描述来看,AutoEnc

2020-12-21 12:32:14 504

原创 AI入门:神经网络实战----卷积神经网络

前言我们使用的MNIST数据集中的数据大体是这样的:有效的像素只占据28 * 28个像素中的很小一部分。另外,即使是有效的像素之间,它们也不一定有联系,一般来说,一个像素点只会跟它附近的像素有联系,与比较远的像素没有联系。上一节,我们使用全连接把输入层与第二层相连接,单单这一层的连接数就有784 * 256 = 20万个。这个数据是比较大的,事实上也是非常浪费的。如果我们能够把这些有效像素提取出来,则我们减少大量计算,同时提高准确率。再进一步,其实我们可能只需要知道几个点,就可以判断这个图像表示什么数

2020-12-18 15:33:27 636 1

原创 AI入门:神经网络实战----全连接神经网络

MNIST数据集介绍MNIST数据集是0~9等十个数字的手写数字数据集,它有50000张训练图片,10000张测试图片。每一张图片都是28 * 28像素的灰度图。这些图片都被预处理成一维的数组: 28 * 28 = 784,每一个像素都是0~255之间的一个整数表示,每张图片都有对应的数字。这些图片和对应的数字分别被称之为x和label。这种有x和label一一对应关系的数据集称之为one-hot。编写针对MNIST数据集的神经网络相当于编写C、Python等语言中的Hello World程序,是基础的

2020-12-17 16:19:12 1153

原创 AI入门----tensor的基本运算

tensor的运算可以分为两类:① 与普通数据的计算、② 与tensor的运算tensor与普通数据的计算简单来说就是tensor中每一个数据都跟这个普通数据进行一次运算。而且运算符号与普通Python完全一致。值得注意的是,开根号运算等操作时,tensor中的元素一定要是float类型才行,不能是整数。当然,也可以对tensor数据进行一些自身的运算:向上(下)取整、取小数、四舍五入等。tensor与tensor的运算涉及矩阵运算。这些运算特别适合在GPU中进行。矩阵的乘法有三种,推荐使用mat

2020-12-17 16:00:22 2133

原创 AI入门----PyTorch的基本数据类型、数据的获得和生成

总的来说,除了String类型之外,Python中存在的数据类型,PyTorch中都有对应的数据类型。只不过PyTorch中的数据类型都是Tensor。PyTorch中的变量是用Variable定义。例如想要定义一个FloatTensor的变量,我们可以这样:先定义一个常量tensor,然后用Variable类包装一下即可:① w = Variable(torch.tensor([2.0, 3.0]), requires_grad = True)这个w是一维的,称之为张量。张量可以是一维、二维或多维

2020-12-17 15:57:49 279

原创 AI入门----PyTorch的结构

PyTorch中常用的模块的结构如下:1、torchvision包:① datasets:datasets中包含常用的数据集,例如MNIST,CIFA等;② models:models中包含一些经典的已经训练好的模型,例如VGG16,VGG19、ResNet等,这些模型主要是用来进行迁移学习的。关于迁移学习,我们将在后续章节中进行介绍。③ transforms:把数据集中的内容转化成tensor。2、torch包中主要包括四块:① autograd包。里面有用来定义PyTorch变量的Vari

2020-12-17 15:50:15 543

原创 AI入门----深度学习的软硬件配置

论软硬件配置的重要性深度学习被戏称为“炼丹”,所以用来训练深度学习的机器就被称为“炼丹炉”。古人炼丹的时候采用的原料都是混合物,使用的火分为“文火”和“武火”,也没有使用惰性气体保护。所有的物质、条件等都没有量的概念,甚至炼丹师都不知道各种物质之间发生了什么反应,所以在这样的条件下想要练出质量合格的丹药是难上加难。我们的深度学习之所以被称为“炼丹”,其实也是有原因的。例如,一个深度学习模型中使用多少层,每一层中神经元的个数、连接方式等都可以变化,都可以得到期望的结果,但是仔细去分析这些参数,却又完全无法

2020-12-17 15:49:01 4386

原创 AI入门:反向传播和梯度下降

上一节中提到,分类函数是神经网络正向传播的最后一层。但是如果要进行训练,我们只有预测结果是不够的,我们需要拿预测结果跟真实值进行对比,根据对比结果判断我们的神经网络是不是够好。也就是说我们需要在分类函数后面增加一层:计算损失值。计算损失值这一次才是神经网络真正的最后一层。有了损失值之后,我们反过来优化每一层的参数值----这就是反向传播。反向传播中的优化过程需要使用梯度下降算法。典型的梯度下降算法有SGD、Momentum、AdaGrad、RMSProp、Adam等,下面进行简单的描述:1、SGD是最典

2020-12-10 10:12:35 302

原创 AI入门:分类函数

分类函数是用于神经网络最后一层输出用的。神经网络的输出无非是二分类或者多分类。其中二分类使用Sigmoid函数,多分类使用Softmax函数。如果我们用1表示考试及格,0表示不及格。那么60分和100分都是及格,所以我们预测结果都是1。但显然100分更好。对于这样的情况,我们需要把结果用Sigmoid函数处理一下,得到01之间的一个概率值。当结果是00.5时,我们认为是0;0.5~1时,我们认为是1。而我们不仅仅是希望得到0或者1,我们更希望用Sigmoid函数处理得到的结果更加接近0或者1。对于Sof

2020-12-09 16:23:33 1956

原创 AI入门:激活函数

在讲解激活函数之前,我们先简单了解一下神经网络 (全连接层) 中前一层的数据经过什么处理,然后给下一层数据。假如x是输入值,y是第一层的结果,z是第二层的结果。y与x的关系、z与y的关系就是简单的一元一次方程:(1) y = a * x + b,a和b为常数(2) z = c * y + d,c和d为常数我们把这两个方程联合一下:z = c * (a * x + b) + d = (a * c) * x + (b * c + d)。我们发现z也可以用x的一元一次方程表示,所以z和x也是线性关系。以

2020-12-09 13:24:31 245

原创 AI入门:损失函数

接着上一节的内容继续写。对于y = f(x) = x^2 + 2 * x + 1这个方程,我们用代码重复计算1000次之后发现x 与-1非常接近,这时y = 0。这个结果与我们的预期非常接近。那么我们怎么判断我们的结论的好坏 (不是正确或错误) 呢?我们可以用我们的预测结果与真实结果之间差距进行衡量,简单来说就是定义一个损失函数:loss function。为什么叫损失函数呢?原因就是预测值与真实值之间多多少少会一定的差距,如果我们把这个预测值作为我们的结果,这就是误差,或者称之为“损失值”。神经网络很

2020-12-09 11:49:48 671

原创 AI基础篇:梯度下降法计算一元二次方程的最小值,以及PyTorch的引入。Python实现

我们知道:一元二次方程:y = f(x) = x^2 + 2 * x + 1 = (x + 1)^2,当x = -1时,f(x)达到最小值0。对方程求导数y’ = f’(x) = 2 * x + 2。也就是说y’随着x的变化而变化,当x = -1时,导数为0,而在这个时候,f(x)也恰好达到最小值。另外,当x = -4时,y = 9,导数y’ = -6。红色的直线是x = -4时, f(x)的切线。沿着导数y’的反方向移动可以到达x = -1,即到达f(x)的最小值0。相反,如果x = 2,y = 9

2020-12-05 18:42:49 2723 1

原创 开源文献管理软件MyJabref的介绍

MyJabref是模仿文献管理软件Jabref编写的一款开源文献管理软件。它兼容Jabref的数据格式、界面和操作习惯。相比Jabref,MyJabref的特点是:启动速度快,运行过程中不会弹出奇奇怪怪的窗口,不要求注册、不要求升级等,另外还能按照美国化学会(ACS)、德国应化、英国皇家化学会等出版社的要求输出参考文献的功能。还简化了Jabref中的部分操作。下表是两个软件的对比:软件主界面如下:设置成英文后,主菜单变成这样:需要配置的首选项非常少,而且基本上都可以使用默认选项:具体使用请下载后自

2020-12-01 12:11:20 357

原创 快速下载GitHub中的源代码

GitHub是一个源代码托管网站,我们经常需要到GitHub上下载东西,但是国内访问GitHub速度非常慢,下载速度很少超过10K。稍微大一点的项目都下不下来。怎么办?看到网上有修改Host文件的方法,尝试无效。后来看到可以用Gitee代替下载的方式,尝试发现效果很好,下载速度能到3M例如,要下载SSD的代码:https://github.com/balancap/SSD-Tensorflow但是网速很慢,从来没有下载成功过。可以先登录中国的Gitee网站:www.gitee.com。然后登录。登录

2020-11-24 17:23:06 676

原创 为RTX3080安装TensorFlow-gpu

听说NVIDIA发布了RTX30系列的显卡,其中3080的性价比最高,于是数数口袋中的银子,买了一台炼丹炉。主要配置:RTX3080显卡,10G显存;I7 CPU (10700K),32G内存。买来之后开始在win10上安装Python 3.6(Anaconda),然后安装CUDA11.1和CUDNN。好不容易安装好之后,发现安装的TensorFlow2.0-gpu无法调用显卡。顿时有一种吃了苍蝇的感觉。在网上一通搜索,发现好多人说安装tf-nightly-gpu可以解决问题,然而我就不行。后来再经过N

2020-11-24 17:06:45 3388 8

原创 迭代版的快速傅里叶转换 (FFT),C语言实现

这是迭代版的快速傅里叶转换 (FFT)。其实就是翻译了一下https://blog.csdn.net/weixin_33714884/article/details/94249560?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCo

2020-09-13 11:08:47 562

原创 Python制作gif动态图

想用C#做gif动态图,找了半天,没有能直接生成的方法,都需要用额外的dll文件。但是用Python倒是可以很简单的实现。参考https://blog.csdn.net/qq_42554007/article/details/108354167。实现方式很简单:1、准备多张图片。2、打开这些文件,得到image对象,用listImage依次添加这些图片的对象。3、保存成gif格式即可代码异常简单:#制作gif动态图listImage = []listImage.append(Image.op

2020-09-03 16:02:34 392

原创 C#在高分屏上让窗体程序忽略系统的显示缩放

最近写截屏软件,在win7下运行很正常,但是在win10下截取到的屏幕就变小了,图标、文字都变大了。找了好久,才发现win10默认显示缩放125%,而win7默认是100%。于是在网上找解决方案,基本上都是https://www.cnblogs.com/XuPengLB/p/8056974.html的代码:[STAThread] static void Main() { if (Environment.OSVersion.Version.Major >= 6) SetPro

2020-08-26 20:47:12 685 1

原创 递归版的快速傅里叶转换 (FFT),C语言实现

看了好多个版本的快速傅里叶转换 (FFT),看懂了理论部分,但是却无法把理论联系到代码。也许是我的水平太差了吧。网上看到的版本中大量使用位操作符<<和>>。开始的时候还真的反应不过来。这里,我不讲FFT的理论,只是实现一下递归版本的FFT实现。有网友说FFT是玄科学,我深表赞同。相同的代码,在A电脑里运行结果是正确的,用B电脑就错误。找了好久才发现只需要把两个数组申请很大的空间即可,但这是为什么呢?反正没人告诉我原因。下面是具体代码:#include <stdio.h>

2020-08-25 21:25:47 1132 1

原创 脉冲式核磁数据中计算基线高度:在大量点中找到基线高度,C#实现

做化学好多年,一直想为Researchers做点贡献。一直梦想着写个核磁软件,无奈无从下手。最近看到http://blog.sina.com.cn/s/blog_1349667240102wzrk.html上说起核磁文件的格式,我才有了开始写核磁软件的可能。写了两天了,能实现显示、积分的功能了。现在要寻找谱图的基线。核磁数据中1r中储存了65536个Y轴数据。其中X轴的数据是在-4~16之间均匀分布的。把所有这些数据画在一张图上就得到了上述核磁的原始谱图。怎样才能得到这个基线的高度呢。基线高度肯定不是谱

2020-08-19 14:37:06 664

原创 高效的截取部分图片,C#实现

最近写一个截图工具,其中主要的一段函数是指定两个点,从原图中截取这两个点所包围的矩形图片。我采用的是逐个读取原图中指定范围内的像素,然后搬运到新图片中。这个效率很低,例如截取整个屏幕大小的图片时,有明显的延时。代码如下://根据两个Point的坐标,对bmp进行截图。这是暴力算法,速度很慢public static Bitmap cutImage0(Bitmap bmp, Point startPoint, Point endPoint){ int startX = startPoint.X;

2020-08-16 15:53:59 1363

MyJabref源码和应用程序

MyJabref是一款用C#编写的文献管理软件,可以在Win7或以上平台运行。它模仿Jabref编写。MyJabref去除了Jabref上一些重复、用不上的功能,并在易用性、特色功能上进行改进。MyJabref的快捷键与Jabref保持一致,帮助用户很容易的从Jabref转移到MyJabref。MyJabref比Jabref速度快。

2022-12-09

处理并显示一维核磁的软件April

April是用来处理并显示一维核磁(NMR)的免费、开源软件。它的用户界面和操作习惯模仿Nuts和MestReNova。特色功能:1、可以一键处理谱图;2、自动输出谱图信息。本文件中包含源码和可执行文件。

2022-11-05

pdf处理工具:C版合并pdf.exe

1、这是wangeil007开发的处理pdf的工具,现在进行开源。任何人可以在这个软件的基础上进行修改、重新发布,而不需要向作者支付任何费用。作者也不对软件的用途和产生的后果负责。作者没有在本软件中插入任何广告和恶意代码、后门等。 2、本软件经过几年的编写、测试,现在已经比较稳定了。 3、本软件可以用于pdf的合并、插入页面、删除、提取、拆分、打印、排序、加密、解密等操作。 4、本软件利用开源框架IText5作为支持。

2022-01-20

连续截屏5.1.7z,适用于windows

自己写的一款连续截屏软件。用左键连续截屏,用右键取消,或者保持到桌面并用画图板打开截屏得到的图片。本软件包包含完整的源代码和应用程序。没有后门、没有病毒

2021-10-17

文献管理软件MyJabRef

用C#写的文献管理软件MyJabRef。它全面兼容开源软件Jabref的数据格式,在3000篇文献的规模下,启动速度是Jabref的5倍,兼容Jabref的操作习惯,还能导入Endnote的文献。能按照美国化学会(ACS),英国皇家化学会等期刊要求输出参考文献。

2020-12-01

中文大写数字,C#版本

C#版本,把数字转成中文大写。支持加减乘除等简单运算。无病毒,无广告。软件包中包含源代码和可执行文件。最大支持99999.99元。

2020-12-01

windows截屏工具

自己用C#写的截屏工具,不需要网络即可使用。而且可以连续截屏。软件包中包含源代码、以及可执行文件。需要Framework。

2020-12-01

Pdf转jpg.7z

用C#实现将pdf转化成jpg的功能。本软件包包括代码、以及可执行程序。软件小巧好用。自己写的软件。

2020-07-30

写给自家娃看的算法源码

写给自家娃看的算法配套源码。包括在CSDN上上传的每一个算法,经过验证无误。博主一个字一个字码出来的。包括二分查找、快速排序、堆排序、堆的各种用途、二叉树、并查集、Huffman树、Dijkstra、Bellman、Floyd等算法。

2020-07-30

空空如也

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

TA关注的人

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