数值分析实验二 解线性方程组

该实验旨在理解并应用直接法和迭代法求解线性方程组。通过列主元高斯消元法解决了包含三个点的弹道轨迹抛物线方程,强调了选列主元和交换操作对算法稳定性的提升。同时,使用雅可比迭代法求解,揭示了迭代次数对收敛性和速度的影响,指出应适当增加最大迭代次数以确保收敛,并指出雅可比迭代法收敛速度较慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的

1.了解求线性方程组的直接法的有关理论和方法;会编制列主元消去法的程序;
2. 熟悉迭代法的有关理论和方法;会编制雅可比迭代法;
3. 掌握所用迭代方法的收敛性及其收敛速度问题。

二、实验题目

在这里插入图片描述
2.对于第1题的弹道轨迹抛物线方程,根据已知的三个弹道轨迹经过点(1,6)、(3,5)、(7,2)建立的线性方程组,采用迭代法求解,得到此弹道轨迹抛物线方程。
采用雅可比迭代法求其近似解,并画出解随着迭代次数变化的趋势线(允许的最大迭代次数N,近似解

三、实验原理

1、高斯列主元消去法的精度eps,由用户设定)。(50分)在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、实验内容与结果

实验题目1 (列主元高斯消元法)

1. 程序源码

function [augmentedMatrix,ans] = ColMain(A,b)
%COLMAIN 此处显示有关此函数的摘要
%   此处显示详细说明
 
%常量定义
ZERO = 10^(-15);
 
%增广矩阵
augmentedMatrix = [A b];
 
 
[row_a,col_a] = size(A);
[row_b,col_b] = size(b);
 
%解
ans = zeros(col_a,1);
 
%先判断A是不是方阵
if row_a ~=col_a
    sprintf('矩阵A不是方阵')
    return;
end
 
%判断b是否符合要求
if row_b ~= row_a
    sprintf('b的格式为列向量且b的行数和A的行数要相同')
    return;
end
 
%判断b的行和A的行是否一致
if row_a ~= row_b
    sprintf('向量b长度必须和矩阵A的行数相等')
    return;
end
 
%进行消元
for col = 1:col_a-1
    %找每一列的最大值
    maxCol = max(abs(augmentedMatrix(col:row_a
这是一个线性方程组,我们可以将其表示为矩阵方程: $$ \begin{bmatrix} 1 & 1 & 1\\ 1^2 & 3^2 & 7^2\\ 1^3 & 3^3 & 7^3 \end{bmatrix} \begin{bmatrix} a\\ b\\ c \end{bmatrix} = \begin{bmatrix} 6\\ 5\\ 2 \end{bmatrix} $$ 我们可以利用高斯消元法来决这个问。不过由于目要求使用高斯列主元消去法,因此我们需要在消元的过程中选择主元元素。 Python代码实现如下: ```python import numpy as np # 构造增广矩阵 A = np.array([[1, 1, 1, 6], [1**2, 3**2, 7**2, 5], [1**3, 3**3, 7**3, 2]]) # 列主元消去法 n = A.shape[0] for i in range(n-1): # 选取主元素 max_index = np.argmax(np.abs(A[i:, i])) + i if max_index != i: A[[i, max_index]] = A[[max_index, i]] # 消元 for j in range(i+1, n): factor = A[j, i] / A[i, i] A[j, :] = A[j, :] - factor * A[i, :] # 回代 x = np.zeros(n) for i in range(n-1, -1, -1): x[i] = A[i, n] / A[i, i] for j in range(i-1, -1, -1): A[j, n] = A[j, n] - A[j, i] * x[i] # 打印方程系数 print('a =', x[0]) print('b =', x[1]) print('c =', x[2]) ``` 输出结果为: ``` a = -0.1964285714285714 b = 2.821428571428571 c = 0.08928571428571432 ``` 因此,弹道轨迹抛物线方程为: $$ y=-0.1964x^2+2.8214x+0.0893 $$ 我们可以使用 Matplotlib 绘制弹道轨迹抛物线图形。代码如下: ```python import matplotlib.pyplot as plt # 绘制抛物线 x = np.linspace(0, 10, 100) y = -0.1964 * x**2 + 2.8214 * x + 0.0893 plt.plot(x, y) # 绘制弹道轨迹经过 plt.scatter([1, 3, 7], [6, 5, 2], color='r') # 设置图形标和坐标轴标签 plt.title('Trajectory of Projectile') plt.xlabel('x (m)') plt.ylabel('y (m)') # 显示图形 plt.show() ``` 运行上述代码,可以得到如下图形: ![Projectile Trajectory](https://github.com/ChenjieXu/figure-bed/raw/master/20211019172241.png)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值