c#实现科学计算器 实现篇之常数表实现

常数表是用来在计算器中提供常数数据用的,为了使提供常数更加方便,所以设计常数表类。大家一定会发现,在这张表中除了常数外,还有许多变量,这里之所以叫常数表,是因为这些变量的值其实是用来替换表达式中的相应字符串的。
     /// <summary>
    
/// 常数及变量表
    
/// </summary>

     public   class  ConstantTable
    
{
        
public static double AX=0.0;    //数存储变量A
        public static double BX=0.0;    //数存储变量B
        public static double CX=0.0;    //数存储变量C
        public static double DX=0.0;    //数存储变量D
        public static double EX=0.0;    //数存储变量E
        public static double FX=0.0;    //数存储变量F
        public static double ANS=0.0;    //最终结果存储变量

        
public const double PI=Math.PI;    //常数PI
        public readonly static double EXP=Math.Exp(1);    //常数e
        /// <summary>
        
/// 保存浮点数到一个变量
        
/// </summary>
        
/// <param name="x">变量名</param>
        
/// <param name="Value"></param>

        public static void SaveTo(string x,double Value)
        
{
            
switch(x.ToUpper())
            
{
                
case "A":
                    ConstantTable.AX
=Value;
                    
break;
                
case "B":
                    ConstantTable.BX
=Value;
                    
break;
                
case "C":
                    ConstantTable.CX
=Value;
                    
break;
                
case "D":
                    ConstantTable.DX
=Value;
                    
break;
                
case "E":
                    ConstantTable.EX
=Value;
                    
break;
                
case "F":
                    ConstantTable.FX
=Value;
                    
break;
                
default:
                    ConstantTable.ANS
=Value;
                    
break;
            }

        }

        
/// <summary>
        
/// 从一个变量读取一个浮点值
        
/// </summary>
        
/// <param name="x">变量名</param>
        
/// <returns></returns>

