⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled3.m

📁 非常经典的牛顿算法
💻 M
字号:


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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -