接此;
https://blog.csdn.net/bcbobo21cn/article/details/106674597

假设要自己编程实现Matlab仿真功能;那么,必然要实现一个一个的仿真组件;就是可拖动到仿真窗口的一个一个小方块组件;有共用
基本库;还有进一步的具体库;
    其中每一个组件,其实质是实现一种数学运算;目前这块没听说有类库之类的可调用的组件开发出来;
    先来看一个最最基本问题;如果实现一些基本组件的话,一般的数学和逻辑运算,原理还是不难,要具体编程实现一个个组件然后可连
线运算,初想一下巨复杂;
    基本加减乘除和逻辑与或非原理还是好理解;
    但是仿真必然包含的基本组件有积分器和微分器;就像学电路原理时,里面都有积分和微分组件;
    我们知道;常用基本函数的微分和积分都有固定公式;先看微分器;
    sin(x)的微分是cos(x);x平方的微分是2x,x^2 = 2x;斜线的微分是一根横线,y=3+4t,微分是,y=3;
    仿真组件就要实现一个微分器;如何编程实现一个微分器呢?
    这个并不是按前面公式来的;一个电路的微分器来说,它输入端有一个输入,瞬间同时,输出端就有一个值;如果输入端的序列是sin
(x),输出端的序列自然就是cos(x);如果输入端的序列是x^2,输出端的序列自然就是2*x;如果输入端的序列是x^3,输出端的序列自然就
是3*x^2;如果输入端的序列是一根斜线,输出端的序列自然就是一根横线;
    并不能等到输入端的值都收集齐,判断这是一个正弦序列,然后再在输出端输出一个余弦序列;
    就是不能按初等函数的微积分公式做这玩意;得按学微积分时 dy/dx 类似的那一套来;这块上学的时候好像听懂的人不多,都辜负了教授;

或者按数值微分的计算方法,如下图的公式来;或者按微积分数值计算方法,算来的也是一样;

下面来看一下初步的编程实现微分器的思路,并用mschart控件绘制曲线验证一下;

每个窗体使用2个mschart控件;第一个控件绘制一条数学曲线;然后按数值微分的计算方法对第一条曲线计算微分,结果绘制第二条曲线;看第二条曲线是否是第一条曲线的微分;

按数值微分的含义,一个函数某点的微分,等于 (y值增量-y值) / x变化量;程序里面直接算Y值增量,X变化量绘制到控件上都是1;然后把各点的微分值连接起来;Y纵轴,X横轴;

看sin(x)的微分;代码如下;

     private double pi = 3.14159265;......chart1.Series["Series1"].ChartType=SeriesChartType.Line;chart1.Series["Series1"].BorderWidth = 3;chart1.Series["Series1"].Points.AddY(Math.Sin(0));chart1.Series["Series1"].Points.AddY(Math.Sin(pi/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*2/8));           chart1.Series["Series1"].Points.AddY(Math.Sin(pi*3/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*4/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*5/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*6/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*7/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*8/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*9/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*10/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*11/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*12/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*13/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*14/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*15/8));chart1.Series["Series1"].Points.AddY(Math.Sin(pi*16/8));chart2.Series["Series1"].ChartType=SeriesChartType.Line;chart2.Series["Series1"].BorderWidth = 3;double d1 = Math.Sin(pi/8) - Math.Sin(0);double d2 = Math.Sin(pi*2/8) - Math.Sin(pi/8);double d3 = Math.Sin(pi*3/8) - Math.Sin(pi*2/8);double d4 = Math.Sin(pi*4/8) - Math.Sin(pi*3/8);double d5 = Math.Sin(pi*5/8) - Math.Sin(pi*4/8);double d6 = Math.Sin(pi*6/8) - Math.Sin(pi*5/8);double d7 = Math.Sin(pi*7/8) - Math.Sin(pi*6/8);double d8 = Math.Sin(pi*8/8) - Math.Sin(pi*7/8);double d9 = Math.Sin(pi*9/8) - Math.Sin(pi*8/8);double d10 = Math.Sin(pi*10/8) - Math.Sin(pi*9/8);double d11 = Math.Sin(pi*11/8) - Math.Sin(pi*10/8);double d12 = Math.Sin(pi*12/8) - Math.Sin(pi*11/8);double d13 = Math.Sin(pi*13/8) - Math.Sin(pi*12/8);double d14 = Math.Sin(pi*14/8) - Math.Sin(pi*13/8);double d15 = Math.Sin(pi*15/8) - Math.Sin(pi*14/8);double d16 = Math.Sin(pi*16/8) - Math.Sin(pi*15/8);chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d2);chart2.Series["Series1"].Points.AddY(d3);chart2.Series["Series1"].Points.AddY(d4);chart2.Series["Series1"].Points.AddY(d5);chart2.Series["Series1"].Points.AddY(d6);chart2.Series["Series1"].Points.AddY(d7);chart2.Series["Series1"].Points.AddY(d8);chart2.Series["Series1"].Points.AddY(d9);chart2.Series["Series1"].Points.AddY(d10);chart2.Series["Series1"].Points.AddY(d11);chart2.Series["Series1"].Points.AddY(d12);chart2.Series["Series1"].Points.AddY(d13);chart2.Series["Series1"].Points.AddY(d14);chart2.Series["Series1"].Points.AddY(d15);

y=3+3t的微分;t横轴;

            chart1.Series["Series1"].ChartType=SeriesChartType.Line;chart1.Series["Series1"].BorderWidth = 3;chart1.Series["Series1"].Points.AddY(0);chart1.Series["Series1"].Points.AddY(3);chart1.Series["Series1"].Points.AddY(6);chart1.Series["Series1"].Points.AddY(9);chart1.Series["Series1"].Points.AddY(12);chart1.Series["Series1"].Points.AddY(15);chart1.Series["Series1"].Points.AddY(18);chart1.Series["Series1"].Points.AddY(21);chart1.Series["Series1"].Points.AddY(24);chart1.Series["Series1"].Points.AddY(27);chart1.Series["Series1"].Points.AddY(30);chart1.Series["Series1"].Points.AddY(33);chart1.Series["Series1"].Points.AddY(36);chart1.Series["Series1"].Points.AddY(39);chart1.Series["Series1"].Points.AddY(42);chart1.Series["Series1"].Points.AddY(45);chart1.Series["Series1"].Points.AddY(48);double d1 = 3-0;double d2 = 6-3;double d3 = 9-6;double d4 = 12-9;double d5 = 15-12;double d6 = 18-15;double d7 = 21-18;double d8 = 24-21;double d9 = 27-24;double d10 = 30-27;double d11 = 33-30;double d12 = 36-33;double d13 = 39-36;double d14 = 42-39;double d15 = 45-42;double d16 = 48-45;chart2.Series["Series1"].ChartType=SeriesChartType.Line;chart2.Series["Series1"].BorderWidth = 3;chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d2);chart2.Series["Series1"].Points.AddY(d3);chart2.Series["Series1"].Points.AddY(d4);chart2.Series["Series1"].Points.AddY(d5);chart2.Series["Series1"].Points.AddY(d6);chart2.Series["Series1"].Points.AddY(d7);chart2.Series["Series1"].Points.AddY(d8);chart2.Series["Series1"].Points.AddY(d9);chart2.Series["Series1"].Points.AddY(d10);chart2.Series["Series1"].Points.AddY(d11);chart2.Series["Series1"].Points.AddY(d12);chart2.Series["Series1"].Points.AddY(d13);chart2.Series["Series1"].Points.AddY(d14);chart2.Series["Series1"].Points.AddY(d15);chart2.Series["Series1"].Points.AddY(d16);

y=x^2的微分;按初等函数微分公式是2x;看下按数值微分思路算出来的情况;

            chart1.Series["Series1"].ChartType=SeriesChartType.Line;chart1.Series["Series1"].BorderWidth = 3;chart1.Series["Series1"].Points.AddY(0);chart1.Series["Series1"].Points.AddY(2);chart1.Series["Series1"].Points.AddY(4);chart1.Series["Series1"].Points.AddY(9);chart1.Series["Series1"].Points.AddY(16);chart1.Series["Series1"].Points.AddY(25);chart1.Series["Series1"].Points.AddY(36);chart1.Series["Series1"].Points.AddY(49);chart1.Series["Series1"].Points.AddY(64);chart1.Series["Series1"].Points.AddY(81);chart1.Series["Series1"].Points.AddY(100);chart1.Series["Series1"].Points.AddY(121);chart1.Series["Series1"].Points.AddY(144);chart1.Series["Series1"].Points.AddY(169);chart1.Series["Series1"].Points.AddY(196);chart1.Series["Series1"].Points.AddY(225);chart1.Series["Series1"].Points.AddY(256);double d1 = 2-0;double d2 = 4-2;double d3 = 9-4;double d4 = 16-9;double d5 = 25-16;double d6 = 36-25;double d7 = 49-36;double d8 = 64-49;double d9 = 81-64;double d10 = 100-81;double d11 = 121-100;double d12 = 144-121;double d13 = 169-144;double d14 = 196-169;double d15 = 225-196;double d16 = 256-225;chart2.Series["Series1"].ChartType=SeriesChartType.Line;chart2.Series["Series1"].BorderWidth = 3;chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d1);chart2.Series["Series1"].Points.AddY(d2);chart2.Series["Series1"].Points.AddY(d3);chart2.Series["Series1"].Points.AddY(d4);chart2.Series["Series1"].Points.AddY(d5);chart2.Series["Series1"].Points.AddY(d6);chart2.Series["Series1"].Points.AddY(d7);chart2.Series["Series1"].Points.AddY(d8);chart2.Series["Series1"].Points.AddY(d9);chart2.Series["Series1"].Points.AddY(d10);chart2.Series["Series1"].Points.AddY(d11);chart2.Series["Series1"].Points.AddY(d12);chart2.Series["Series1"].Points.AddY(d13);chart2.Series["Series1"].Points.AddY(d14);chart2.Series["Series1"].Points.AddY(d15);chart2.Series["Series1"].Points.AddY(d16);

