2010-02-24 52 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;