General :: ivar: ... не является допустимой переменной - PullRequest
1 голос
/ 10 октября 2010

Я пытался расшифровать, что означает этот вывод, но я просто не могу понять это.Кто-нибудь знает, что здесь происходит?

alt text

Я даже пытался запускать строки одну за другой, и ошибки появляются только при выполнении последней строки (show).

1 Ответ

6 голосов
/ 10 октября 2010

Самостоятельно пройдя по строкам, вы не увидите, что происходит, вы должны разобрать утверждение, которое доставляет вам неприятности: в данном случае Show[p1, p2[1,1]. Сами по себе ни p1, ни Show не должны доставлять вам неприятностей, что приводит к выводу, что это должно быть p2[1,1]. Это подтверждается тем, что запускается сам по себе, что приводит к той же ошибке.

Это приводит к ошибке из-за того, как Plot, Plot3D и т. Д. Оценивают аргумент функции. В общем, они по существу делают Replace для текста функции и могут не расширять вызовы функций. Простое решение - переписать p2 как

p2[x0_, y0_] := Plot3D[Evaluate[p[x, y, x0, y0]], {x, 0, 2}, {y, 0, 2}]

, который избавляется от ошибок. Evaluate гарантирует, что функция будет оценена символически, прежде чем Plot3D овладеет ею, избегая любого неправильного обращения. Хотелось бы, чтобы у меня было лучшее представление о том, когда использовать Evaluate в этих случаях, но если в целом, если вы получаете ошибки от такой функции построения графиков, то, скорее всего, она неправильно обрабатывает функцию.

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