开源Math.NET基础数学类库使用(06)直接求解线性方程组

本文介绍了如何使用开源数学库Math.NET进行线性方程组的直接求解,包括数值分析的基本概念、Math.NET的源码分析以及实际解题示例。通过解构Math.NET中的ISolver接口和矩阵分解算法如LU,帮助读者理解和应用Math.NET解决线性方程问题。
摘要由CSDN通过智能技术生成

该文章为转载文章,原文文章地址,请点击此处

前言

在前几篇关于Math.NET的博客中(见上面链接),主要是介绍了Math.NET中主要的数值功能,并进行了简单的矩阵向量计算例子,接着使用Math.NET的矩阵等对象,对3种常用的矩阵数据交换格式的读写。一方面可以了解Math.NET的使用,另一方面以后也可以直接读取和保存数据为这两种格式,给大家的科研或者工作带来便利。接下来的文章将继续对Math.NET的功能进行讲解和演示,并附带一些数学方面的基础知识。毕竟很多人没有精力去研究Math.NET,那我就把我的研究心得一一写出来,方便后来人。

1.数值分析与线性方程

数值分析的基本含义与特点:

  数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。为计算数学的主体部分。数值分析有如下特点:
1·面向计算机
2·有可靠的理论分析
3·要有好的计算复杂性
4·要有数值实验
5.要对算法进行误差分析  

  数值分析的主要内容:插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法。
  
所以我们今天要解决的就是数值分析的一个很小但又最常接触到的部分,方程(组)的求解。方程(组)的求解有2种方法,一种是直接求解,一种是迭代求解。直接方法比较好理解,相当与使用公式进行直接计算,结果也比较精确。而另外一种是迭代方法。从最初的猜测,迭代方法逐次近似形式收敛只在极限的精确解。

  正如上面所说,方程(组)的形式很多,不同的形式以及实际要求的精度都可以使用不同的方法,而本文主要介绍最简单,也是最常见的线性方程的直接求解方法。
  

2.Math.NET解线性方程源码分析

本文首先对Math.NET中求解线性方程的相关源码进行分析,这样大家碰到了问题,也可以更好的查找源码解决,或者进行扩展,实现自己的一些特殊需求。Math.NET中MathNet.Numerics.LinearAlgebra.Factorization命名空间下有一个泛型接口:ISolver,就是解AX = B类型的线性方程的接口类型。该接口功能很多,看看下面的接口源代码和注释(本人进行了简单的翻译),就很清楚了。

using System;

namespace MathNet.Numerics.LinearAlgebra.Factorization
{
    /// <summary>形如AX = B的线性方程组求解的接口类型</summary>
    /// <typeparam name="T">泛型参数,支持类型有:double, single, <see cref="Complex"/>, 
    /// 以及 <see cref="Complex32"/>.</typeparam>
    public interface ISolver<T> where T : struct, IEquatable<T>, IFormattable
    {
        /// <summary>求解AX=B的线性方程组</summary>
        /// <param name="input">右矩阵<c>B</c>.</param>
        /// <returns>返回求解结果矩阵 <c>X</c>.</returns>
        Matrix<T> Solve(Matrix<T> input);

        /// <summary>求解AX=B的线性方程组</summary>
        /// <param name="input">右矩阵 <c>B</c>.</param>
        /// <param name="result">求解结果矩阵, <c>X</c>.</param>
        void Solve(Matrix<T> input, Matrix<T> result);

        /// <summary>求解AX=b的线性方程组</summary>
        /// <param name="input">等式的右边向量 <c>b</c>.</param>
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值