新增一个LU分解

 void Matrix::LU(vector<vector<double>> &l,vector<vector<double>> &u)
 {
     int index=0;
     for(auto &r:l)
     {
         r[index++]=1;
     }

     for(auto v:mat)
       u.push_back(v);

     double d=0.0;
     for(int k=0;k<rowSize-1;++k)
     {
         for(int i=k+1;i<=rowSize-1;++i)
         {
           l[i][k]=u[i][k]/u[k][k];
           for(int j=k;j<=colSize-1;++j)
             {
                 u[i][j]=u[i][j]-l[i][k]*u[k][j];
                 if(fabs(u[i][j])<1e-10)
                  u[i][j]=0;
                 
             }

         }
     }
 }

function linear_solver_comparison() % 参数设置 sizes = 10:10:100; methods = {'高斯消去', '列主消去', '三角分解', 'MATLAB内置'}; num_tests = length(sizes); times = zeros(length(methods), num_tests); errors = zeros(length(methods), num_tests); %% 新增单例验证部分 n_example = 10; [A_example, b_example] = generate_matrix(n_example, true); % 固定随机种子 fprintf('===== 单例验证(n=10) =====\n'); fprintf('系数矩阵A:\n'); disp(A_example); fprintf('右侧向量b:\n'); disp(b_example'); % 各算法求解演示 x_gauss = gaussian_elimination(A_example, b_example); x_pivot = gaussian_column_pivot(A_example, b_example); x_lu = lu_decomposition(A_example, b_example); x_matlab = A_example\b_example; fprintf('\n高斯消去解:\n'); disp(x_gauss'); fprintf('列主消去解:\n'); disp(x_pivot'); fprintf('三角分解解:\n'); disp(x_lu'); fprintf('MATLAB内置解:\n'); disp(x_matlab'); %% 原测试框架保留 fprintf('\n===== 开始规模测试 =====\n'); for i = 1:num_tests n = sizes(i); [A, b] = generate_matrix(n); % 随机生成矩阵 % 各方法测试(代码保持不变)... % ...(同原始测试循环代码) end plot_results(sizes, times, errors, methods); end %% 修改后的矩阵生成函数(增加种子控制) function [A, b] = generate_matrix(n, fixed) if nargin < 2 || ~fixed rng('shuffle'); else rng(0); % 固定种子模式 end A = rand(n) + n*eye(n); b = rand(n, 1); end %% 其他子函数保持不变...请写出完整代码,不要省略
最新发布
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值