%% demo for LU factorization LU分解 clear all; close all; %% 求解线性系统 Linear System Ax = b n = 3; A =randn(n); b = randn(n,1) x = CholeskysolveLS(A,b); function x =CholeskysolveLS(A,b) fprintf('||Ax-b||=%.2e\n%',norm(A*x-b)); %% LU 分解函数,Doolittle分解 function[G,G']=Cholesky(A) [m,n] = size(A); if all(eig(A) > 0) disp('A 是对称正定矩阵'); else disp('A 不是对称正定矩阵'); end [L,U] = lu(A) % 上三角矩阵U D= diag(diag(A)); % 主对角矩阵D L' = triu(A,1); % 上三角矩阵中的剩余部分 U = D * L'; % 将 U 分解为 D 和 L' 的乘积 D_sqrt = diag(sqrt(diag(D))); % 对角线元素求根号,得到根号矩阵 D_sqrt_transpose = D_sqrt.'; % 求根号矩阵的转置 D = D_sqrt * D_sqrt_transpose; % 将D分解为两个根号矩阵相乘的形式 G=L*D_sqrt A=G*G' end %% LU 求解线性系统 function x = CholeskysolveLS(A,b) [G,G']=Cholesky(A); [m,n] = size(A); y = zeros(n,1); x = zeros(n,1); for i = 1:n y(i) = b(i); for j = 1:i-1 y(i) = y(i) - y(j)*G(i,j); end end for i = n:-1:1 x(i) = y(i); for j = i+1:n x(i) = x(i) - G'(i,j)*x(j); end x(i) = x(i) / G(i,i); end end文件: hw1.m 行: 13 列: 13 运算符的使用无效。
时间: 2024-03-10 13:51:08 浏览: 61
MIT线性代数Linear Algebra公开课笔记 第四章 矩阵的LU分解(lecture 4 Factorization into A = LU)
这个错误提示是因为在 Cholesky 函数中的 G=L*D_sqrt 和 A=G*G' 这两行代码中,缺少了分号,导致运算结果被输出了,从而引发了语法错误。正确的代码如下:
```
function [G,G'] = Cholesky(A)
[m,n] = size(A);
if all(eig(A) > 0)
disp('A 是对称正定矩阵');
else
disp('A 不是对称正定矩阵');
end
[L,U] = lu(A); % 上三角矩阵U
D = diag(diag(A)); % 主对角矩阵D
L' = triu(A,1); % 上三角矩阵中的剩余部分
U = D * L'; % 将 U 分解为 D 和 L' 的乘积
D_sqrt = diag(sqrt(diag(D))); % 对角线元素求根号,得到根号矩阵
D_sqrt_transpose = D_sqrt.'; % 求根号矩阵的转置
D = D_sqrt * D_sqrt_transpose; % 将D分解为两个根号矩阵相乘的形式
G = L * D_sqrt;
G' = D_sqrt_transpose * L';
end
```
同时,你可能需要在行首添加 "function x = CholeskysolveLS(A,b)" 和 "end",以定义和结束该函数。
阅读全文