2010-02-24 65 views
0

我正在使用FindRoot語句。我的問題是 的結果只是符號形式。我怎樣才能讓mathematica將結果存儲爲向量 或列表以備後用。FindRoot -symbolic results to numeric

g[r_]:=(A^r - 1)/(A^r - B^r); 
func[r_]:= Piecewise[{{g[r],r<-.01 },{ g[r],r>.01} }]; 
roots = Table[0,{10}]; 
q= Table[pp,{pp,.01,0.1,0.01}]; 
Do[ roots[[i]]=FindRoot[func[r]== q[[i]],{r,0.9}];,{i,1,10}]; ******** 
Print[r/.roots];   *********** this prints out ok as a list 


Pa2=Table[0,{10}]; 
myPa2=Table[0,{10}]; 
i/:IntegerQ[i]=True;  
r2=r; 
h[r2_]:=(A^r2 - 1)/(A^r2 - B^r2); 
funcOC[r2_]:= Piecewise[{{h[r2],r2<-.01 },{ h[r2],r2>.01} }]; 
Do[ Pa2[[i]]=funcOC[r2[[i]]], {i,1,10} ]; 
Print[myPa2/.Pa2];  ****************symbolic notation is output 
+1

你能不能給一組'A','B'(小)示例值和'的r'好嗎? – 2010-02-25 01:08:57

+0

有幾段代碼似乎並不能達到目的。 I /:IntegerQ [I] = TRUE;和r2 = r;和r2 [[i]]。你是Mathematica的新手,你有Matlab還是FORTRAN的背景嗎? – Davorak 2010-02-25 01:43:51

+0

我已經使用Mathematica至少10年了。 Mathematica中的編程對我來說一直不太順利,我決定學習如何去做。我喜歡使用模塊 – 2010-02-28 03:09:38

回答

1

爲了擴大邁克爾的問題,代碼,因爲它目前代表,不會產生數值,因爲A和B的值尚未設置。

如果爲A和B選擇了值FindRoot不再返回符號答案。

g[r_] := (A^r - 1)/(A^r - B^r); 
A = .4; B = .5; 
func[r_] := Piecewise[{{g[r], r < -.01}, {g[r], r > .01}}]; 
roots = Table[0, {10}]; 
q = Table[pp, {pp, .01, 0.1, 0.01}]; 
Do[roots[[i]] = FindRoot[func[r] == q[[i]], {r, 0.9}];, {i, 1, 10}]; 
Print[r /. roots]; 

{-201.021,-198.983,-196.97,-194.98,-186.987,-178.398,-170.282,-162.61,-155.352,-148.484} 

爲了您的代碼,第二塊我想你的問題是由R2引起的[我]在:

Do[ Pa2[[i]]=funcOC[r2[[i]]], {i,1,10} ]; 

我想你的意思是:

Do[ Pa2[[i]]=funcOC[i], {i,1,10} ]; 

您是不是要找使用您在第一塊代碼中找到的根?如果是這樣你需要更換。

r2=r; 

r2=r /. roots;