三对角矩阵见百度https://baike.baidu.com/item/%E4%B8%89%E5%AF%B9%E8%A7%92%E7%9F%A9%E9%98%B5
简而言之就是形如A的矩阵为三对角矩阵
图片来自百度百科。
那么,如何通过c语言构建一个三对角矩阵,并进行简单的乘法计算呢?
最容易想到的思路是,既然矩阵中的元素可以根据位置坐标来确定,比如上图中的可以通过
来表示,那么,可不可在C语言中用形如A[m][n]的方式来表达呢?
实际上,在C语言中,这种A[m][n]的东西就是所谓的二维数组,http://c.biancheng.net/cpp/html/51.html说的比较清楚。
最简单也最容易实现的就是直接用静态的方式对二维数组赋值、运算啥的;但是,静态数组相较于动态数组,具有一定的局限性,详见:https://blog.youkuaiyun.com/Dariel/article/details/46118075
此时,问题来了,对于一位数组,很容易就能用malloc()进行动态内存分配,但是c语言中似乎并没有能够直接对二维数组进行动态内存分配的函数,那么要如何处理呢?
其实也很简单,由于二维数组的本质是“数组的数组”,两个不同维度的数组的关系类似于“包含”,那么,不妨先对其中一个数组进行内存分配,然后在对另一个数组进行内存分配,将其转化为2次一维数组的内存分配即可。
注意!对于二维数组A[m][n],必须先为行(m)分配内存,再为列(n)分配内存;释放的时候,必须先释放列(n),再释放行(m)。如果顺序相反,那么程序将会把列的地址给“擦除”,从而导致释放内存的时候找不到列的地址,进而导致segment fault,不要问我为什么知道的。
当然,在程序的最后,别忘了释放分配的内存。
嗯......好像也没啥好写的了,三对角矩阵本来也不是什么太难的东西,so show you my code:
#include<stdio.h>
#include<s