4

가끔이 문제가 생기고 그 주위에 방법을 찾지 못했습니다. 일반적으로 방정식의 근원을 찾고 일부 매개 변수에 따라 그 루트를 최대화/최소화/플롯하려는 경우에 발생합니다. 그래서 코드를 하나의 모듈에 넣으려고합니다. 그래서 모든 것이 입력 번호로 실행될 수 있지만, Plot과 같은 함수에서는 작동하지 않습니다. 예를 들어 :Mathematica : FindRoot를 사용하여 모듈을 플로팅

f[din_] := Module[{d = din}, 
    sol = NDSolve[{y'[x] == y[x], y[0] == 1}, y[x], {x, 0, 10}]; 
    t1 = Flatten[FindRoot[y[x] - d /. sol, {x, 1}]]; 
    x /. t1 
    ] 
f[2] 
f[2.5] 
f[3] 
Plot[f[x], {x, 2, 3}] 

예상대로 번호와 F 모든 작업에 대한 호출하지만, 플롯 함수에서 f는 기호 'X'로 평가 될 것 - 또는 뭔가 그냥 오류를 많이 제공 본문.

어쨌든 주위에?

f[din_?NumericQ]:= 

를 나는 내가 할 수있는 모든 노력을하지만 아무것도 차이를 만들 것 같다 : 다음과 같이 정의를 만들기 같이 -

포럼 둘러보고 나는 비슷한 문제에 대한 몇 가지 제안을 발견했다. 나는 티카 8.0

답변

0

시도를 사용하고 있습니다 :

f[din_?NumericQ] := Module[{LocalDummy, Localy, LocalSol}, 
    Localy = y /. NDSolve[{y'[LocalDummy] == y[LocalDummy], y[0] == 1}, y, {LocalDummy, 0, 10}][[1]]; 
    LocalSol = FindRoot[Localy[LocalDummy] - din == 0, {LocalDummy, 1}][[1, 2]] ] 

plot

1

주요 수정 모듈 밖으로 sol = NDSolve[...을하는 것입니다. 도시 된 바와 같이, 모듈 자체도 간략화 할 수있다 : -

sol = NDSolve[{y'[x] == y[x], y[0] == 1}, y[x], {x, 0, 10}]; 

f[din_] := x /. FindRoot[y[x] - din /. sol, {x, 1}] 

Plot[f[x], {x, 2, 3}] 

enter image description here