0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
||||||
1 | ||||||
Решение дифференциального уравнения методом Рунге-Кутта20.12.2015, 08:19. Показов 2116. Ответов 18
Здравствуйте. Помогите мне, пожалуйста, с такой проблемой. Дано дифференциальное уравнение и необходимо решить методом Рунге-Кутты 4-го порядка с фиксированным шагом, при помощи встроенного оператора и в "ручную". Желательно с подробным описанием, т.к. в этом вопросе еще новенький (пробовал сам, не получается), вторую неделю мучаюсь. Заранее спасибо.
Вот листинг:
0
|
|
20.12.2015, 08:19 | |
Ответы с готовыми решениями:
18
Решение дифференциального уравнения методом Эйлера и методом Рунге-кутта Решение дифференциального уравнения второго порядка методом Рунге-Кутта Решение дифференциального уравнения второго порядка методом Рунге-Кутта |
21.12.2015, 21:13 | 2 | |||||
а что не получается?
![]() * попробуй вначале вместо fur_integr; прописать eval fur_integr; ** функция должна быть: Matlab M dw1g = @(t,w1g) Gzol.*sqrt(abs(Pvh-(E.*log(w1g./w1)))).*sign( Pvh-(E.*log(w1g./w1)) );
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
|
22.12.2015, 17:44 [ТС] | 3 |
Вот такую ошибку выдает:
In an assignment A(I) = B, the number of elements in B and I must be the same. Error in inet (line 12) w1g(i+1)=w1g(i)+(k1+2*k2+2*k3+k4)/6; Добавлено через 11 минут Error using odearguments (line 91) @(T,W1G)GZOL.*SQRT(ABS(PVH-(E.*LOG(W1G./W1)))).*SIGN(PVH-(E.*LOG(W1G./W1))) must return a column vector. Error in ode45 (line 114) [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
||||||
23.12.2015, 17:37 [ТС] | 5 | |||||
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
|
24.12.2015, 07:37 | 6 |
fish - не определен
Массивы N -> fis -> fizol -> Gzol Gzol используется при вычислении производной
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
||||||
24.12.2015, 10:23 [ТС] | 7 | |||||
Опечатался малость
![]()
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
|
24.12.2015, 11:17 | 8 |
А теперь, если этот модуль использовать в модуле из сообщений #1 или #2, то будет неопределен массив t.
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
|
24.12.2015, 11:40 [ТС] | 9 |
В смысле не определен? Онже в седьмой строке
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
|
24.12.2015, 12:09 | 10 |
Так это в #7 сообщении не весь код а только часть кода из #5 сообщения. Вы просто над нами издеваетесь, мы что тогда проверяем и зачем.
Тогда что Вы сделали для устранения проблемы Gzol у Вас массив и тогда в этом месте что делать с Gzol, какой элемент использовать для вычислений?
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
|
24.12.2015, 14:55 [ТС] | 11 |
Поясняю. Сообщение №7 содержит часть исправленного кода в сообщении №5, т.к. при написании сюда, допустил опечатки. Следовательно Gzol вычисляется в нормальном порядке. Теперь вернемся к теме, в "fur_integr" каждый элемент спокойно и правильно вычисляются, а вот далее интегрироваться уравнение не хотит, несмотря отсутствие возражений при написании кода (при написании по правой стороне, при ошибке, замечания подсвечиваются красным или оранжевым цветом). В итоге получается, раз все красиво и гладко почему не интегрируется (высвечивается ошибка указанная выше)?
Добавлено через 6 минут И если вы думаете, что я ничего не делал или не делаю для решения проблемы, то вы глубоко ошибаетесь! Не в том возрасте чтобы "списывать у кого-то домашку".
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
||||||
24.12.2015, 15:22 | 12 | |||||
Когда Gzol определен в другом программном модуле, какая уж тут подсветка ошибок.
Xc тоже массив, поэтому w1 тоже массив.
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
||||||
24.12.2015, 18:04 [ТС] | 13 | |||||
Хм. Получается он отказывался интегрировать чисто из-за того, что параметры Gzol, Xc, w1 являются массивами? Поскольку эти значения изменяются по времени, они будут образовывать массив, поэтому про такой вариант решения я даже как-то и не подумал.
![]()
И можете, на будущее, объяснить мне (как чайнику в этом вопросе), почему он отказывается считать с массивными значениями, ведь массивы-то получаются одинаковыми по размеру? Извиняюсь за тупые вопросы, но не серчайте пожалуйста, сам постигаю эту науку (нематематик и непрограммист).
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
||||||
25.12.2015, 07:44 | 14 | |||||
Массивами они становятся по Вашему подходу к решению (я не имею ввиду ошибочное появление массивов).
Ваш вопрос надо несколько перефразировать - как решать дифференциальные уравнения, когда коэффициенты при переменных не являются константами, а зависят от времени и других параметров? Ответ: эти зависимочти нужно прописать в функции определения производных. Для того чтобы легче было описывать зависимости необходимо определение значений производных выполнить в виде отдельной функции. Вот пример, из которого можно воспользоваться структурой построения программы
производная не зависит от времени, а только от параметра, да еще под логарифмом, диапазон изменения по времени мал, поэтому и прямая. Поставь 4 строку t = 0:0.008:30; и увидишь другую зависимость. Если упрощенно описать задачу которую Вы ставите Matlab-у то выглядит это примерно так: есть две матрицы 1 строка и n элементов, умнож их нематрично друг на друга и в результате получи массив из 1 элемента.
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
||||||
29.03.2016, 17:59 [ТС] | 15 | |||||
Здравствуйте. Простите за долгий ответ, «немного» не до самообразования было.
В общем, сделал вот так, один раз посчитал, при повторной попытке уже выводит туже ошибку и более не считает. Думаю, посчитало первый раз из-за сбоя программы, хотя вам виднее.
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
|
30.03.2016, 08:18 | 16 |
Я чувствую, бесполезно разбираться с ошибками программы, надо понимать физику того что считается.
Этот вывод я делаю на основании того огорода, который наворочен внутри fun_1. В первом сообщении есть уравнение (оно конечно выгдядит не как дифференциальное, но допустим что Q это dy/dt)), вопросы по нему: 1. Что такое G, его физический смысл? 2. Что такое w1, его физический смысл? 3. Слева от Q стоит 1 или i - это что такое и важно ли оно для решения задачи? 4. Главное, Вы пытаетесь решать одно диффуравнение, или систему диффуравнений? Пояснения по солверу ode: данная функция предназначена для определения величин производных dy всех параметров решаемой системы в момент времени t при текущих значениях параметров y в данный момент времени. Внутри этой функции нет ни прошлого, ни будущего, есть только сейчас. Поэтому не имеет смысла length(t) всегда равно 1. Со времен FORTRANa всегда соблюдаю жесткое правило COMMON блоки должны быть одинаковы, иначе почти всегда будешь получать ошибку, причем ее трудно найти. В MATLABе это функция global. У Вас в основной функции и в fun_1 global отличаются, в результате w1g неопределена, поэтому программа не работает. Какой физический смысл в округлении (round) внутри fun_1? Это ведет к очень значительному увеличению времени вычислений. Введя некоторые (возможно неправомерные поправки) и определив w1g=80; после продолжительных расчетов получил график
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
|
09.04.2016, 08:26 [ТС] | 17 |
Вот такая картина, наиболее полно отражающая физический смысл.
1) G - гидравлическая проводимость дросселирующей щели, которая образуется при перемещении золотника; 2) w1 - геометрический объем полости силового гидроцилиндра, который увеличивается или уменьшается, в зависимости в какой из них втекает жидкость; 3) w1g - гидравлический объем (объем жидкости) в соответствующей полости гидроцилиндра; Поэтому w1, w1g величины изменяемые во времени. 4) Q - расход жидкости поступающей/истекающей в/из полость(и); 5) В Q1, единица выступает в качестве индекса, показывающая какую полость мы рассматриваем, в данном случае это полость нагнетания. Да, Q - значение изменяющееся во времени, и своего рода, действительно, является скоростью. 6) Вы правы там несколько дифференциальных уравнений необходимо рассмотреть, но мне достаточно и одного (из личного опыта, остальные диф. уравнения рассматриваются для подтверждения выводов, сделанных из результатов решения этого уравнения). 7) Физический смысл в округлении (round) состоит в том, чтобы упростить/усложнить, соответственно "огрубить"/уточнить, перемещение золотника, от которого зависит значение G. В данном случае, я упростил (грубое приближение) для более простого понимания природы действия. Если что-то еще непонятно по физике, могу рассказать больше. Ваша поправка неправомерна. Для обывателей (для простоты объяснения или определенных расчетов) жидкость несжимаемая, но если вы помните, при изменении температуры, давления материал изменяет свою форму, и жидкость не исключение. Для простоты, представьте любой газ, который вы сжимаете, к примеру - велосипедный насос, заткнув выходное отверстие вы определенное время спокойно его продолжаете сжимать.
0
|
![]() 3385 / 1908 / 571
Регистрация: 09.04.2015
Сообщений: 5,350
|
|
11.04.2016, 07:58 | 18 |
Q1 у Вас вообще нет в уравнениях, а судя по Вашей модели это просто необходимо.
Судя по вашим описаниям, тогда w1g это y(1). Судя по модели 1 уравнением Вам не обойтись, как минимум необходимо уравнение по второй полости и уравнения движения массы m, тк она воздействует на поршень препядствуя/способствуя перетокам жидкости. Этого я воообще не понимаю. Вы не на калькуляторе считаете, где набор лишних чисел в основном трата времени практически не увеличивающая точность. В Вашем случае Вы получаете вместо гладкой функции ступенчатую, и это Вы называете упрощением понимания природы действия. А Вы оценили как это скажется на результатах. Ваша система очень жесткая, такие ступеньки вызовут как минимум высокочастотные колебания давления в период прохождения ступеньки. Вам бы периоды открытия/закрытия золотниковой щели пройти, а Вы пораждаете дополнительные возмущения.
0
|
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 10
|
|
09.05.2016, 20:16 [ТС] | 19 |
Заместо уравнения движения массы можно использовать приведенный момент упругости, обозначен буквой Е (знаю, виноват
![]() Про Прошу прощения за долгие ответы. Постараюсь отвечать быстрее.
0
|
09.05.2016, 20:16 | |
Помогаю со студенческими работами здесь
19
Решение системы ДУ 4-го порядка методом Рунге-Кутта Модель Ланчестера, решение методом Рунге-Кутта Решение системы уравнений методом Рунге-Кутта 4-го порядка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |