%% 直接法求线性方程组
% A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];%系数
% b=[13,-9,6,0]';
% x=A\b
%% 矩阵的分解求线性方程组
%UL分解法
% A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];%系数
% b=[13,-9,6,0]';
% [L,U]=lu(A);
% x=U\(L\b)
%QR分解法
% A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];%系数
% b=[13,-9,6,0]';
% [Q,R]=qr(A);
% x=R\(Q\b)
%QR分解法第二种格式
% A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];%系数
% b=[13,-9,6,0]';
% [Q,R,E]=qr(A);
% x=E*(R\(Q\b))
%% cholesky分解法
% A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];%系数
% b=[13,-9,6,0]';
% R=chol(A) %可以判段矩阵是否为正定
%% Jacobi迭代解法(雅克比)
% A=[10,-1,0;-1,10,-2;0,-2,10];
% b=[9,7,6]';
% [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)
% function[y,n]=jacobi(A,b,x0,eps)
% if nargin == 3
% eps=1.0e-6;
%
% else if nargin<3
% error
% return
% end
% D=diag(diag(A));
% L=-tril(A,-1);
% U=-triu(A,1);
% B=D\(L+U);
% f=D\b;
% y=B*x0+f;
% n=1;
% while norm(y-x0)>=eps
% x0=y;
% y=B*x0+f;
% n=n+1;
% end
% end
% end
%% Gauss-serdel迭代解法
% A=[10,-1,0;-1,10,-2;0,-2,10];
% b=[9,7,6]';
% [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)
% function[y,n]=gauseidel(A,b,x0,eps)
% if nargin==3
% eps=1.0e-6;
% elseif nargin<3
% error
% return
% end
% D=diag(diag(A));
% L=-tril(A,-1);
% U=-triu(A,1);
% G=(D-L)\U;
% f=(D-L)\b;
% y=G*x0+f;
% n=1;
% while norm(y-x0)>=eps
% x0=y;
% y=G*x0+f;
% n=n+1;
% end
% end
%% 求线性方程组的通解
% A=[1,1,-3,-1;3,-1,-3,4; 1,5,-9,-8];
% b=[1,4,0]';
% [x,y]=line_solution(A,b)
%
% function [x,y]=line_solution(A,b)
% [m,n]=size(A);
% y=[];
% if norm(b)>0
% if rank(A)==rank([A,b])
% if rank(A)==n
% disp('原方程组有唯一解x');
% x=A\b;
% else
% disp('原方程组有无穷个解,特解为x,其齐次方程组的基础解系为y');
% x=A\b;
% y=null(A,'r'); %加上'r'则求出的是一组最小正整数解,如果不加,则求出的是解空间的规范正交基。
% end
% else
% disp('方程组无解');
% x=[];
% end
% else
% disp('原方程组有0解x');
% x=zero(n,1);
% if rank(A)<n
% disp('方程组有无穷个解,基础解系为y');
% y=null(A,'r');
% end
% end
% end
%% 非线性方程求解
%单变量非线性方程求解
% f='x-1/x+5';
% fzero(f,-5) %-5迭代初值
%% 非线性方程组求解
% X1=fsolve('myfun',[-1,1,-1],optimset('Display','off'))
% X2=fsolve('myfun',[1,-1,1],optimset('Display','off'))
%% 无约束最优化问题求解
%求一元函数的极小值
% f=inline('x-1/x+5')
% [x,fmin]=fminbnd(f,-10,-1)
%求多元函数的极小值
% [u,fmin]=fminsearch('fxyz', [0.5 ,0.5 ,0.5 ]) %适用于目标函数高度不连续
% [u2,fmin2]=fminunc('fxyz', [0.5 ,0.5 ,0.5 ]) %适用于目标函数高度不连续
%% 有约束最优化问题求解
% x0=[0.5;0.5];
% A=[-1,-0.5;-0.5,-1];
% b=[-0.4;-0.5];
% lb=[0;0];
% option=optimset; option.LargeScale='off';option.Display='off';
% [x,f]=fmincon('fop',x0,A,b,[],[],lb,[],[],option)
作者:ChenBD
本文详细介绍了如何使用MATLAB高效地解决线性方程组问题,包括直接方法和迭代方法,适用于科学计算和工程领域的初学者。
10万+

被折叠的 条评论
为什么被折叠?



