Re: [問題] 字串陣列的內容希望隨變數轉換已回收

看板MATLAB作者 (鴨鴨)時間16年前 (2009/11/17 19:55), 編輯推噓0(0022)
留言22則, 2人參與, 最新討論串2/2 (看更多)
我嚐試寫了一下 --------------------------------------------------------- for n = 1:10 eqation = ['eq', num2str(n),' = ???']; eval(eqation) end --------------------------------------------------------- 發現這樣寫要寫出eq的"等式" 但我本來的字串是不等式而且含有未知數 我這樣寫好像只能把變數帶進去運算再帶出來 我再寫寫看好了 謝謝大家 題目: A,B,C,D,E也是隨i改變的變數,F(1),F(2),F(3)是未知數 eq(i,:)='A*F(i+2)+B*F(i+1)+C*F(i)+D*F(i-1)+E*F(i-2)=Y(i)' 建立十個eqation解F(1),F(2),F(3)... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.35.45

11/17 04:50,
用eval看看? @@
11/17 04:50

11/17 10:53,
num2str
11/17 10:53
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.35.45

11/17 20:44, , 1F
文字陣列可能會出問題吧,eq(i,:)與eq(i+1,:)長度可能不同
11/17 20:44, 1F

11/17 20:45, , 2F
改用cell: eq{i,:}
11/17 20:45, 2F

11/17 21:06, , 3F
改變的只有字串中的 i 直(代入數字),建議使用「取代」方式
11/17 21:06, 3F

11/17 21:07, , 4F
eq='A*F(i+2)+B*F(i+1)+C*F(i)+D*F(i-1)+E*F(i-2)=Y(i)';
11/17 21:07, 4F

11/17 21:08, , 5F
for i=1:10, eq_i{i,:}=subs(eq,'i',num2str(i));end
11/17 21:08, 5F

11/17 21:19, , 6F
呃... 變成 sym 了...
11/17 21:19, 6F

11/17 21:21, , 7F
如果堅持要 cell char 型態,要先初始化
11/17 21:21, 7F

11/17 21:22, , 8F
eqi=cell(0);
11/17 21:22, 8F

11/17 21:22, , 9F
for i=1:10,eqi(i,1)=subs(eq,'i',num2str(i));end
11/17 21:22, 9F

11/17 21:27, , 10F
好的 我試試看 其實問題就是一直卡在不會取代= =
11/17 21:27, 10F

11/17 21:35, , 11F
不過f(i+1) 譬如i=3 就會變成 f((3)+1)有沒有辦法可以變
11/17 21:35, 11F

11/17 21:36, , 12F
成f(4)呢? 真的謝謝你 解決我部分很大的問題
11/17 21:36, 12F

11/17 21:40, , 13F
把 num2str 拿掉,直接用數字取代,好像 OK (sym=>cell)
11/17 21:40, 13F

11/17 21:48, , 14F
這樣OK!!!謝謝你!!!幫了我大忙!!!!!!!!!!!!!!!!!!!!!!:)
11/17 21:48, 14F

11/17 22:19, , 15F
那有沒有辦法同時把A,B,C,D那些也換掉呢!
11/17 22:19, 15F

11/17 22:19, , 16F
我試著重複寫兩次eqi(i,1)=subs(eq,'i',i);
11/17 22:19, 16F

11/17 22:20, , 17F
eqi(i,1)=subs(eq,'A',a);可是這樣是重新寫入eqi
11/17 22:20, 17F

11/17 22:31, , 18F
eqA=subs(eq,'A',A);eqB=subs(eqA,'B',B);
11/17 22:31, 18F

11/17 22:32, , 19F
eqC=subs(eqB,'C',C);eqD=subs(eqC,'D',D);
11/17 22:32, 19F

11/17 22:32, , 20F
eqE=subs(eqD,'E',E);eqi(i,1)=subs(eqE,'i',i);end;
11/17 22:32, 20F

11/17 22:32, , 21F
我寫這樣有成功 但是感覺有點蠢QQ
11/17 22:32, 21F

11/17 23:21, , 22F
subs(eq,{'i','A','B','C','D'},[i,A,B,C,D])試試
11/17 23:21, 22F
文章代碼(AID): #1B0ez8Sj (MATLAB)
文章代碼(AID): #1B0ez8Sj (MATLAB)