matlab中的norm函数

来源:百度知道 编辑:UC知道 时间:2024/05/28 07:56:17
以下是一段求最值的程序,对这步 d=g1(1,1)^2+g1(2,1)^2;g1是个求出来的矩阵,我想直接用d=norm(g1)来求,该怎么求,该问题有们仁兄回答过,但他只是把d由符号转成数值了。
clc;clear
f='4*(m-5)^2+(n-6)^2';
x0=[1;1];
m=x0(1,1);n=x0(2,1);
fx=diff(f,'m');%对x求偏导数
fy=diff(f,'n');%对y求偏导数
g=[fx;fy];%梯度
g0=subs(g);%把符号变量转为数值
d0=(-g0);
for k=0:10
syms a ww
x1=x0+a*d0;
m=x1(1,1);n=x1(2,1);
a=solve(diff(subs(f)),'a');
x1=subs(x1);
m=x1(1,1);n=x1(2,1);
g1=subs(g);
c=g0(1,1)^2+g0(2,1)^2;
d=g1(1,1)^2+g1(2,1)^2;
b=d/c;
if subs(d)<0.0001
k%输出叠代次数
break;
else
d1=-g1+b*d0;
x0=x1;d0=d1;
clear a;
end
end
x1%最小点坐标
min=4*(m-5)^2+(n-6)^2

1、A为矩阵

norm(A)/norm(A,2),返回的是矩阵A的二范数,(二范数j就是矩阵A的2范数就是 A的转置矩阵乘以A特征根 最大值的开根号)
norm(A,1),返回矩阵的1泛数,就是最大一列的和;
norm(A,'inf') 返回矩阵的无穷泛数,也就是最大一行的和;
norm(A,'fro') 返回矩阵的Frobenius范数。
2、A为向量
norm(A,p) 返回向量A的p范数。即返回 sum(abs(A).^p)^(1/p),对任意 1<p<+∞.
norm(A) 返回向量A的2范数,即等价于norm(A,2)。
norm(A,inf) 返回max(abs(A))
norm(A,-inf) 返回min(abs(A))

norm好像只能处理数值型的变量,符号型的不行。
所以要用norm就必须把g1转换为数值型,这样反而会带来误差,还是不要用的好。