到此;从曲线看,计算数值微分的基本思路是没有问题的;第一个点有点问题,可能是第一个点算的不对,也可能是控件的使用有点问题;

把上面思路理清,做出一个通用数值微分计算函数,一个基本的微分器就实现了;或者完全理解一种数值微分的计算方法,做一个通用函数也一样;

如何编程实现一个基本的微分器相关推荐

  1. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...

    Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...

  2. java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:

    import java.util.ArrayList; import java.util.Scanner;/*** 7. 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:* 原始字 ...

  3. 编程第一个Apple Watch程序创建项目

    编程第一个Apple Watch程序创建项目 2.4  编程第一个程序 本节将通过编写第一个程序,为开发者讲解如何添加Watch应用对象.运行程序.界面设计.编写代码等内容本文选自Apple Watc ...

  4. java报告(一)编程打印一个三角形的乘法口诀表

    编程打印一个三角形的乘法口诀表(注意对齐),并练习对程序进行单步运行.断点调试等. 实验要求: 1. 在实验报告中给出程序运行结果截图. 2. 源程序代码附到实验报告的最后. 3. 认真填写实验报告并 ...

  5. 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)

    /*晕呀,竟然做了一天,还不知道怎样做出来的.....*/ package HomeWork; import java.util.Arrays; /*4.编程打印一个二维数组中所有元素的和,并打印最大 ...

  6. python计算长方体体积编程_计算体积 编程创建一个Box类(长方体) 联合开发网 - pudn.com...

    计算体积 所属分类:Windows编程 开发工具:Java 文件大小:4KB 下载次数:0 上传日期:2019-12-08 16:53:01 上 传 者:洛水天依- 说明:  编程创建一个Box类(长 ...

  7. 尾调用优化 java_基于Java8函数式编程求一个List的全部子集|尾调用优化解决递归性能问题...

    目录 基于函数式编程求一个List的全部子集 代码来自<Java8 in Action>,思路和其他递归解决方法一致,但不同的地方在concat方法 public static List& ...

  8. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法...

    本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string import math #判断是否素数的函数 def isPrime(n): ...

  9. sql编程接收一个集合_T-SQL是基于集合的编程方法的资产

    sql编程接收一个集合 介绍 (Introduction) This article is the third and last one of a series of articles that ai ...

最新文章

  1. matlab 时间序列模型稳定度检验
  2. java----代理机制或动态类的生成
  3. E. 存储过程(procedure)
  4. AI人的Home—TechBeat!!!
  5. 关于Apache Tomcat解决localhost was unable to start within 45 seconds
  6. 解决:mysql 连接报错 Authentication plugin ‘caching_sha2_password‘cannot be loaded
  7. jmeter远程启动命令_Jmeter命令行方式启动
  8. 国内第四大运营商中国广电成立:5G 192号段要来了!
  9. OpenGL学习(二)第一个OpenGL程序,绘制三角形
  10. python线程安全_线程,线程安全与python的GIL锁
  11. 九大类背包问题专题1---01背包问题(二维和优化一维法附代码)
  12. 34.Odoo产品分析 (四) – 工具板块(5) – 设备及联系人目录(1)
  13. 处置Linux下Oracle Tomcat 8080端口辩说
  14. Srm32 dwm1000 tdoa定位源码
  15. Clearcase no version selected issue
  16. MFC 通用对话框之字体对话框
  17. linux脚本 加密失效,shell脚本加密(使用shc)
  18. Java实现自动发送电子邮件 发送邮件验证码(附全部源码)
  19. 刷题笔记——青蛙跳台阶问题汇总
  20. 关于Python中rank()函数的理解

热门文章

  1. 用java做出32选7_用java做的一个彩票32选7的简单程序
  2. 纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等),里面很多涉及到CSS3的一些属性。
  3. Windows 技巧篇-电脑蓝光过滤,颜色校准调节蓝光,电脑源头过滤蓝光,保护眼睛,护眼软件原理
  4. 操作系统中的零拷贝与java中的使用
  5. 结构对齐--__packed与#pragma pack
  6. x VDC(x=3、5、6、8、12、24、48)继电器的引脚连接方式
  7. MATLAB 求图像的极大值极小值,平均值
  8. 一二三维矩阵的拼接问题
  9. android网页无法定位吗,在android中,js 无法定位 html页面的某元素
  10. 微信小微商户获取申请状态