Re: [問題]關於Solve的問題已回收
※ 引述《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
04/15 04:23, 1F
→
04/15 04:23, , 2F
04/15 04:23, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章