作业帮 > 综合 > 作业

用matlab编程一次范数最小法迭代

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 15:57:37
用matlab编程一次范数最小法迭代
b=[1,0;0,1;1,0;0,1;-1,1;-1,0],l=[0,0,4,-197,-193,2]',p=[0.91,0,0,0,0,0;0,0.59,0,0,0,0;0,0,0.43,0,0,0;0,0,0,0.37,0,0;0,0,0,0,0.42,0;0,0,0,0,0,0.25],x=inv(b'*p*b)*b'*p*l,v=b*x-l,x=v'*p*v/4,w=1/abc(v),然后每次算出来的w*p得到新的p在重复前面的计算,迭代100次,毕业设计.
答案显示每次迭代的w和v ,写错了,其中不是abc(v)是abs(v)
=[1,0;0,1;1,0;0,1;-1,1;-1,0];
l=[0,0,4,-197,-193,2]';
p=[0.91,0,0,0,0,0;0,0.59,0,0,0,0;0,0,0.43,0,0,0;0,0,0,0.37,0,0;0,0,0,0,0.42,0;0,0,0,0,0,0.25];
for i=1:100
x=inv(b'*p*b)*b'*p*l;
v=b*x-l
x=v'*p*v/4;
w=1/abc(v)
p=w*p;
end
%%这里的abc是你自己定义的函数?如果不是的话,matlab没有这个函数,你要用什么的话自己改过来.
再问: 谢谢,那个我写错.是abs函数,还有这个程序运行不了提示 Error using ==> mtimes Inner matrix dimensions must agree.
再答: abs函数也不对,v是一个列向量1/p就错误了,你想计算什么结果?我看看 如果是要算v的每一个元算绝对值的倒数的话,你可以试试1./abs(v),但这样的话w*p就没办法算了.....
再问: 哦,我知道了,w*p是p中不含0的元素乘以w
再答: 那w应该是一个数啊.... 不是一个向量。 用max(v)这种返回值是数的函数才行吧 你就告诉我求w这一步是干什么的?
再问: 比如说v第一次迭代求出来的V=[1,2,3,4,5,6]',v1=1,v2=2,根据w=1/abS(v),得到w1=1,w2=0.5,然后乘以p,得到p1=0.91,p2=0.245,然后就得到新的P矩阵了
再答: 了解了,将w扩展成对角阵再和p相乘就好 b=[1,0;0,1;1,0;0,1;-1,1;-1,0]; l=[0,0,4,-197,-193,2]'; p=[0.91,0,0,0,0,0;0,0.59,0,0,0,0;0,0,0.43,0,0,0;0,0,0,0.37,0,0;0,0,0,0,0.42,0;0,0,0,0,0,0.25]; for i=1:100 x=inv(b'*p*b)*b'*p*l; v=b*x-l x=v'*p*v/4; w=diag(1/.abc(v)) p=w*p; end