        public static double GetFrom(string x)
        
{
            
switch(x.ToUpper())
            
{
                
case "A":
                    
return ConstantTable.AX;
                
case "B":
                    
return ConstantTable.BX;
                
case "C":
                    
return ConstantTable.CX;
                
case "D":
                    
return ConstantTable.DX;
                
case "E":
                    
return ConstantTable.EX;
                
case "F":
                    
return ConstantTable.FX;
                
default:
                    
return ConstantTable.ANS;
            }
        
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首部以C#讲解科学计算的书, 不过目前只有高清版的前四章. 引言 1 第1章 C#程序设计基础 9 1.1 计算机、程序设计与算法 9 1.1.1 计算机结构 9 1.1.2 操作系统 10 1.1.3 机器语言与高级语言 10 1.1.4 程序设计与算法 10 1.2 C#历史与概述 11 1.2.1 C语言:结构化编程语言的高峰 11 1.2.2 C 语言; 面向对象与大型程序 11 1.2.3 Java语言:可移植、安全性与Internet 11 1.2.4 C#;.NET主打语言 12 1.3 集成开发环境介绍 12 1.4 面向对象程序设计 16 1.4.1 封装 16 1.4.2 多态 16 1.4.3 继承 17 1.5 数据类型与运算符 17 1.5.1 简单数据类型 17 1.5.2 数组 17 1.5.3 运算符 17 1.5.4 赋值运算符 18 1.6 程序控制结构 18 1.6.1 顺序结构 18 1.6.2 分支结构 18 1.6.3 循环结构 20 1.6.4 控制结构的嵌套 21 1.7 类的设计及对象实现 21 1.7.1 定义类 22 1.7.2 创建对象 22 1.7.3 方法 22 1.7.4 构造函数 23 1.7.5 析构函数与垃圾回收 23 1.8 运算符重载及索引器 24 1.8.1 运算符重载 24 1.8.2 索引器 26 1.8.3 面向对象思想在C#程序设计中的重要性 27 1.9 GUI编程 28 1.10 本章小结31 第2章 线性方程组迭代解法 32 2.1 Jacobi 迭代法 32 2.1.1 基本原理 32 2.1.2 实验内容与数据 33 2.1.3 程序源代码 33 2.1.4 实验结论 37 2.2 Gauss-Seidel迭代法 38 2.2.1 基本原理 38 2.2.2 实验内容与数据 39 2.2.3 程序源代码 39 2.2.4 实验结论 43 2.3 逐次超松弛迭代法44 2.3.1 基本原理 44 2.3.2 实验内容与数据 44 2.3.3 程序源代码 45 2.3.4 实验结论 49 2.4 Richardson迭代法 50 2.4.1 基本原理 50 2.4.2 实验内容与数据 50 2.4.3 程序源代码 50 2.4.4 实验结论 54 2.5 广义Richardson迭代法 55 2.5.1 基本原理 55 2.5.2 实验内容与数据 55 2.5.3 程序源代码 55 2.5.4 实验结论 60 2.6 Jacobi超松弛迭代法 60 2.6.1 基本原理 60 2.6.2 实验内容与数据 61 2.6.3 程序源代码 61 2.6.4 实验结论 65 2.7 最速下降法 66 2.7.1 基本原理 66 2.7.2 实验内容与数据 66 2.7.3 程序源代码 67 2.7.4 实验结论 71 2.8 共轭梯度法 72 2.8.1 基本原理 72 2.8.2 实验内容与数据 72 2.8.3 程序源代码 72 2.8.4 实验结论 77 2.9 本章小结 77 第3章 线性方程组的直接解法 78 3.1 三角方程组 78 3.1.1 基本原理 78 3.1.2 实验内容与数据 79 3.1.3 程序代码 79 3.1.4 实验结论 83 3.2 高斯消去法 83 3.2.1 基本原理 83 3.2.2 实验内容与数据 84 3.2.3 程序源代码 84 3.2.4 实验结论 89 3.3 选主元消去法 90 3.3.1 基本原理 90 3.3.2 实验内容与数据 90 3.3.3 程序源代码 90 3.3.4 实验结论 96 3.4 Crout分解 97 3.4.1 基本原理 97 3.4.2 实验内容与数据 98 3.4.3 程序源代码 98 3.4.4 实验结论 103 3.5 Doolittle分解 103 3.5.1 基本原理 103 3.5.2 实验内容与数据 104 3.5.3 程序源代码 104 3.5.4 实验结论 108 3.6 追赶法计算三对角方程 109 3.6.1 基本原理 109 3.6.2 实验内容与数据 110 3.6.3 程序源代码 110 3.6.4 实验结论 114 3.7 行列式的计算 115 3.7.1 基本原理 115 3.7.2 实验内容与数据 115 3.7.3 程序源代码 115 3.7.4 实验结论 119 3.8 本章小结 120 第4章 正交变换与最小二乘计算方法 121 4.1 对称正定阵的Cholesky分解 121 4.1.1 基本原理 121 4.1.2 实验内容与数据 122 4.1.3 程序源代码 122 4.1.4 实验结论 126 4.2 不开平方的Cholesky分解 127 4.2.1 基本原理 127 4.2.2 实验内容与数据 127 4.2.3 程序源代码 127 4.2.4 实验结论 132 4.3 QR分解之Householder镜像变换方法 133 4.3.1 基本原理 133 4.3.2 实验内容与数据 134 4.3.3 程序源代码 134 4.3.4 实验结论 140 4.4 修正的Gram-Schimdt正交化方法 141 4.4.1 基本原理 141 4.4.2 实验内容与数据 142 4.4.3 程序源代码 142 4.4.4 实验结论 147 4.5 求解法方程计算最小二乘问题 147 4.5.1 基本原理 147 4.5.2 实验内容与数据 149 4.5.3 程序源代码 149 4.5.4 实验结论 157 4.6 QR分解法计算最小二乘问题 158 4.6.1 基本原理 158 4.6.2 实验内容与数据 159 4.6.3 程序源代码 159 4.6.4 实验结论 167 4.7 加权最小二乘与Gauss-Markov估计 167 4.7.1 基本原理 167 4.7.2 实验内容与数据 169 4.7.3 程序源代码 169 4.7.4 实验结论 178 4.8 具有先验信息的贝叶斯估计 178 4.8.1 基本原理 178 4.8.2 实验内容与数据 179 4.8.3 程序源代码 179 4.8.4 实验结论 189 4.9 工程应用中最小二乘法的实用方法 191 4.10 本章小结 192 第5章 鲁棒估计 193 5.1 M估计的IGGI方案 193 5.1.1 基本原理 193 5.1.2 实验内容与数据 194 5.1.3 程序源代码 196 5.1.4 实验结论 208 5.2 Hampel函数作标准等价权 210 5.2.1 基本原理 210 5.2.2 实验内容与数据 210 5.2.3 程序源代码 212 5.2.4 实验结论 224 5.3 Huber估计 227 5.3.1 基本原理 227 5.3.2 实验内容与数据 227 5.3.3 程序源代码 229 5.3.4 实验结论 241 5.4 本章小结 243 第6章 随机数 244 6.1 乘同余法均匀分布随机数发生器 244 6.1.1 基本原理 244 6.1.2 实验内容与数据 244 6.1.3 程序源代码 244 6.1.4 实验结论 248 6.2 混合同余法均匀分布随机数发生器 249 6.2.1 基本原理 249 6.2.2 实验内容与数据 249 6.2.3 程序源代码 249 6.2.4 实验结论 253 6.3 正态分布随机数 253 6.3.1 基本原理 253 6.3.2 实验内容与数据 254 6.3.3 程序源代码 254 6.3.4 实验结论 261 6.4 蒙特卡罗方法介绍 261 6.4.1 基本原理 261 6.4.2 实验内容与数据 262 6.4.3 程序源代码 262 6.4.4 实验结论 265 6.5 本章小结 265 第7章 插值法 266 7.1 拉格朗日插值 266 7.1.1 基本原理 266 7.1.2 实验内容与数据 266 7.1.3 程序源代码 266 7.1.4 实验结论 270 7.2 牛顿插值法 271 7.2.1 基本原理 271 7.2.2 实验内容与数据 271 7.2.3 程序源代码 271 7.2.4 实验结论 276 7.3 Hermite插值法 276 7.3.1 基本原理 276 7.3.2 实验内容与数据 277 7.3.3 程序源代码 277 7.3.4 实验结论 281 7.4 本章小结 281 第8章 非线性方程数值解法 282 8.1 Picard迭代法 282 8.1.1 基本原理 282 8.1.2 实验内容与数据 283 8.1.3 程序源代码 283 8.1.4 实验结论 285 8.2 牛顿迭代法 285 8.2.1 基本原理 285 8.2.2 实验内容与数据 286 8.2.3 程序源代码 286 8.2.4 实验结论 289 8.3 割线法 289 8.3.1 基本原理 289 8.3.2 实验内容与数据 290 8.3.3 程序源代码 290 8.3.4 实验结论 293 8.4 重根时的迭代改进 293 8.4.1 基本原理 293 8.4.2 实验内容与数据 294 8.4.3 程序源代码 294 8.4.4 实验结论 297 8.5 应用范例:债券到期收益率的计算 297 8.5.1 基本原理 297 8.5.2 实验内容与数据 298 8.5.3 程序源代码 298 8.5.4 实验结论 304 8.6 本章小结 304 第9章 非线性最优化 305 9.1 一维搜索之黄金分割法 305 9.1.1 基本原理 305 9.1.2 实验内容与数据 306 9.1.3 程序源代码 306 9.1.4 实验结论 310 9.2 连续抛物线插值法 311 9.2.1 基本原理 311 9.2.2 实验内容与数据 312 9.2.3 程序源代码 312 9.2.4 实验结论 316 9.3 多维非线性最优化牛顿下山法 317 9.3.1 基本原理 317 9.3.2 实验内容与数据 318 9.3.3 程序源代码 318 9.3.4 实验结论 325 9.4 最速下降法 327 9.4.1 基本原理 327 9.4.2 实验内容与数据 327 9.4.3 程序源代码 327 9.4.4 实验结论 333 9.5 变尺度之DFP方法 333 9.5.1 基本原理 333 9.5.2 实验内容与数据 335 9.5.3 程序源代码 335 9.5.4 实验结论 341 9.6 拟牛顿之BFGS方法 341 9.6.1 基本原理 341 9.6.2 实验内容与数据 342 9.6.3 程序源代码 342 9.6.4 实验结论 349 9.7 本章小结349 第10章 常微分方程(组)的数值方法350 10.1 经典Rung-Kutta方法 350 10.1.1 基本原理 350 10.1.2 实验内容与数据 351 10.1.3 程序源代码 351 10.1.4 实验结论 353 10.2 Gill方法 354 10.2.1 基本原理 354 10.2.2 实验内容与数据 355 10.2.3 程序源代码 355 10.2.4 实验结论 357 10.3 Rung-Kutta方法计算微分方程组 358 10.3.1 基本原理 358 10.3.2 实验内容与数据 359 10.3.3 程序源代码 359 10.3.4 实验结论 363 10.4 Adams-Bashforth三步三阶方法 364 10.4.1 基本原理 364 10.4.2 实验内容与数据 365 10.4.3 程序源代码 365 10.4.4 实验结论 371 10.5 Adams-Bashforth四步四阶方法 372 10.5.1 基本原理 372 10.5.2 实验内容与数据 372 10.5.3 程序源代码 372 10.5.4 实验结论 379 10.6 三阶Adams预测校正方法(PECE) 380 10.6.1 基本原理 380 10.6.2 实验内容与数据 381 10.6.3 程序源代码 381 10.6.4 实验结论 387 10.7 四阶Adams预测校正方法(PECE) 388 10.7.1 基本原理 388 10.7.2 实验内容与数据 389 10.7.3 程序源代码 389 10.7.4 实验结论 396 10.8 辛结构与哈密顿系统的辛算法介绍 397 10.8.1 基本原理 397 10.8.2 实验内容与数据 400 10.8.3 程序源代码 400 10.8.4 实验结论 405 10.9 本章小结 406 附录A C# 数值代数类的抽象与设计 408 附录B 动态链接库与混合编程 428 B.1 静态链接库与动态链接库 428 B.2 C#调用Fortran动态链接库范例 428 B.3 调用可执行函数 433 附录C Linux下C#开发与跨平台编程介绍 444 C.1 Mono简介 444 C.2 Linux下C#IDE开发范例 444
实验题目:计算器实验 二、实验目的: 1)熟悉.NET的编程方法,掌握项目的创建与使用及安装; 2)熟悉C#编程语言,字符串使用、自定义类、自定义类库等; 3)熟悉Windows应用程序类编程、事件驱动编程; 三、实验内容: 1)参照Windows提供的计算器工具,设计一个与之类似的程序;另外可参考运行效果下载(计算器Demo程序); 2)基本要求:实现“普通运算”功能,支持连续运算,如连续输入“2+3×5”后点击“等号”按钮进行运算其结果为25. 3)附加要求: A,支持“科学运算”功能,即输入达式时遵循运算符号的优先原则,连续输入“2+3×5”后点击“等号”按钮进行运算其结果为17; B,支持数字键盘(小键盘)输入功能(焦点不在文本框内时也支持键盘输入); 四、实验方法 经过用户的输入得到数学达式后,可选择以下方法计算结果: 方法1)不定义计算类方法,在程序中直接计算出结果。 方法2)在项目中设计一个计算类(CalculateClass),其中包含“普通计算”和“科学计算”功能,即输入数学运算达式字符串,返回计算结果。直接在项目中调用该类,输出计算结果。 方法3)在解决方案中增加一个类库(ClassLibrary)项目(在bin\debug下生成dll文件),其中包含计算类(CalculateClass),该类中包含两个方法(普通计算和科学计算),可以根据达式计算结果。然后在计算器项目中“引用”该类库中的类,输出计算结果; 点评:方法1代码重用性差;方法2代码重用性好,在项目内可方便使用;方法3代码重用性较好,能在不同的项目内重用。 五、实验说明 1)认真分析总结每个“按钮”点击之后的动作(对应的代码); 2)代码的共享:如数字按钮可以共享一个事件代码; 3)考虑操作性或实用性,如支持退格键、异常输入处理等; 4)为突出实验重点,可以不考虑数制转换、复合运算、括号运算等功能; 5)支持小键盘输入时,留意理解窗口的KeyPreview属性,即是否窗口接收键盘事件。另外实现时会涉及到“焦点隐藏”问题,以及按钮的键盘事件等。 6)“麻雀虽小,五脏俱全”,程序很容易出Bug,请认真调试; 7)要想达到界面有特点,不亚于在功能上下功夫。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值