%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % 函数功能:用逆boyden秩1法求解2阶非线性方程
% % 作者:北疆紫云
% % 时间:2018年12月2日
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
close all;
% % 输入方程组矩阵系数,例如:ax1^2+bx1+cx2^2+dx2+e=0;
% % Ax1^2+Bx1+Cx2^2+Dx2+E=0;
% % 则系数矩阵为[a b c d e;A B C D E]
A= inputdlg({'输入方程组系数矩阵'},'输入',1,{'[1 0 0 -1 -1;1 -4 1 -1 3.25]'});
A= str2num(A{1});
% % 输入解得初始估值,例如:[0;0]
B= inputdlg({'输入方程组解的初值'},'输入',1,{'[0;0]'});
B= str2num(B{1});
% % 定义方程组的导数矩阵A
C=cell(2,2);
C{1,1}=[2*A(1,1);A(1,2)];
C{1,2}=[2*A(1,3);A(1,4)];
C{2,1}=[2*A(2,1);A(2,2)];
C{2,2}=[2*A(2,3);A(2,4)];
%%计算初始值A0
C0=zeros(2,2);
C0(1,1)=C{1,1}(1,1)*B(1,1)+C{1,1}(2,1);
C0(1,2)=C{1,2}(1,1)*B(2,1)+C{1,2}(2,1);
C0(2,1)=C{2,1}(1,1)*B(1,1)+C{2,1}(2,1);
C0(2,2)=C{2,2}(1,1)*B(2,1)+C{2,2}(2,1);
H0=inv(C0);
N=10;%%设置迭代次数
X=zeros(2,N);%%定义每次迭代解的序列;
H=cell(1,N);%%定义每次迭代方程导数矩阵逆的序列;
F=zeros(1,N);%%定义方程的代入值
r=cell(1,N);
y=cell(1,N);
AA=cell(1,N);%%定义方程导数矩阵
F=cell(1,N);
%%开始迭代过程
for k=1:N
if k==1
X(:,1)= B(:,1)-H0*A(:,5);%%计算X1
r0=X(:,1)-B(:,1);%%计算r0
AA{1,1}=[C{1,1}(1,1)*X(1,1)+C{1,1}(2,1) C{1,2}(1,1)*X(2,1)+C{1,2}(2,1);
C{2,1}(1,1)*X(1,1)+C{2,1}(2,1) C{2,2}(1,1)*X(2,1)+C{2,2}(2,1)];%%计算AA1
y0=AA{1,1}*r0;%%计算y0
H{1,1}=H0+((r0-H0*y0)*((r0)'*H0))/((r0)'*H0*y0);
else
F{1,k-1}=[A(1,1)*X(1,k-1)^2+A(1,2)*X(1,k-1)+A(1,3)*X(2,k-1)^2+A(1,4)*X(2,k-1)+A(1,5);
A(2,1)*X(1,k-1)^2+A(2,2)*X(1,k-1)+A(2,3)*X(2,k-1)^2+A(2,4)*X(2,k-1)+A(2,5)];
X(:,k)=X(:,k-1)- H{1,k-1}*F{1,k-1};
r{1,k-1}= X(:,k)-X(:,1);
AA{1,k}=[C{1,1}(1,1)*X(1,k)+C{1,1}(2,1) C{1,2}(1,1)*X(2,k)+C{1,2}(2,1);
C{2,1}(1,1)*X(1,k)+C{2,1}(2,1) C{2,2}(1,1)*X(2,k)+C{2,2}(2,1)];%%计算AA1
y{1,k-1}=AA{1,k}* r{1,k-1};%%计算y
H{1,k}=H{1,k-1}+(r{1,k-1}-H{1,k-1}*y{1,k-1})*( (r{1,k-1})'*H{1,k-1})/((r{1,k-1})'*H{1,k-1}*y{1,k-1});
end
end
例子:求解:
运算结果:
|
请发表评论