2017-03-16 63 views
0

我創建了一個矩陣(或向量),它的成員是符號表達式(它的名字是A)。當我嘗試用x0 = [500 550 500 500 450 500 555 450]'而不是x = [x3 x4 x5 x6 y3 y4 y5 y6]'時,沒有任何反應。 x0doublexsym。 這是我的代碼:爲什麼在MATLAB中不能替代符號矩陣?

 A =            conj(((x3 - 500)^2 + (y3 - 300)^2)^(1/2)) 
                 conj(((x4 - 500)^2 + (y4 - 300)^2)^(1/2)) 
                 conj(((x5 - 500)^2 + (y5 - 300)^2)^(1/2)) 
conj(((y3 - 8623888390675025/17592186044416)^2 + (x3 - 1591228181075565/4398046511104)^2)^(1/2)) 
conj(((y4 - 8623888390675025/17592186044416)^2 + (x4 - 1591228181075565/4398046511104)^2)^(1/2)) 
conj(((y5 - 8623888390675025/17592186044416)^2 + (x5 - 1591228181075565/4398046511104)^2)^(1/2)) 
                 conj(((x3 - x4)^2 + (y3 - y4)^2)^(1/2)) 
                 conj(((x3 - x5)^2 + (y3 - y5)^2)^(1/2)) 
                 conj(((x4 - x5)^2 + (y4 - y5)^2)^(1/2)) 
                 conj(((x6 - 500)^2 + (y6 - 300)^2)^(1/2)) 
conj(((y6 - 8623888390675025/17592186044416)^2 + (x6 - 1591228181075565/4398046511104)^2)^(1/2)) 
                 conj(((x3 - x6)^2 + (y3 - y6)^2)^(1/2)) 
                 conj(((x4 - x6)^2 + (y4 - y6)^2)^(1/2)) 
                 conj(((x5 - x6)^2 + (y5 - y6)^2)^(1/2)) 


    for j = 1:length(x) 
     A = subs(A,x(j),x0(j)) 
    end 

我應該怎麼辦?

+0

這不可能是所有的代碼?大多數這是不可編譯的Matlab ... – Wolfie

+0

是的,這是我的一段代碼。我首先定義了x0和x。要確定x我第一次使用syms x3 x4 x5 x6 y3 y4 y5 y6。我不能在X中代替x而不是x代替A –

+0

我所有的代碼都非常多,我在這裏不能寫 –

回答

0

感謝所有的答案,我發現我的回答。我正在使用下面的循環,它運作良好。注意:爲避免'conj'在我使用的所有代碼中使用.'而不是'來獲得矩陣的轉置。 這個環節是非常有用的:simbolic-toolbox-how-to-avoid-conj-in-matrix

for i = 1:numel(A) 
      A(i) = subs(A(i),x,x0); 
    end 
0

你不能以這種方式將值分配給符號矩陣,

syms a b c 
x=[a b c] 
x= 
    [a, b, c] 

當你設置X值只是X本身改變:

x=[1,2,3] 
x= 
    [1,2,3] 

測試:

eval(a) 
ans= 
    a 

所以當你改變x值時,只是x本身值的變化(不是ab和c)

您必須分配值的b和c分別

a=1; b=2; c=3; 
eval(x) 
ans= 
    [1, 2, 3] 
+0

謝謝,但它的工作原理是這樣的: 'syms a b c; x = [a b c]; a = 1; B = 2; C = 3; x x = [a,b,c]' –

+0

@ mahdin75我更新了答案,您應該使用函數eval()來評估x –

+0

非常感謝,我用你的想法來解決,當我解決我會說你 –

相關問題