用Broyden法解非线性方程组
时间:2026-01-21
时间:2026-01-21
四、(上机题)分别用Newton法和Broyden法求解下面非线性方程组
3x cos(xx) 0.5 0123
22 x1 81(x2 0.1) sinx3 1.06 0
1 e x1x2 20x3 (10 3) 03
(要求:用Matlab编程,并附上源代码及迭代五次的结果,初值可取(0.1,0.1, 0.1))
Broyden法:
function[t]=mybroyden(x0)
syms x y z;
x0 = transpose(x0);
%===============================
f1=3*x-cos(y*z)-0.5;
f2=x^2-81*(y+0.1)^2+sin(z)+1.06; % 定义要求解的函数
f3=exp(-x*y)+20*z+1/3*(10*pi-3);
F=[f1;f2;f3];
%===============================
Fx = subs(F,{x,y,z},x0);
dF = Jacobian(F); % 求雅克比矩阵
dFx = subs(dF,{x,y,z},x0);
A=inv(dFx);
k=0;
%===============================
%Broyden算法
while norm(Fx)>1e-10
x1=x0-A*Fx;
k=k+1;
if k==5
disp('迭代五次的结果为:') ; x1
elseif k>=100
disp('迭代次数过多,不收敛!'); return;
end
Fx1 = subs(F,{x,y,z},x1);
s=x1-x0;
r=Fx1-Fx;
A=A-((A*r-s)*s'*A)/(s'*A*r);
x0=x1;
Fx=Fx1;
end
%==============================
disp('非线性方程组的解为:')
x0 % 输出最后的解
输出结果为:
>> x0=[0.1,0.1,-0.1]; >> mybroyden(x0) 迭代五次的结果为: x1 = 0.5000 0.0000 -0.5236 非线性方程组的解为: x0 = 0.5000 0.0000 -0.5236