fortran求解雷诺方程_(C++实现)有限差分法(FDM)求解雷诺方程

1前言

今日所推文章得头条已经对所求解的模型和算法进行了简单的说明,此处不再赘述。在我们工科学生中用C++进行数值计算的貌似不多,但是许多的工科软件底层都是用C++或部分使用C++。C++作为一门广泛使用的语言,长久不衰。由于其学习成本偏高,很多人只是将其作为C with Class使用,有点大才小用。其实C++支持多种编程范式,例如面向过程、基于对象(带类的C)、面向对象(封装、继承、多态)、泛型,应用自由灵活多变,这也是其学习成本高的原因。但是,领悟了C++这些设计理念,再看看EOF的23种设计模式,上手其他语言就轻松加愉快了。本文采用C++语言、GCC6.2.0编译器进行求解。本期文章中已经有一篇采用C++(Eigen库)进行求解了,为何还要再写一篇了。因为C++很自由,对于同一个问题,其可以采用各种不同的方式进行实现。写完C++(Eigen库)后,其求解效率过低,加上没用上指针、引用等C++语言特性,不足以体现其强大,故而从新写了一篇,大量使用C++指针、引用、new、delete、模板、重载、STL、友元等语言特性,自己编写矩阵类Matrix及其成员函数,利用allocator类(STL)对内存进行精细管理,以达到提高效率的目的。哪为什么不用C++的内置数组?因为C++内置数组是在栈空间开辟内存,栈空间内存有限,不能够满足本程序中大型矩阵的保存和求解工作,allocator类是在堆空间开辟内存,内存管理稍微麻烦,但是可以进行大量数据的保存和运算。鉴于本文源码太长,微信中不便于观看,部分实现细节没有展示,如果需要源码,转发本文,将截图放到评论区,并留下邮箱,将会得到本文源码。

2矩阵类

使用模板特性,你就可以通过一个类生成整数数组、小数数组、字符数组等,而不需要对每种数组设计相应的类。通过友元重载输出操作符<

template<typename T> class Matrix;

template<typename T>

ostream& operator<< (ostream&, const Matrix<T>&);

template<typename T>

class Matrix

{

  friend ostream& operator<< <>(ostream&, const Matrix<T>&);//友元函数

private:

    T * matrix;

    int nx;

    int ny;

    void _create(T temp);//内存申请 矩阵初始化

public:

    allocator<T> alloc;

    void _free();//矩阵销毁与内存回收

    Matrix(int x=1,int y=1,T=1);//构造函数 默认初始化为全1矩阵

    Matrix& operator =(const Matrix &);//重载赋值运算操作符

    Matrix(const Matrix &);//复制构造函数

    ~Matrix();//析构函数

    T& operator ()(int ,int);//重载() 可以实现array(i,j)的方式访问矩阵元素

    T& operator ()(int ,int) const;// 函数重载

    int rows(){ return nx;}//返回行数

    int cols(){ return ny;}//返回列数

    void swap(int rowup,int coldown);//行交换函数

    void operator * (int a);//重载乘号 与系数相城

    void operator * (const Matrix&);//重载 乘号 与矩阵相乘

    void row_multiply(int firstrow,int secondrow,float a);//实现初等变换

    int max_row(int col);//返回某列中绝对值最大的行

};

#include"M

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值