untitled3.m

来自「非常经典的牛顿算法」· M 代码 · 共 47 行

M
47
字号


syms x1;
syms x2;
syms fllop a0;


y=x1^2+4*x2^2;%目标函数
e=0.002;

b1=[2,2];%x0初始状态
y0=subs(y,'x1',b1(1));
y0=subs(y0,'x2',b1(2));  %在初始状态下的函数值

k=jacobian(y,[x1,x2])  %梯度

i=0;

while  (i==0)|(double(fanshu)-e>0)
    
       i=i+1
       b0=b1; 
       kk0=subs(k,'x1',b0(1));
       kk0=subs(kk0,'x2',b0(2));  %变量替换 表达式赋值,求梯度值大小

 s1=b0-a0*kk0;    %a0为搜索步长
s1=s1.^2;     %梯度的每个值都平方

m=[1,4];     %目标函数的系数
k1=m.*s1;      %将矩阵的两项相加得下面方程

z=k1(1)+k1(2);  %一维搜索函数方程
z1=diff(z);     %一维搜索函数方程求导

rot=solve(z1);    %求求导方程后的解,即a0的大小
b1=b0-rot*kk0  %x1状态       

y1=subs(y,'x1',b1(1));
y1=subs(y1,'x2',b1(2))   %求x1状态下的函数值

kk1=subs(k,'x1',b1(1));
kk1=subs(kk1,'x2',b1(2)); 
fanshu=sqrt(kk1(1)^2+kk1(2)^2);  %x1状态下梯度的范数大小 

end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?