两种求解方程组的方法
本帖最后由 matlab的旋律 于 2015-3-31 20:08 编辑求解3个方程组成的方程组,这里用到了两种不同的方法.一种是直接使用matlab里面的库函数fsolve(默认为信赖域法),另外一种是求这3个数值为0的符号方程的平方和的最小值方法,用的fminsearch函数.这两种方法都不是全局收敛的,因此对初始点的选取有比较严格的要求.程序如下,使用的matlab版本为2014b.
clear all
close all
clc
format long
%Beta x(1)
%Gamma x(2)
%Eta x(3)
global t Sigma T n
t = ;
Sigma = ;
T = ;
n = length(t);
x0 = ;%选取初始值
options = optimoptions('fsolve','Display','iter');
= fsolve(@Func,x0,options)%信赖域法
f = 0;
for k = 1:n
f = f + Sigma(k)*(log(x(1)) + (x(1) - 1)*log(t(k)) + x(2)*T(k) - x(1)*log(x(3))) - ...
(t(k)/x(3))^x(1)*exp(x(2)*T(k));
end
f
function F = Func(x)
global t Sigma T n
f1 = 0;
f2 = 0;
f3 = 0;
for k = 1:n
f1 = f1 + Sigma(k)*(1/x(1) + log(t(k)) - log(x(3))) - (t(k)/x(3))^x(1)*exp(x(2)*T(k))*log(x(1));
f2 = f2 + Sigma(k)*(-x(1)/x(3)) - t(k)^x(1)*exp(x(2)*T(k))*(-x(1))*x(3)^(-x(1) - 1);
f3 = f3 + Sigma(k)*T(k) - (t(k)/x(3))^x(1)*exp(x(2)*T(k))*T(k);
end
F = ;
end
%%%%%%%%%%%%%%%%%%下面为fminsearch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc
format long
%Beta x(1)
%Gamma x(2)
%Eta x(3)
global t Sigma T n
t = ;
Sigma = ;
T = ;
n = length(t);
x0 = ;%选取初始值
= fminsearch(@Func_1,x0)
f = 0;
for k = 1:n
f = f + Sigma(k)*(log(x(1)) + (x(1) - 1)*log(t(k)) + x(2)*T(k) - x(1)*log(x(3))) - ...
(t(k)/x(3))^x(1)*exp(x(2)*T(k));
end
f
function F = Func(x)
global t Sigma T n
f1 = 0;
f2 = 0;
f3 = 0;
for k = 1:n
f1 = f1 + Sigma(k)*(1/x(1) + log(t(k)) - log(x(3))) - (t(k)/x(3))^x(1)*exp(x(2)*T(k))*log(x(1));
f2 = f2 + Sigma(k)*(-x(1)/x(3)) - t(k)^x(1)*exp(x(2)*T(k))*(-x(1))*x(3)^(-x(1) - 1);
f3 = f3 + Sigma(k)*T(k) - (t(k)/x(3))^x(1)*exp(x(2)*T(k))*T(k);
end
F = f1^2 + f2^2 + f3^2;
end
页:
[1]