作业帮 > 综合 > 作业

matlab 迭代?x0=(sum(r*w*xi)/di)/(sum(r*w*xi)y0=(sum(r*w*yi)/di

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/18 17:09:34
matlab 迭代?
x0=(sum(r*w*xi)/di)/(sum(r*w*xi)
y0=(sum(r*w*yi)/di)/(sum(r*w*xi)
其中 r wi,yi,xi已知,其中di=sqrt((x0-xi)^2+(y0-yi)^2)
我这个是重心法求费用的 求偏导得到的,给出初始的x0,y0,利用迭代法怎么利用matlab修正x0,y0,并输出结果
求程序代码,
刚刚接触不太懂 自己写了 老是出错
我不知道应该怎样说
我习惯称其为数组
r是一个数,w,xi,yi,这三个是一个数组 里面分别有7个数据
r=0.8;
w=[6398014.98,6525900.99,3752178.53,1400985.31,2495271.42,1506266.52,1953408.82];
xi=[117.00,118.05,117.13,116.29,115.97,118.03,118.49];
yi=[36.65,36.78,36.18,37.45,36.45,37.36,37.46];
n=10;
Z=0.01 % Z 为x,y的迭代精度假设为0.01
x0=117.34;y0=36.75; %初值
d=zeros(7); %这里面由7个数据
while (1)
d(i)=sqrt((x0-xi(i))^2+(y0-yi(i))^2); %这块需要根据xiyi x0y0求出7个d来放在数组里面
x=(sum(r*w(i)*xi(i))/d(i))/(sum(r*w(i))/d(i)) %问题里面那个写错了应该是这个公式,
y=(sum(r*w(i)*yi(i))/d(i))/(sum(r*w(i))/d(i))
x0=x;y0=y; %其实我是由初始的x0y0得出d 然后在根据d求出xy,将xy分别赋值给x0y0,然后再求d .一直迭代 迭代一定次数 观察输出的 x0y0 和d ,x0y0无变化了就结束
%迭代公式 x(k+1)=(sum(r*w*xi)/di(k))/(sum(r*w*xi));
% y(k+1)=(sum(r*w*yi)/di(k))/(sum(r*w*xi));
% di(k+1)=sqrt((x(k)-xi)^2+(y(k)-yi)^2);
r=0.8;
w=[6398014.98,6525900.99,3752178.53,1400985.31,2495271.42,1506266.52,1953408.82];xi=[117.00,118.05,117.13,116.29,115.97,118.03,118.49]; yi=[36.65,36.78,36.18,37.45,36.45,37.36,37.46]; n=0;W=0.01 % W 为x,y的迭代精度假设为0.01
x0=117.34;y0=36.75; %初值
while (1)
di=sqrt((x0-xi).^2+(y0-yi).^2);
x=(sum(r*w.*xi./di))./(sum(r.*w.*xi))
y=(sum(r*w.*yi./di))./(sum(r.*w.*xi))
if abs(x-x0)>W && abs(y-y0)>W %若不满足迭代终止条件则继续迭代
x0=x;y0=y;n=n+1;
continue;
else
disp('迭代次数为:')
n
disp('x的迭代值为:');
x
break; %满足后输出结果并退出
end
end
%问题还是有些不清楚的,sum那个地方,我改了一下,不知道是你要表达的意思