Posterior a de nuestra larga selección de información resolvimos este enigma que pueden tener ciertos lectores. Te dejamos la respuesta y deseamos que sea de gran apoyo.
Solución:
Aquí está mi opinión sobre esto. Los puntos clave son el uso de Evaluate
asegurarse de Integrate
se llama solo una vez y no todas las veces d
se llama, y el uso de Assumptions
donde me tomé la libertad de asumir que k
es real.
Espero no haber confundido los límites.
f, m, r = 68000, 2340, 68;
a[k_, t_] := f/(m + k - r t) - 10
d[k_] := Evaluate[
Integrate[a[k, t], p, 0, k/r, t, 0, p,
Assumptions -> k [Element] Reals]];
Plot[d[x], x, 0, 10]
para el otro,
r1 = 200;
a1[k_, t_] := f/(m + k - r1 t) - 10
d1[k_] :=
Evaluate[Integrate[a1[k, t], p, 0, k/r1, t, 0, p,
Assumptions -> k [Element] Reals]];
Plot[d1[x], x, 0, 10]
Tratar:
$Version
(* "11.2.0 for Microsoft Windows (64-bit) (September 11, 2017)" *)
ClearAll["Global`*"]; Remove["Global`*"];(* Clears All variables *)
f = 68000;
m = 2340;
r = 68;
a[k_?NumericQ, t_?NumericQ] := f/(m + k - r*t) - 10
v[k_?NumericQ, t_?NumericQ] := NIntegrate[a[k, p], p, 0, t, Method -> Automatic, "SymbolicProcessing" -> 0];
d[k_?NumericQ] := NIntegrate[v[k, p], p, 0, k/r, Method -> Automatic, "SymbolicProcessing" -> 0];
r1 := 200
a1[k_?NumericQ, t_?NumericQ] := f/(m + k - r1*t) - 10
v1[k_?NumericQ, t_?NumericQ] := NIntegrate[a1[k, p], p, 0, t, Method -> Automatic, "SymbolicProcessing" -> 0]
d1[k_?NumericQ] := NIntegrate[v1[k, p], p, 0, k/r1, Method -> Automatic, "SymbolicProcessing" -> 0]
Plot[d[x], d1[x], x, 0, 10] // AbsoluteTiming
Aparte de lo necesario Assumptions
mencionado en otras respuestas, su problema es que está abusando de la asignación retrasada: el :=
operador. Da como resultado que se evalúe el lado derecho. todos vez que llama a su función o usa su variable, a menos que el lado derecho haya sido envuelto con Evaluate
función. Es decir, Integrate
funciones están reevaluando las integrales cada vez que llamas a tu v
, d
, v1
y d1
funciones
De la manera adecuada, después de agregar los necesarios Assumptions
para las integrales es reemplazar su :=
con =
— al menos para las llamadas a Integrate
aunque en su caso específico no necesita ninguna asignación retrasada, por lo que simplemente podría reemplazar todos los operadores con asignaciones inmediatas.
Ahora, si sabe que su variable $k$ en todo el cálculo satisface $kinmathbb R$, entonces puede envolver el cálculo en Assuming
función o simplemente establecer $Assumptions
variable a su suposición al principio. (No olvide restablecer la variable más tarde al valor predeterminado de True
cuando haces cálculos no relacionados).
Después de tener todo esto en cuenta, su código podría verse así:
f = 68000;
m = 2340;
r = 68;
r1 = 200;
a[k_, t_] = f/(m + k - r*t) - 10;
a1[k_, t_] = f/(m + k - r1*t) - 10;
Assuming[Element[k, Reals],
v[k_, t_] = Integrate[a[k, p], p, 0, t];
d[k_] = Integrate[v[k, p], p, 0, k/r];
v1[k_, t_] = Integrate[a1[k, p], p, 0, t];
d1[k_] = Integrate[v1[k, p], p, 0, k/r1];
Plot[d[x], d1[x], x, 0, 10]
]
Más en :=
y =
las asignaciones se ven en el tutorial Definiciones inmediatas y retrasadas.
Puntuaciones y comentarios
Si tienes algún recelo y capacidad de limar nuestro reseña eres capaz de dejar una glosa y con mucho placer lo interpretaremos.