BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #873同步于 2007/5/14
Matlab机器人发帖

[合集] 最小二乘法的问题

sunmoonstar
2007/5/14镜像同步0 回复
☆─────────────────────────────────────☆ 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 : 第二个问题: : 也可 : ................... 多谢大虾指点.
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。