计算方法——C语言实现——追赶法求解非线性方程

最近在上计算方法这门课,要求是用MATLAB做练习题,但是我觉得C语言也很棒棒啊~

题目:

计算方法——C语言实现——追赶法求解非线性方程_第1张图片
一般三对角线性方程组的求解用这个方法,三对角线性方程组也称为带状矩阵,这方法基础上还是LU分解法,只是比LU分解法计算方法上简单一些。
使用VS2017,代码如下:

//使用追赶法求解线性方程组
#include "stdafx.h"
#include
#include "math.h"

double **A, *b, *x, *y,**L,**U;
unsigned int RANK = 4;
unsigned int makematrix()
{
	unsigned int r, c;

	printf("请输入矩阵行列数,用空格隔开:");
	scanf_s("%d %d", &r, &c);

	A = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
	for (int i = 0; i < r; i++)
		A[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++)
			A[i][j] = 0.0;
	}

	b = (double*)malloc(sizeof(double)*r);
	for (int i = 0; i < r; i++)
	{
		b[i] = 0.0;
	}
	x = (double*)malloc(sizeof(double)*c);
	for (int i = 0; i < c; i++)
	{
		x[i] = 0.0;
	}

	L = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
	for (int i = 0; i < r; i++)
		L[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++)
			L[i][j] = 0.0;
	}
	U = (double**)malloc(sizeof(double*)*r);//创建一个指针数组,把指针数组的地址赋值给a ,*r是乘以r的意思
	for (int i = 0; i < r; i++)
		U[i] = (double*)malloc(sizeof(double)*c);//给第二维分配空间
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++)
			U[i][j] = 0.0;
	}
	y = (double*)malloc(sizeof(double)*c);
	for (int i = 0; i < c; i++)
	{
		y[i] = 0.0;
	}
	return r;
}

void getmatrix(void)//输入矩阵并呈现
{
	printf("请按行从左到右依次输入系数矩阵A,不同元素用空格隔开\n");
	for (int i = 0; i < RANK; i++)
	{
		for (int j = 0; j=0; i--)
	{
		x[i] = (y[i] - A[i][i+1] * x[i + 1]) / U[i][i];
	}
	for (int i = 0; i

按设计的提示老老实实 输入题目的系数矩阵和常数向量后,得到运行结果:
计算方法——C语言实现——追赶法求解非线性方程_第2张图片

你可能感兴趣的:(计算方法)