c# 科学计算讲义

本文涵盖了C#编程的基础知识,包括无符号整形关键字、二维数组创建、switch语句用法、运算符重载限制、索引器、类型判断、访问级别、静态类、密封类、属性操作、事件机制、抽象方法、常量字段、foreach循环、代码方法参数传递、事件触发、抽象类应用、代码重用与扩展性。同时深入探讨了C#中事件、抽象方法、静态类、密封类等高级特性。

C#程序设计基础

1。c#对无符号整形提供了相应的关键字:uint ,ulong,ushort

2.创建二维数组的语法   int[,] sample=new int[20,50];

3.switch语句中表达式可以整型、枚举类型、string类型,不允许使用浮点数。

4。c#中运算符重载函数的运算符参数不允许使用ref和out修饰。

5。C#语言禁止对“=”进行运算符重载。

6。索引器

class MAT{

public int dim1,dim2;

public double[,] ele;

public MAT(int m,int n){

       dim1=m;

      dim2=n;

    ele=new double[m,n];

}

public double this[int index1, int index2]{

     get{

          return ele[index1,index2];

      }

     set{

           ele[index1,index2]=value;

       }

}

}

7. is 类型判断

bool result=instance is 类型名;

使用is关键字进行类型判断,能判断对象是否是指定的类型或派生类型,也可以判断是否实现了指定的接口,而且这个过程不会报错。

8。可访问级别

protected: 只有类型内部或从其派生的类型可以访问它,超出这个范围就不能访问了。

internal : 使用internal描述的类型和类型成员只在程序集内部是可见的,其效果在程序集内部等价于public,而在程序集外等价于private .这里的一个程序集相当于vs里面的一个项目,(注:一个解决方案下面可能有多个项目)。

在C#中定义一个类或一个数据成员没有指定访问级别时,默认的访问级别是internal的,而不是private或者public .

btw,复习一下Java中访问控制级别

java中无任何访问控制修饰符,默认为default。同一包下的类可操作。

protected变量:同一包下的类可操作。不同包下在以下情况也可操作:两个类是父子关系。

所以在java中访问权限级别为:private < default < protected < public

9。static class 静态类

在静态类中不能定义非静态的成员。一般对静态类不生成其对象,而且貌似也不能实例化。(构造函数对静态类来讲没有任何意义,因为静态类没有非静态数据成员)。

10。sealed class 密封类

被关键字sealed 修饰的类是密封类,密封类可以继承自其他类,但不能被继承,不能含有虚方法和抽象方法。

由于密封类不能被继承,不能被拓展,这可能会影响系统的可扩展性,的以实际中用得比较少。

11。在c#中,只有在属性的“set”代码块中,关键字value才有效,其他地方出现value必定是某个标识符,而不是关键字。

12。C#中的方法

一个方法中有若干个参数,对于值类型的参数,C#默认是按照值传递的,但可以使用关键字out或ref来实现按引用传递;对于引用类型的参数,永远是按照引用传递的。

tips:在编程过程尽量少用l因为其比较容易与1混淆。o类似。

ref和out的使用与区别 - JRoger - 博客园
http://www.cnblogs.com/sjrhero/articles/1922902.html

总结:

区别:

ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。

3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

out

当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。

若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。

不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。(这与ref不同,ref参数在方法体内不强制修改参数值,可修改,也可不修改。)

属性不是变量,不能作为 out 参数传递。

ref是    有进有出,而out是  只出不进。

13。事件

public event EventHandler NameChanged =null ;

EventHandler是事件采用的委托类型,“=null”表示事件的初始值为空,即相应的委托类型未绑定任何函数。

  • 定义相应的函数来触发事件,代码如下:

private void RaiseNameChangedEvent(){

     if(NameChanged!=null){

           //public delegate void EventHandler(object sender, EventArgs e);  触发事件的方法相当于是应用了EventHandler委托的语法。

          NameChanged(this,null);  

     }

}

从便于理解的角度看,可以将事件看作是一种比较特殊的手段,它是一种列表,能存储若干个委托对象,从而能动态地绑定若干个方法。

