FindRoot -символические результаты для числовых - PullRequest
0 голосов
/ 25 февраля 2010

Я использую оператор FindRoot. Моя проблема в том, что результаты только в символической форме. Как я могу получить Mathematica для сохранения результатов в виде вектора или список для удобного использования позже.

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 Ответ

1 голос
/ 25 февраля 2010

Чтобы развернуть вопрос Майкла, код, в том виде, в котором он существует в настоящее время, не выдает числовых значений, поскольку значения 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 [[i]] в:

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

Я думаю, вы имели в виду:

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

Вы хотели использовать корни, которые вы нашли в первом блоке кода? Если это так, вам нужно заменить.

r2=r;

с

r2=r /. roots;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...