Как сохранить набор уравнений / констант для решения для любого элемента уравнения или числового значения - PullRequest
1 голос
/ 07 марта 2011

Допустим, проблемы довольно просты - что-то, что может решить студент-теоретик физики.И студент выполняет самую сложную часть задачи - функциональное чтение: анализ текста в свободной от языка форме, получение входных и выходных переменных и значений входных переменных.

Например: задача о кинематических уравнениях, где есть переменные {a,d,t,va,vf} и несколько функций, которые описывают, как они зависят друг от друга.Таким образом, используя навыки, полученные при игре в подходящие блоки, где вы подходите, вы играете с уравнениями, чтобы получить выходную переменную, которую вы ищете.

В любом случае, есть ровно 2 возможных выхода, которые вы могли бы пожелать, и ваши (с рабочим примером):

1) Уравнение для этой переменной

Physics[have_, find_] := Solve[Flatten[{
    d == vf * t - (a * t^2) /2, (* etc. *)
    have }], find]
Physics[True, {d}]
{{d -> (1/2)*(2*t*vf - a*t^2)}}

2) Точное или общее числовое значение для этой переменной

Physics[have_, find_] := Solve[Flatten[{
    d == vf * t - (a * t^2) /2, (* etc. *)
    have }], find]
Physics[{t == 9.7, vf == -104.98, a == -9.8}, {d}]
{{d->-557.265}}

Я не уверен, что правильно подхожу к проблеме.

Ответы [ 3 ]

4 голосов
/ 07 марта 2011

Я думаю, что я, вероятно, предпочел бы такой подход, как

In[1]:= Physics[find_, have_:{}] := Solve[
  {d == vf*t - (a*t^2)/2 (* , etc *)} /. have, find]

In[2]:= Physics[d]
Out[2]= {{d -> 1/2 (-a t^2 + 2 t vf)}}

In[2]:= Physics[d, {t -> 9.7, vf -> -104.98, a -> -9.8}]
Out[2]= {{d -> -557.265}}

, где have переменные приведены в виде списка правил замены.Из физических проблем хорошо бы определить ваши физические константы, такие как

N[g] = -9.8;

, которые выдают NValues для g.Тогда

N[tf] = 9.7;N[vf] = -104.98;
Physics[d, {t -> tf, vf -> vf, a -> g}]
%//N

производит

{{d->1/2 (-g tf^2+2 tf vf)}}
{{d->-557.265}}
2 голосов
/ 07 марта 2011

Позвольте мне показать некоторые преимущества подхода Саймона:

enter image description here

1 голос
/ 07 марта 2011

Вы хотя бы подходите к этой проблеме разумно.Я вижу прекрасную функцию общего назначения и вижу, что вы получаете результаты, а это главное.Не существует «правильного» решения, поскольку может существовать широкий спектр приемлемых решений.В некоторых сценариях некоторые решения могут быть предпочтительнее других, например, из-за производительности, тогда как в других сценариях это может быть наоборот.

Единственная небольшая проблема, с которой я столкнулся в вашем примере, - это сомнительное имя параметра 'иметь'.Почему вы думаете, что это будет неправильный подход?

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