1.使用fsolve法,matlab内置的用于求解非线性方程组的数值法,即通过迭代不断地逼近真实值。该方法需要制定迭代的初始值。
function F=f(var)
m=0.234; n=0.32; p=0.42;
F=[var(1)+var(2)+p/n*var(2)*var(3)+var(1)*var(3)-m;
n/m*var(1)+var(3)+n/m*var(1)*var(2)+p/m*var(2)*var(3)-n;
p/m*var(2)+p/n*var(3)+p/m*var(1)*var(2)+p/m*var(2)*var(3)-p;
];
end
[x fval]
= fsolve(@diedai,[0.2 0.1
0.5],optimset('Display','iter'));%显示每次迭代的值
%
optimset函数:matlab函数库,用于设置参数及其取值
2.遗传算法可以用于求解优化问题,包括无约束的和有约束的,因此可以将它应用到方程组的求解问题,也可以是非线性方程组。用这种方法求解的关键是构造出目标函数,这是优化问题求解的基本点,可以简单地将各个函数的平方和作为目标函数,求其最小值即可,这样就转化成了一个最优化问题,
function
G=ga_equation_group(var)
f1=1/(1+(var(1)-var(2)).^2)+sin(pi*var(2)*var(3)/2)+...
exp(-((var(1)+var(3))/var(2)-2).^2);
f2=21.5+var(1)*sin(4*pi*var(1))+var(2)*sin(20*pi*var(2))-var(3);
f3=var(1)+2.0*var(2)+var(3)-24.0;
G=f1.^2+f2.^2+f3.^2;%构造目标函数
end
options=gaoptimset('PopulationSize',500,'Generations',1000,'StallGenLimit',1000,'TolFun',1e-100);%设置遗传算法中的一些参数
[v fval]=ga(@ga_equation_group,3,options); %调用遗传算法
此方法可以获得较快时间和较高的精度。
加载中,请稍候......