编程miu妈(miu妈的宝藏)

2023-11-08 14:22:57 数码极客 bianji01

 

实现“一次二阶矩演算点法”,可以用C、C++、C#,其他编程语言也可以

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

N=2;%变量个数

miu=[3854];%均值

v=[0.10.05];%变异系数

sgma=miu.*v;%方差

symsxy

g=sym(x*y-1140);%功能函数

jacg=jacobian(g,[x;y]);%计算雅可比矩阵

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

%选取beta,定义x0=miu

beta1=3.0;

xopt0=[3854];

alpha0=zeros(1,2);

[alpha1,xopt1,result]=calforbeta(initvalue,beta1,alpha0,xopt0,jacg,g);

ifresult==1

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

return

%再次假定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);

ifresult==1

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

return

%beta迭代求解

g1=gfunc(g,xopt1);

g2=gfunc(g,xopt2);

eps=0.1;%精度

whileabs(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;

ifresult==1

break

disp(可靠指标为:);

disp(beta2);

disp(最终验算点为:);

disp(xopt2);

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

disp(g2);

functiong_out=gfunc(g,x_in)

%功能函数值计算

x=x_in(1);

y=x_in(2);

g_out=eval_r(g);%函数值

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

functiong_out=jacgfunc(jacg,x_in)

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

x=x_in(1);

y=x_in(2);

fori=1:2

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

%将以上内容保存为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;

while1

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

ifabs(gfunc(g,xopt0))

alpha1=alpha0;

xopt1=xopt0;

result=1;

break;

%计算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达到精度则退出循环

ifsum1<0.001|sum2<0.001

alpha1=alpha0;

xopt1=xopt0;

break;

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

本回答由提问者推荐

这样的数据该怎么理解?

s hcg是每个人不一样的 你隔天去抽血翻倍就是正常的,孕酮不是很高,下次抽血看涨了就应该说没什么

这样的数据该怎么理解?

s hcg是每个人不一样的 你隔天去抽血翻倍就是正常的,孕酮不是很高,下次抽血看涨了就应该说没什么

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告