matlab 计算变异系数,[转载]用Matlab编的计算结构可靠指标的改进一次二阶矩法程序(验算点法)...

题目:编制改进一次二阶矩法计算可靠指标的程序,并给出算例,要求提供源程序,算法语言不限。

选取的算例为:z=g(x,y)=x*y-1140,其中x,y服从正态分布,μx=38,Vx=0.1,

μy=38,Vy=0.05

本程序采用Matlab编写。

选取β1=3.0,β2=2.5

计算结果为:可靠指标β=4.2672,最终验算点为:(22.8430 ,

49.9060),在验算点处功能函数值为:1.2354e-004

%保存为strRlbt.m,在Matlab命令窗口中输入strRlbt执行即可

N = 2;%变量个数

miu = [38

54];%均值

v = [0.1

0.05];%变异系数

sgma = miu .*

v;%方差

syms x y

g = sym('x * y -

1140');%功能函数

jacg = jacobian( g

,[x;y]);%计算雅可比矩阵

initvalue =

[miu;v;sgma];%用作函数参数

%选取beta,定义x0=miu

beta1 = 3.0;

xopt0 = [38 54];

alpha0 =

zeros(1,2);

[ alpha1 , xopt1 , result ] =

calforbeta( initvalue , beta1 , alpha0 , xopt0 , jacg , g

);

if result == 1

disp('第一次假定的饧次煽恐副辏');

return

end

%再次假定beta

beta2 = 2.5;

xopt0 = miu - beta2 * alpha1

.* sgma;

gvalue =

jacgfunc(jacg,xopt1);

alpha0 = (sgma .* gvalue) /

sqrt(sum((sgma .* gvalue).^2));

[ alpha2 , xopt2 , result ] =

calforbeta( initvalue , beta2 , alpha0 , xopt0 ,

jacg , g );

if result == 1

disp('第二次假定的饧次煽恐副辏');

return

end

%beta迭代求解

g1 =

gfunc(g,xopt1);

g2 =

gfunc(g,xopt2);

eps = 0.1; %精度

while abs(g2) >

eps

temp =

beta2;

beta2 = beta2 -

(beta2 - beta1)/(g2 - g1) * g2;

beta1 =

temp;

[ alpha2 , xopt2 ,

result ] = calforbeta( initvalue , beta2 , alpha1

, xopt1 , jacg , g );

temp =

g2;

g2 =

gfunc(g,xopt2);

g1 =

temp;

if result ==

1

break

end

end

disp('可靠指标为:');

disp(beta2);

disp('最终验算点为:');

disp(xopt2);

disp('在验算点处功能函数值为:');

disp(g2);

function g_out = gfunc( g ,

x_in )

%功能函数值计算

x = x_in(1);

y = x_in(2);

g_out =

eval_r(g);%函数值

%将以上内容保存为gfunc.m

function g_out = jacgfunc(

jacg , x_in )

%功能函数偏导数计算,即雅可比矩阵计算

x = x_in(1);

y = x_in(2);

for i = 1:2

g_out(i) =

eval_r(jacg(i));%1为对x的导数,2为对y的导数

end

%将以上内容保存为jacgfunc.m

function [ alpha1 , xopt1

,result ] = calforbeta( initvalue , beta0 , alpha0 , xopt0 , jacg ,

g)

%对选取的beta进行计算

result = 0;

N = length(xopt0);

alpha = alpha0;

xopt = xopt0;

%initvalue为初始值

miu =

initvalue(1,:);%第一行为均值

v =

initvalue(2,:);%第二行为变异系数

sgma =

initvalue(3,:);%第三行为方差

eps = 0.1;

while 1

%功能函数达到精度则退出循环,result=1表示计算出可靠指标

if

abs(gfunc(g,xopt0)) < eps

alpha1 = alpha0;

xopt1 = xopt0;

result = 1;

break;

end

%计算alpha和新的验算点xopt

gvalue =

jacgfunc(jacg,xopt);

sgmaz =

sqrt(sum((sgma .* gvalue).^2));

alpha0 = sgma .*

gvalue / sgmaz;

xopt0 = miu - beta0

* alpha0 .* sgma;

sum1 = sum((alpha -

alpha0).^2);

sum2 = sum((xopt -

xopt0).^2);

alpha =

alpha0;

xopt =

xopt0;

%醝和验算点xi达到精度则退出循环

if sum1 < 0.001 |

sum2 < 0.001

alpha1 = alpha0;

xopt1 = xopt0;

break;

end

end

%将以上内容保存为calforbeta.m

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值