Re: [問題]關於Solve的問題已回收

看板MATLAB作者 (alen)時間16年前 (2009/04/15 03:59), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《marknotcup (FuncSurface)》之銘言: : 問題一 : clc : clear all : A=[0.5 (3^0.5)/2;-(3^0.5)/2 0.5];B=[0.5;(3^0.5)/2];C=[1 0];D=0;E=[0 0;0 0]; : syms x y : G=[x;y]; : H=(A+G*C)^2; : F1='H1=0';F2='H2=0';F3='H3=0';F4='H4=0'; : Fa=subs(F1,{'H1'},{H(1)}); : Fb=subs(F2,{'H2'},{H(2)}); : Fc=subs(F3,{'H3'},{H(3)}); : Fd=subs(F4,{'H4'},{H(4)}); : [x y]=solve('Fa','Fb','Fc','Fd','x','y') : 執行後回傳 : x =[ empty sym ] : y =[] : 但改為[x y]= : solve('(1/2+x)^2+1/2*3^(1/2)*(-1/2*3^(1/2)+y)=0', : '(-1/2*3^(1/2)+y)*(1/2+x)-1/4*3^(1/2)+1/2*y = 0', : '1/2*(1/2+x)*3^(1/2)+1/4*3^(1/2) = 0', : '1/2*3^(1/2)*(-1/2*3^(1/2)+y)+1/4 = 0' : ,'x','y') : 執行回傳 : x = -1 : y = 1/3*3^(1/2) : 問題是我的Fa已經是(1/2+x)^2+1/2*3^(1/2)*(-1/2*3^(1/2)+y)=0了耶 : 就算改成Fa=char(Fa) 從sym格式轉成char還是沒辦法回傳正確數值 我試的可以耶,你要不要看一下錯誤訊息是什麼? 附上我的程式碼: clc clear all format compact A=[0.5 (3^0.5)/2;-(3^0.5)/2 0.5]; B=[0.5;(3^0.5)/2]; C=[1 0]; D=0; E=[0 0;0 0]; syms x y G=[x;y]; H=(A+G*C)^2; F1='H1=0';F2='H2=0';F3='H3=0';F4='H4=0'; Fa=subs(F1,{'H1'},{H(1)}); Fb=subs(F2,{'H2'},{H(2)}); Fc=subs(F3,{'H3'},{H(3)}); Fd=subs(F4,{'H4'},{H(4)}); [x y]=solve(char(Fa),char(Fb),char(Fc),char(Fd)) 結果訊息顯示: Warning: 4 equations in 2 variables. > In solve at 113 In Untitled1 at 18 x = -1 y = 1/3*3^(1/2) 我用的是Matlab 7.3.0.267(R2006b) OS 為 Windows XP : 問題二 : G = [-1;1/3*3^(1/2)] 2x1矩陣 : A = [0.5 (3^0.5)/2;-(3^0.5)/2 0.5] 2x2矩陣 : C = [1 0] 1x2矩陣 : 用手算的話 (A+G*C)^2=[0 0;0 0] : 當G的格式為 2x1 sym ans=(A+G*C)^2 : G = ans = : -1 [ 0, 0] : 1/3*3^(1/2) [ 0, 0] : 但是G轉為double格式後 ans=(A+G*C)^2 : G = ans = : -1.0000 1.0e-015 * 0.2213 0 : 0.5774 0 0.2213 : 看起來是誤差的問題..在double格式處理數據時,請問有什麼辦法可以解決類似這種問題呢 : 感謝各位!! 一個就是到最後結果才轉double (像你的方法1) 如果你要先轉的話,最後就需要設criterion去判斷為0 像是: ans(find(ans<10^-15)) = 0 這樣子 應該是有其他方法可以解決這個問題,不過小弟不知道,就需要其他板友補充了 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.20.160

04/15 04:23, , 1F
囧..我找到我的錯誤了solve('Fa','Fb','x','y')
04/15 04:23, 1F

04/15 04:23, , 2F
我的function多打了' ' 變成字元 = =
04/15 04:23, 2F
文章代碼(AID): #19vEiVBt (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #19vEiVBt (MATLAB)