2016-01-24 4 views
0

Я играл с этим некоторое время, Может кто-нибудь объяснить, почему я получаю разные ответы от Code1 и Code2? Что происходит с фактическим сценарием 'dsolve()', который делает вывод двух кодов разным? Может ли выход будет таким же, если я просто использовал другой синтаксис (т.е.»;».)dsolve генерирует несогласованные выходы

%Code1: 

syms Qua t Area height 

rate_in = 3*Qua*(sin(t))^2; 
delta_Vol = dsolve('DAreaY = rate_in - Qua'); 
delta_Height= dsolve('Dheight = ((rate_in - Qua)/Area)', 'height(0) = 0'); 
subfnc1 = subs(rate_in, {Qua}, {450}); 
fnc1 = subs(delta_Height, {'rate_in'}, {subfnc1}); 
fnc1 = subs(fnc1, {Area, Qua}, {1250,450}); 
fnc_main = matlabFunction(fnc1); 
fnc_main(0:10)'; 

%Code2: 

syms Qua t Area height 

rate_in = 3*Qua*(sin(t))^2; 
delta_Vol = dsolve('DAreaY = 3*Qua*(sin(t))^2 - Qua'); 
delta_Height= dsolve('Dheight = ((3*Qua*(sin(t))^2 - Qua)/Area)', 'height(0) = 0'); 
fnc1 = subs(delta_Height, {Area, Qua}, {1250,450}); 
fnc_main = matlabFunction(fnc1); 
fnc_main(0:10)'; 

, что это о dsolved функции, которую я не понимаю

ответ

1

проблемы может? в том, что вы передаете строки в dsolve, а не символических выражений Это означает, что в первом случае rate_i может быть истолковано как константа, а не в зависимости от t

Вот что вы, вероятно, пытается сделать..: определяя Dheight как sym, а также, указав dsolve что делать с помощью sym S:

%Code1: 

clear Qua t Area height Dheight 
syms Qua t Area height(t) Dheight 

Dheight = diff(height); 
rate_in = 3*Qua*(sin(t))^2; 
delta_Height= dsolve(Dheight == ((rate_in - Qua)/Area), height(0) == 0); 
subfnc1 = subs(rate_in, {Qua}, {450}); 
fnc1 = subs(delta_Height, {'rate_in'}, {subfnc1}); 
fnc1 = subs(fnc1, {Area, Qua}, {1250,450}); 
fnc_main = matlabFunction(fnc1) 

%Code2: 

clear Qua t Area height Dheight 
syms Qua t Area height(t) Dheight 

Dheight = diff(height); 
rate_in = 3*Qua*(sin(t))^2; 
delta_Height= dsolve(Dheight == ((3*Qua*(sin(t))^2 - Qua)/Area), height(0) == 0); 
fnc1 = subs(delta_Height, {Area, Qua}, {1250,450}); 
fnc_main = matlabFunction(fnc1) 

Изменения в версии:

  • Я удалил delta_Vol, так как он не был использован и содержал непонятную ссылку на (D)AreaY
  • я изменил в dsolve от строка в символическое выражение, в среднем = необходимо было изменить на ==
  • Я определил DHeight как diff(Height), что означает, что height должно быть объявлено как height(t). Это также позволяет нам определить начальное условие как height(0)==0, иначе нам нужно было бы сохранить эту строку: 'height(0)=0'.

Теперь обе версии возвращают то же самое решение:

fnc_main = 

    @(t)t.*(9.0./5.0e1)-sin(t.*2.0).*(2.7e1./1.0e2) 

Я предлагаю проверить на бумаге ли это решение, или его символического предшественника,

delta_Height = 

(Qua*(2*t - 3*sin(2*t)))/(4*Area) 

действительно является решением для вашего дифференциального уравнения ,

+1

спасибо, это еще одна перспектива/маршрут в том, как я могу выбрать код, который книга/инструктор не предлагает. Спасибо, поскольку я предположил, что dsolve() принимает только строки, но теперь я вижу, как я могу вставлять символические аргументы. Я также никогда не знал, что могу иметь объявление переменной, например, высоту, явно определенную в терминах другой переменной, например (t). – ReadyF4i