作者e01234567 (伊武天泽)
看板MATLAB
标题[问题] 有限差分法绘图问题
时间Thu Nov 29 23:41:00 2012
在下是matlab的新手,今天晚上终於搞好怎麽用有限差分法。
不过教授要求用把方格里每次跌代的数据拿来绘图,制成动画
所以我猜数据应该要维持成原方格模式,
我用的方法比较笨,
假如边界值是这样好了
1 1 1 1 1
0.8 x7 x8 x9 1
0.5 x4 x5 x6 1
0.2 x1 x2 x3 1
0 0.1 0.25 0.9 1
我是把u1~u9周围加相除以四的部份拿出来算,之後再列出
9*9的大矩阵Ax=b的方式来求解
再输入matlab 用Jocobi法进行跌代进算,
但问题来了..我算出来的
新x值是以
x=[x1 x2 x3 x4 x5 x6 x7 x8 x9]' 的方式显现,
在想要写甚麽码来把他塞回原方格的位置,
而且边界值的部份是被我先抓出来手算过的,所以也不太知道该怎麽把边界值&新x值
组回原本的方格
向
1 1 1 1
0.8 newx7 newx8 newx9 1
0.5 newx4 newx5 newx6 1
0.2 newx1 newx2 newx3 1
0 0.1 0.25 0.9 1
这样子的方式来显现他,
for i=1:n^0.5
B(i,1:n^0.5)=x(1:n^0.5,1)
end
一开始是打算用这样的方式来写
B =
0.3508 0.5276 0.8187
0.3508 0.5276 0.8187
0.3508 0.5276 0.8187
ans =
0.3508
0.5276
0.8187
0.5874
0.7017
0.8589
0.8080
0.8562
0.9258
却跑出这样的东西....不知道该怎麽...
还是说从我一开始这样来解跌代的问题,就不太可能把数字塞回方格了呢?
而且我这样的方式很笨,今天只有九个未知数....
当如果有90个方程式的话,就得自己手算90个 再慢慢去输入A系数矩阵,
感觉上不是很好,
有没有其他更好的写法可以推荐^^?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.229.231
1F:推 CBET:xMat = rot90(reshape(x, 3, 3)); % 将 x 排回原来的位置 11/30 00:27
2F:→ CBET:B(2:(end-1), 2:(end-1)) = xMat; % 将排好的 x 塞回去 11/30 00:28
3F:→ e01234567:谢谢CBET大,帮大忙了,不过我要输入第二行的式子 11/30 00:55
4F:→ e01234567:B(2:(end-1), 2:(end-1)) = xMat 11/30 00:55
5F:→ e01234567:会出现Undefined function or variable 'B'.的讯息 11/30 00:59
6F:→ e01234567:是我要再设syms B之类的吗?还是先设定好B矩阵的唯度!? 11/30 00:59
7F:推 CBET:我这边 B 是指那 5x5 含边界值的矩阵,需要先定义好 11/30 01:03
8F:→ e01234567:不好意思我没用过不输入数字、代号,纯定义矩阵维度的 11/30 01:19
9F:→ e01234567:方法,是用eye ones 或是zeros randn 这些 随便定出B矩 11/30 01:19
10F:→ e01234567:阵吗? 11/30 01:19
11F:→ e01234567:还是说打好边界值,中间3*3那一块 就打个0给他就好吗? 11/30 01:20
12F:推 CBET:是的,中间那块给 0 就可以了,反正後面要用 xMat 取代 11/30 01:29
13F:→ e01234567:了解 谢谢 11/30 01:29
14F:→ e01234567:虽然说自己只能慢慢列矩阵 方程式 和自己补边界值 11/30 01:30
15F:→ e01234567:不过也是一个方法^^"学到了很多 谢谢 11/30 01:31
16F:→ e01234567:作业是中间是9*9 右边界还是 对x偏微=0 所以是90个方程 11/30 01:32
17F:→ e01234567:有得我算了orz.. 11/30 01:32
※ 编辑: e01234567 来自: 140.120.229.231 (11/30 10:33)
18F:推 tomichy:感觉好温馨 看见十几年前的东西... 11/30 13:30