52matlab技术网站,matlab教程,matlab安装教程,matlab下载

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3687|回复: 0
打印 上一主题 下一主题

两种求解方程组的方法

[复制链接]

123

主题

207

帖子

2996

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2996
跳转到指定楼层
楼主
发表于 2015-3-31 20:01:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 = [140 140 140 140 242 242 330 330 330 330 492 492];
Sigma = [0 0 0 0 1 1 0 0 0 0 1 1];
T = [55 55 55 55 20 20 -20 -20 -20 -20 20 20];
n = length(t);
x0 = [2.3063;0.1;320.0723];%选取初始值
options = optimoptions('fsolve','Display','iter');
[x,fval] = 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 = [f1;f2;f3];

end

%%%%%%%%%%%%%%%%%%下面为fminsearch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc

format long
%Beta x(1)
%Gamma x(2)
%Eta x(3)
global t Sigma T n

t = [140 140 140 140 242 242 330 330 330 330 492 492];
Sigma = [0 0 0 0 1 1 0 0 0 0 1 1];
T = [55 55 55 55 20 20 -20 -20 -20 -20 20 20];
n = length(t);
x0 = [2.3063;0.1;320.0723];%选取初始值
[x,fval] = 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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|52matlab技术网站 ( 粤ICP备14005920号-5 )

GMT+8, 2024-5-5 06:59 , Processed in 0.079008 second(s), 20 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表