MATLAB使用高斯消元法计算方程组的解

devtools/2024/10/17 22:10:11/
function X = uptrbk(A,B)
% A,B是系数矩阵和列向量
% 求方阵A 含多少行(列) X是N*1列向量解
[~, N] = size(A);
X = zeros(N,1);
% C一行,N+1列
C = zeros(1,N+1);
% 增广矩阵Aug
Aug = [A,B];
%循环从第一列到倒数第二列
for p=1:N-1[~,j] = max(abs(Aug(p:N,p)));%返回每一列中的绝对值最大的数的索引j,Y是最大值C = Aug(p,:);%把p行所有元素存储到C中,1,2,3,...,N-1.%进行交换Aug(p,:)=Aug(j+(p-1),:); %Aug第p行改为j+p-1行,(相对索引).Aug(j+(p-1),:)=C;if Aug(p,p) == 0   %如果交换后,Aii为0'A was singular. No unique solution';breakend%交换后 进行计算for k = p+1:Nm = Aug(k,p)/Aug(p,p);Aug(k,p:N+1) = Aug(k,p:N+1)-m*Aug(p,p:N+1);end
end
% 通过回代计算方程的解for i = N:-1:1  X(i) = (Aug(i, N+1) - Aug(i, i+1:N) * X(i+1:N)) / Aug(i, i);  end  
end  % function X = uptrbk(A, B)  
%     % uptrbk Solves the linear equation system A*X = B using back substitution  
%     % A: Upper triangular matrix  
%     % B: Column vector  
%     
%     % 获取矩阵 A 的维度  
%     [N, ~] = size(A);  
%     % 初始化解向量 X  
%     X = zeros(N, 1);  
%     % 初始化增广矩阵 Aug  
%     Aug = [A, B];  
%     
%     % 高斯消元过程  
%     for p = 1:N-1  
%         % 寻找列 p 从当前行到最后一行的最大值  
%         [Y, j] = max(abs(Aug(p:N, p)));  
%         
%         % 交换当前行与最大值所在行  
%         if j+p-1 ~= p  
%             Aug([p, j+p-1], :) = Aug([j+p-1, p], :);  % 进行行交换  
%         end  
%         
%         % 检查非零主元  
%         if Aug(p, p) == 0  
%             error('Matrix A is singular. No unique solution exists.');  
%         end  
%         
%         % 消元过程  
%         for k = p+1:N  
%             m = Aug(k, p) / Aug(p, p);  
%             Aug(k, p:N+1) = Aug(k, p:N+1) - m * Aug(p, p:N+1);  
%         end  
%     end  
%     
%     % 回代过程,解出 X  
%     X(N) = Aug(N, N+1) / Aug(N, N);  
%     for i = N-1:-1:1  
%         X(i) = (Aug(i, N+1) - Aug(i, i+1:N) * X(i+1:N)) / Aug(i, i);  
%     end  
% end

其中,A是系数矩阵,B是右边列向量.


http://www.ppmy.cn/devtools/126570.html

相关文章

elementui+vue 多行数据的合并单元格

多行的合并&#xff0c;可以参考&#xff0c;改改就能用 html <template><el-table :data"students" :span-method"objectSpanMethod"><el-table-column prop"grade" label"年级"></el-table-column><el-…

Android13 添加运行时权限

在一些场景下&#xff0c;需要给app 添加运行时权限&#xff0c;这样就不需要在使用的时候再去点击授权。 直接上代码&#xff1a; --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.javab/services/core/java/com/android/server/pm…

推荐一个可以免费上传PDF产品图册的网站

​在数字化时代&#xff0c;企业将产品图册以PDF格式上传至网络&#xff0c;不仅便于客户浏览和下载&#xff0c;还能提升企业的专业形象。今天&#xff0c;就为您推荐一个可以免费上传PDF产品图册的网站——FLBOOK&#xff0c;轻松实现产品图册的在线展示。 1.注册登录&#x…

jmeter输出性能测试报告(常见问题处理与处理)

问题1&#xff1a;报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows R 意思是&#xff1a;报没有权限 处理&#xff1a; 操作非gui生成测试报告的方法 cmd界面进入到 jmeter的bin目录 jmeter –n –t -l -e –o …

快手游戏服务端C++开发一面-面经总结

1、tcp的重传机制有哪几种&#xff1f;具体描述一下 最基本的超时重传 超过时间就会重传 三个重复ACK 快速重传 减少等待超时、 接收方可以发送选择性确认 不用重传整段 乱序到达 可以通知哪些丢失 重复数据重传 2、override和final&#xff1f; override可写可不写 写出来就…

T10 tensorflow数据增强

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 T10 使用 TensorFlow 实现数据增强 在深度学习的图像分类任务中&#xff0c;数据增强是一种常用的技术&#xff0c;它通过对现有训练样本进行随机变换&#…

使用人体关键点驱动FBX格式虚拟人原理【详解】

文章目录 1、使用人体关键点数据驱动FBX格式虚拟人的总流程2、使用mediapipe检测人体关键点和插值平滑2.1 mediapipe检测人体关键点2.2 人体关键点的插值平滑 3、将2d关键点转为3d关键点4、旋转矩阵4.1 旋转矩阵4.2 旋转矩阵转为四元数 5、将旋转矩阵用于虚拟人的驱动5.1 基础旋…

Linux 操作系统——扫盲教程5

目录 更多的 Machine Related 指令 useradd passwd ps top nice pgrep ifconfig iostat iotop mpstat vmstat 更多的 Machine Related 指令 useradd 各位如果有自己装Linux发行版的经验&#xff0c;就会知道我们的操作系统需要注册一个用户&#xff0c;我们登陆上…