24小时热门版块排行榜    

查看: 679  |  回复: 6

sss668800

金虫 (小有名气)

[求助] Mathematica如何生成2D有界区域的坐标矩阵? 已有2人参与

如果是一个正方区域直接用Table[{i, j}, {i, 2.0, 3.0, 0.5}, {j, 400, 600, 100}]就可以了
得到:{{{2., 400}, {2., 500}, {2., 600}}, {{2.5, 400}, {2.5, 500}, {2.5,600}}, {{3., 400}, {3., 500}, {3., 600}}}

但是如果是一个直线围成的平行四边形区域,直接用Table:
Table[{i, j}, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}, {j, 400, 600,100}]
得;{{{2.3, 400}, {2.6, 500}, {2.9, 600}}}
仅有第一个函数0.003*j + 1.10起作用,而我希望的是一个0.003*j + 1.10,和0.003*j + 1.13直线围成的平行四边形区域,对每个j值均以0.5步长等分

如果Table[Table[i, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}], {j, 400, 600, 100}]
j确实起作用得到:{{2.3, 2.31, 2.32, 2.33}, {2.6, 2.61, 2.62, 2.63}, {2.9, 2.91, 2.92, 2.93}}
但是我需要的是坐标形式,不是单一的i,需要{i,j}形式
请问我应该怎么做才能达到和正方区域一样的结果?
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leicahfs

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
sss668800: 金币+6, ★★★很有帮助, 看来不同方法都可以,谢谢哈! 2015-08-16 09:41:48
xzhdty: 金币+2, 感谢参与 2015-08-17 07:39:45
可以Table[Table[{i, j}, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}], {j,400, 600, 100}]
得到了:
{{{2.3, 400}, {2.31, 400}, {2.32, 400}, {2.33, 400}}, {{2.6,  500}, {2.61, 500}, {2.62, 500}, {2.63, 500}}, {{2.9, 600}, {2.91, 600}, {2.92, 600}, {2.93, 600}}}
2楼2015-08-15 21:14:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
sss668800: 金币+4, ★★★很有帮助, 看来各种方法都可以啊,我再深入问一下你的方法 2015-08-16 09:49:05
xzhdty: 金币+2, 感谢参与 2015-08-17 07:39:56
2楼已经答对了,不过我能说其实这种情况一个Table就可以了吗?:
引用回帖:
Table[{i, j}, {j, 400, 600, 10}, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}] // ListPlot

Mathematica如何生成2D有界区域的坐标矩阵?
未命名-1.png

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
3楼2015-08-16 08:57:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sss668800

金虫 (小有名气)

引用回帖:
3楼: Originally posted by xzczd at 2015-08-16 08:57:34
2楼已经答对了,不过我能说其实这种情况一个Table就可以了吗?:


未命名-1.png
...

多谢回答
4楼2015-08-16 09:45:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sss668800

金虫 (小有名气)

引用回帖:
3楼: Originally posted by xzczd at 2015-08-16 08:57:34
2楼已经答对了,不过我能说其实这种情况一个Table就可以了吗?:


未命名-1.png
...

再问一下,直接用正序的:Table[{i, j}, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}, {j, 400, 600,100}]结果是{{{2.3, 400}, {2.6, 500}, {2.9, 600}}, {{2.31, 400}, {2.61, 500}, {2.91, 600}}, {{2.32, 400}, {2.62, 500}, {2.92, 600}}}
而用你的反序的:Table[{i, j}, {j, 400, 600, 100}, {i, 0.003*j + 1.10, 0.003*j + 1.13, 0.01}]
得到:{{{2.3, 400}, {2.31, 400}, {2.32, 400}, {2.33, 400}}, {{2.6, 500}, {2.61, 500}, {2.62, 500}, {2.63, 500}}, {{2.9, 600}, {2.91, 600}, {2.92, 600}, {2.93, 600}}}
正序少了{{2.33, 400}, {2.63, 500}, {2.93, 600}}这三项,是为什么呢?
5楼2015-08-16 09:48:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

引用回帖:
5楼: Originally posted by sss668800 at 2015-08-16 09:48:17
再问一下,直接用正序的:Table结果是{{{2.3, 400}, {2.6, 500}, {2.9, 600}}, {{2.31, 400}, {2.61, 500}, {2.91, 600}}, {{2.32, 400}, {2.62, 500}, {2.92, 600}}}
而用你的反序的:Table
得到:{{{2.3, 400} ...

因为你选了浮点数做为循环的上下界和步长。浮点数计算的顺序变化的时候引发的误差也常有不同,结果“正序”的时候那三项被浮点数计算引发的误差给挤出界了。你这个例子还算温和的,实际上这种误差还可以造成更严重的影响:
http://mathematica.stackexchange.com/q/14122/1871
解决这个问题的方法很简单:使用准确数。想要数值的话最后再N一下就行了:
CODE:
Table[{i, j}, {i, 3/1000*j + 110/100, 3/1000*j + 113/100, 1/100}, {j, 400, 600, 100}] // N

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
6楼2015-08-16 16:51:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sss668800

金虫 (小有名气)

引用回帖:
6楼: Originally posted by xzczd at 2015-08-16 16:51:28
因为你选了浮点数做为循环的上下界和步长。浮点数计算的顺序变化的时候引发的误差也常有不同,结果“正序”的时候那三项被浮点数计算引发的误差给挤出界了。你这个例子还算温和的,实际上这种误差还可以造成更严重 ...

非常感谢你的回复,分数两个回答的都给了,额外给你一朵红花哈!
7楼2015-08-17 00:38:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sss668800 的主题更新
信息提示
请填处理意见