14。在c#中定义一个抽象方法

public abstract int Sum(int a,int b);   //没有函数体

抽象成员必须出现在抽象类中,而且在抽象类派生新类型时,所有的抽象方法必须重写以填充方法体。

抽象方法和虚拟成员是有区别的,抽象成员不能定义任何实质性的功能,必须被重载;而虚拟成员必须包含完整的代码结构,可以包含实质性功能,可以不被重载。

15。被const关键字修饰的成员字段为常数字段,可以使用”类型名称.字段名”的方式进行引用。

16。foreach循环结构   本质上是一个语法封装,而且不能在循环内更改元素的值。

foreach(string name in names)

转载于:https://my.oschina.net/ray1421/blog/648818

C#科学计算讲义-宋叶志-人民邮电出版社 内容概要 《C#科学计算讲义》较为详细地介绍了科学计算方法,并对算法给出了源代码。关于算法部分主要介绍了线性方程组的迭代解法与直接解法、正交变换与最小二乘计算方法、鲁棒估计、随机数的产生、插值法、非线性方程求解、多元非线性最优化算法、微分方程数值方法等内容。 本书还给出了C#程序设计的基本方法,并对科学计算中要用到的矩阵向量类的构造做了详细阐述。算法的实现本身不限于具体的语言,本书对于算法的描述是较为详细的,所以读者也很容易把算法改用Fortran、 MATLAB、C++、Java 等语言编程实现。 宋叶志、徐导和何峰编著的《C#科学计算讲义》适合作为大学理工科本科生或研究生计算方法、数值分析课程的教材或参考书。对于从事相关学科教学的教师,如果不熟悉现代编程语言,也可以选择本书作为工具书。本书还可以用作科研人员的工程计算工具书与算法集。另外,在一些需要进行数据处理与分析的公司,如数量金融、统计等行业,也可以选用本书作为培训教材,或直接应用书上的源代码进行软件开发。 书籍目录 第1章 C#程序设计基础  1.1 计算机、程序设计与算法  1.1.1 计算机结构  1.1.2 操作系统  1.1.3 机器语言与高级语言  1.1.4 程序设计与算法  1.2 C#历史与概述  1.2.1 C语言:结构化编程语言的高峰  1.2.2 C++语言: 面向对象与大型程序  1.2.3 Java语言:可移植、安全性与Internet  1.2.4 C#: .NET主打语言  1.3 集成开发环境介绍  1.4 面向对象程序设计  1.4.1 封装  1.4.2 多态  1.4.3 继承  1.5 数据类型与运算符  1.5.1 简单数据类型  1.5.2 数组  1.5.3 运算符  1.5.4 赋值运算符  1.6 程序控制结构  1.6.1 顺序结构  1.6.2 分支结构  1.6.3 循环结构  1.6.4 控制结构的嵌套  1.7 类的设计及对象实现  1.7.1 定义类  1.7.2 创建对象  1.7.3 方法  1.7.4 构造函数  1.7.5 析构函数与垃圾回收  1.8 运算符重载及索引器  1.8.1 运算符重载  1.8.2 索引器  1.8.3 面向对象思想在C#程序设计中的重要性  1.9 GUI编程  1.10 本章小结 第2章 线性方程组迭代解法  第3章 线性方程组的直接解法 第4章 正交变换与最小二乘计算方法 第5章 鲁棒估计 第6章 随机数 第7章 插值法 第8章 非线性方程数值解法 第9章 非线性最优化 第10章 常微分方程(组)的数值方法 附录A C# 数值代数类的抽象与设计  附录B 动态链接库与混合编程  B.1 静态链接库与动态链接库  B.2 C#调用Fortran动态链接库范例  B.3 调用可执行函数  附录C Linux下C#开发与跨平台编程介绍  C.1 Mono简介  C.2 Linux下C#IDE开发范例  参考文献 
C#科学计算讲义光盘源码,找了好久才收集到, VS2010版. 引言 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值