返回信息流☆─────────────────────────────────────☆
ryo (流水无情) 于 (Sat Apr 14 15:51:38 2007) 提到:
问一下最小二乘的问题
求和( sqrt( (x(i)-x(j))^2+(y(i)-y(j))^2 )-D(i,j) )^2
其中D(i,j)已知,i,j=1:10
求这10个点的坐标(x(i),y(i)),使上面的式子的和取最小值,也就是一个最小二乘的问题。
我不知道如何使用lsqnonlin函数并编写这个m文件,
真急死我了,大家帮帮看,谢谢了
这个10个点的初始位置猜测已经知道了 :X0是一个10*2维矩阵
☆─────────────────────────────────────☆
liuxiaoming (liuxiaoming) 于 (Sat Apr 14 19:02:49 2007) 提到:
能不能把完整的题目给我???
你描述得我有点不明白
☆─────────────────────────────────────☆
ryo (最初的梦想) 于 (Sun Apr 15 18:07:11 2007) 提到:
【 在 liuxiaoming 的大作中提到: 】
: 能不能把完整的题目给我???
: 你描述得我有点不明白
谢谢这位同学:
D =
Columns 1 through 8
0 1.3482 5.0085 5.2577 1.7570 5.0502 3.3173 8.8060
1.3482 0 6.3006 6.0461 2.6694 5.8505 4.7262 10.4389
5.0085 6.3006 0 1.6859 6.0553 2.6412 4.2303 5.7901
5.2577 6.0461 1.6859 0 4.9308 0.9963 3.7100 4.3613
1.7570 2.6694 6.0553 4.9308 0 4.5072 2.4286 9.3222
5.0502 5.8505 2.6412 0.9963 4.5072 0 2.3534 4.3216
3.3173 4.7262 4.2303 3.7100 2.4286 2.3534 0 6.1921
8.8060 10.4389 5.7901 4.3613 9.3222 4.3216 6.1921 0
5.1480 6.2939 2.8735 1.3371 5.0141 0.5291 2.9107 3.8920
9.1152 10.4866 6.0059 4.6076 8.7351 4.7109 6.2311 0.2576
Columns 9 through 10
5.1480 9.1152
6.2939 10.4866
2.8735 6.0059
1.3371 4.6076
5.0141 8.7351
0.5291 4.7109
2.9107 6.2311
3.8920 0.2576
0 4.1468
4.1468 0
初始猜测的10个点(x(i),y(i))的坐标为
x0=
3.7948 -0.0950
5.1904 -0.4761
-0.4744 -2.6933
-0.9543 -1.0293
3.7435 1.5731
-0.7471 -0.0581
0.9997 1.4642
-5.2387 0.2065
-1.1693 -0.0107
-5.1446 1.1187
min 求和( sqrt( (x(i)-x(j))^2+(y(i)-y(j))^2 )-D(i,j) )^2 “求和”就是那个求和符号,这打不出来。
i=1:10
j=1:10
当上面那个求和的式子取最小值时,求出这10个点的坐标。
☆─────────────────────────────────────☆
liuxiaoming (liuxiaoming) 于 (Mon Apr 16 19:01:32 2007) 提到:
很抱歉,没做出来
☆─────────────────────────────────────☆
liuxiaoming (liuxiaoming) 于 (Thu Apr 19 14:51:58 2007) 提到:
已解决,发在你的信箱里。
☆─────────────────────────────────────☆
liuxiaoming (liuxiaoming) 于 (Fri Apr 20 12:07:56 2007) 提到:
%fun
function F=fun(x0)
x=x0;
F=zeros(10,10);
d=[ 0 1.3482 5.0085 5.2577 1.7570 5.0502 3.3173 8.8060 5.1480 9.1152 ;...
1.3482 0 6.3006 6.0461 2.6694 5.8505 4.7262 10.4389 6.2939 10.4866 ;...
5.0085 6.3006 0 1.6859 6.0553 2.6412 4.2303 5.7901 2.8735 6.0059 ;...
5.2577 6.0461 1.6859 0 4.9308 0.9963 3.7100 4.3613 1.3371 4.6076 ;...
1.7570 2.6694 6.0553 4.9308 0 4.5072 2.4286 9.3222 5.0141 8.7351 ;...
5.0502 5.8505 2.6412 0.9963 4.5072 0 2.3534 4.3216 0.5291 4.7109 ;...
3.3173 4.7262 4.2303 3.7100 2.4286 2.3534 0 6.1921 2.9107 6.2311 ;...
8.8060 10.4389 5.7901 4.3613 9.3222 4.3216 6.1921 0 3.8920 0.2576 ;...
5.1480 6.2939 2.8735 1.3371 5.0141 0.5291 2.9107 3.8920 0 4.1468 ;...
9.1152 10.4866 6.0059 4.6076 8.7351 4.7109 6.2311 0.2576 4.1468 0 ];
for i=1:10
for j=1:10
F(i,j)=(sqrt((x(i,1)-x(j,1))^2+(x(i,2)-x(j,2))^2)-d(i,j));
end
end
☆─────────────────────────────────────☆
ryo (最初的梦想) 于 (Sun Apr 22 10:43:37 2007) 提到:
【 在 liuxiaoming 的大作中提到: 】
: 已解决,发在你的信箱里。
我马上试试,谢谢这位同学
☆─────────────────────────────────────☆
ryo (最初的梦想) 于 (Sun Apr 22 17:07:27 2007) 提到:
【 在 liuxiaoming 的大作中提到: 】
: %fun
: function F=fun(x0)
: x=x0;
: ...................
有一点不太明白:
为什么
function F=fun(x0)
x=x0;
而不是
function F=fun(x)
x=x0;
☆─────────────────────────────────────☆
ryo (最初的梦想) 于 (Sun Apr 22 17:48:41 2007) 提到:
还有一个问题:
d=[ 0 1.3482 5.0085 5.2577 1.7570 5.0502 3.3173 8.8060 5.1480 9.1152 ;...
1.3482 0 6.3006 6.0461 2.6694 5.8505 4.7262 10.4389 6.2939 10.4866 ;...
5.0085 6.3006 0 1.6859 6.0553 2.6412 4.2303 5.7901 2.8735 6.0059 ;...
5.2577 6.0461 1.6859 0 4.9308 0.9963 3.7100 4.3613 1.3371 4.6076 ;...
1.7570 2.6694 6.0553 4.9308 0 4.5072 2.4286 9.3222 5.0141 8.7351 ;...
5.0502 5.8505 2.6412 0.9963 4.5072 0 2.3534 4.3216 0.5291 4.7109 ;...
3.3173 4.7262 4.2303 3.7100 2.4286 2.3534 0 6.1921 2.9107 6.2311 ;...
8.8060 10.4389 5.7901 4.3613 9.3222 4.3216 6.1921 0 3.8920 0.2576 ;...
5.1480 6.2939 2.8735 1.3371 5.0141 0.5291 2.9107 3.8920 0 4.1468 ;...
9.1152 10.4866 6.0059 4.6076 8.7351 4.7109 6.2311 0.2576 4.1468 0 ];
d这个矩阵我不想写在fun.m文件中,想在fun.m文件中直接从别处调用d.可以吗?
☆─────────────────────────────────────☆
liuxiaoming (liuxiaoming) 于 (Sun Apr 22 18:08:45 2007) 提到:
第一个问题显然的,x0是参数,它要传给x
第二个问题:
也可
先写一个数据文件data.m;
d =[ 0 1.3482 5.0085 5.2577 1.7570 5.0502 3.3173 8.8060 5.1480 9.1152 ;...
1.3482 0 6.3006 6.0461 2.6694 5.8505 4.7262 10.4389 6.2939 10.4866 ;...
5.0085 6.3006 0 1.6859 6.0553 2.6412 4.2303 5.7901 2.8735 6.0059 ;...
5.2577 6.0461 1.6859 0 4.9308 0.9963 3.7100 4.3613 1.3371 4.6076 ;...
1.7570 2.6694 6.0553 4.9308 0 4.5072 2.4286 9.3222 5.0141 8.7351 ;...
5.0502 5.8505 2.6412 0.9963 4.5072 0 2.3534 4.3216 0.5291 4.7109 ;...
3.3173 4.7262 4.2303 3.7100 2.4286 2.3534 0 6.1921 2.9107 6.2311 ;...
8.8060 10.4389 5.7901 4.3613 9.3222 4.3216 6.1921 0 3.8920 0.2576 ;...
5.1480 6.2939 2.8735 1.3371 5.0141 0.5291 2.9107 3.8920 0 4.1468 ;...
9.1152 10.4866 6.0059 4.6076 8.7351 4.7109 6.2311 0.2576 4.1468 0 ];
再写 myfun.m
function F=myfun(x0)
x=x0;
%d=dfun();
data; %注意,这就是你要存d的文件名
F=zeros(10,10);
for i=1:10
for j=1:10
F(i,j)=(sqrt((x(i,1)-x(j,1))^2+(x(i,2)-x(j,2))^2)-d(i,j));
end
end
最后是运行
x0=....;
lsqnonlin(@myfun,x0)
☆─────────────────────────────────────☆
ryo (最初的梦想) 于 (Sun Apr 22 18:26:12 2007) 提到:
【 在 liuxiaoming 的大作中提到: 】
: 第一个问题显然的,x0是参数,它要传给x
: 第二个问题:
: 也可
: ...................
多谢大虾指点.
这是一条镜像帖。来源:北邮人论坛 / matlab / #873同步于 2007/5/14
Matlab机器人发帖
[合集] 最小二乘法的问题
sunmoonstar
2007/5/14镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。