MATLAB线性方程组求解

本文详细介绍了如何使用MATLAB高效地解决线性方程组问题,包括直接方法和迭代方法,适用于科学计算和工程领域的初学者。
%% 直接法求线性方程组
% 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值