С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
1

Решение системы ДУ с подтягиванием коэффицентов

16.04.2015, 00:42. Показов 688. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем хорошего дня.
Очень надеюсь на Вашу помощь, т.к. уже на пороге отчаяния.
Мне нужно обсчитать достаточно сложную систему.
Уже два дня читаю гайды, но к успеху не приблизился ни на миллиметр.

Что у меня есть:
Кинетическая модель хим. реакции.
На языке математики - система из 5 ДУ, с большим количеством коэффицентов, которые нельзя хардкодить. В идеале их нужно тянуть из cfg файла.

Что мне нужно:
Программа, которая позволит мне моделировать процесс, меняя коэффиценты и задавая новые условия.
Тому, кто окажет реальную помощь, готов задонатить небольшую сумму на телефон/киви.

Сабж в аттаче, сама система - на правой стороне фото
Миниатюры
Решение системы ДУ с подтягиванием коэффицентов  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2015, 00:42
Ответы с готовыми решениями:

Выпадающий список с подтягиванием значений
Категорически приветствую камрады Друзья! заранее благодарю, тема простенькая, я уже глаз...

Решение неоднородной системы, если известны собственные вектора и значения однородной системы
Можно ли решить неоднородной системы если известны собсвенные вектора и значения однородной системы?

Исследовать совместность и найти общее решение и одно частное решение системы уравнений.
Исследовать совместность и найти общее решение и одно частное решение системы уравнений. (3...

Вычисление коэффицентов
Здравствуйте уважаемые математики. Сразу прошу прощение за , возможно, не совсемм коректный или за...

12
Модератор
Эксперт по математике/физике
5277 / 4059 / 1389
Регистрация: 30.07.2012
Сообщений: 12,429
16.04.2015, 08:09 2
Milky Way, и где же РЕЗУЛЬТАТ Вашей 2-х дневной работы (в виде программы)? Приведите свои попытки решения этой задачи, тогда Вам гораздо быстрее помогут в ней разобраться...
P.S. И почитайте Правила форума (в частности - 5.18)
0
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
16.04.2015, 23:01  [ТС] 3
VSI, ну я, например, совсем не понимаю, как мне сделать редактируемые коэффиценты.
Хотелось бы это услышать.

Сам я смог написать вот это:
И оно не запускается
Matlab M
1
2
3
4
5
6
7
8
9
function dy = diff_urav(t,y)
dy = zeros(5,1); 
% система
 
dy(1) = y(1);
dy(2) = y(1)-y(2);
dy(3) = y(1)+y(2);
dy(4) = y(5)-y(1)+1-y(2)*y(4)
dy(5) = (y(1)+1+y(2)-y(5)-y(5)^2)*2
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear all; clc;
% время
t=[0 100];
%начальные условия
y0=[0 1 0 1 2];
 
[T,Y]=ode45(@diff_urav,t,y0);
figure
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'-.',T,Y(:,4),'-.',T,Y(:,5)'--')
grid on
title('График искомых функций');
legend('X','Y','Z','A','B');
xlabel('t');
disp('Вывод значений функций')
[Y(:,1),Y(:,2),Y(:,3),Y(:,4),Y(:,5)]
0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
17.04.2015, 11:42 4
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear all; clc;
% время
t=0 : 0.2 :100;                   % Была ошибка
%начальные условия
y0=[0 1 0 1 2];
 
[T,Y]=ode45(@diff_urav,t,y0);
figure
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'-.',T,Y(:,4),'-.',T,Y(:,5),'--')   % Была ошибка, нехватало запятой
grid on
title('График искомых функций');
legend('X','Y','Z','A','B');
xlabel('t');
disp('Вывод значений функций')
[Y(:,1),Y(:,2),Y(:,3),Y(:,4),Y(:,5)]
Вот так уже выводит графики
0
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
17.04.2015, 20:55  [ТС] 5
SSC, а не подскажешь, как мне избавиться от хардкода коэффицентов? В файлик допустим их отдельный вынести, где я смогу их редактировать
0
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
19.04.2015, 23:16  [ТС] 6
up!

Добавлено через 1 час 42 минуты
Еще свежий вопрос по коду.
Синтаксис матлаба переваривает такое присваивание?
И как мне, наконец вынести все эти k-шки в отдельный файл, чтобы тянуть их оттуда?

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function dy = diff_urav(t,y)
dy = zeros(5,1); 
% система
 
dy(1) = k(6)*y(1);
dy(2) = k(6)*y(1)-k(12)*y(2);
dy(3) = k(6)*y(1)+k(12)*y(2);
dy(4) = k(7)*y(5)-k(2)*y(1)+k(8)-k(11)*y(2)*y(4)
dy(5) = (k(6)*y(1)+k(8)+k(12)*y(2)-k(7)*y(5)-k(14)*y(5)^2)*k(16)
 
k(1)=2
k(2)=1
k(3)=3
k(4)=4
k(5)=2
k(6)=2
k(7)=3
k(8)=4
k(9)=5
k(10)=2
k(11)=3
k(12)=3
k(13)=4
k(14)=1
k(15)=1
k(16)=1
0
142 / 142 / 37
Регистрация: 14.12.2013
Сообщений: 221
20.04.2015, 10:39 7
Milky Way,если я все верно понял

Matlab M
1
2
3
4
5
6
7
8
9
function dy = diff_urav(t,y)
dy = zeros(5,1); 
% система
k=load('koeff.txt');
dy(1) = k(6)*y(1);
dy(2) = k(6)*y(1)-k(12)*y(2);
dy(3) = k(6)*y(1)+k(12)*y(2);
dy(4) = k(7)*y(5)-k(2)*y(1)+k(8)-k(11)*y(2)*y(4);
dy(5) = (k(6)*y(1)+k(8)+k(12)*y(2)-k(7)*y(5)-k(14)*y(5)^2)*k(16);
ну и внутри koeff.txt например 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
21.04.2015, 11:24 8
Использование чтения из файла внутри функции определения производных напрочь убъет скорость вычислений.
Лучше работать с глобальными переменными.
Мне не понятен физический смысл задачи, поэтому что-то советовать не могу.
Вы пытаетесь менять коэффициенты во время решения системф дифуравнений? (тогда вопрос в зависимости от чего они меняются) или Вам надо провести много решений при разных коэффициентах - это две совершенно по разному решаемые проблемы.
Но есть предостережение. Менять коэффициенты внутри расчета шага интегрирования крайне опасно, можно получить не просто неточное решение, а решение противоречащее физическому смыслу задачи.
При этом очень многое зависит от поведения алгоритма подбора шага интегрирования для обеспечения точности решения.
0
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
21.04.2015, 23:35  [ТС] 9
надо провести много решений при разных коэффициентах - это две совершенно по разному решаемые проблемы.
Это.

Добавлено через 1 час 46 минут
SSC, и при использовании твоего кода, у меня тоже ошибка

??? Error using ==> feval
Undefined function or method 'diff_urav' for input arguments of type 'double'.

Error in ==> odearguments at 109
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Добавлено через 6 минут
Из-за чего может быть?
0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
22.04.2015, 07:35 10
Я взял исходные два файла, исправил 2 ошибки (которые обозначил коментариями), т у меня программа выполняется выводя какие-то данные и строя 5 графиков. Все интересное на них происходит в интервале t от 0 до 10.
Попробуй вернуться назад к исходной точке, возможно внес какието изменения в функцию определения производных
0
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 17
23.04.2015, 01:03  [ТС] 11
Да вроде начальный пробую.
А от версии матлаба это никак не зависит?
Или может нужно в определенную директорию файл класть?

Добавлено через 3 минуты
Пробую вот эту версию:

Matlab M
1
2
3
4
5
6
7
8
9
function dy = diff_urav(t,y)
dy = zeros(5,1); 
% система
 
dy(1) = y(1);
dy(2) = y(1)-y(2);
dy(3) = y(1)+y(2);
dy(4) = y(5)-y(1)+1-y(2)*y(4)
dy(5) = (y(1)+1+y(2)-y(5)-y(5)^2)*2
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear all; clc;
% время
t=0 : 0.2 :100;                   % Была ошибка
%начальные условия
y0=[0 1 0 1 2];
 
[T,Y]=ode45(@diff_urav,t,y0);
figure
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'-.',T,Y(:,4),'-.',T,Y(:,5),'--')   % Была ошибка, нехватало запятой
grid on
title('График искомых функций');
legend('X','Y','Z','A','B');
xlabel('t');
disp('Вывод значений функций')
[Y(:,1),Y(:,2),Y(:,3),Y(:,4),Y(:,5)]
Добавлено через 20 минут
Вопрос снимается.
Не в той директории лежал файл.

Добавлено через 23 минуты
Вопрос следующий:
Мне на самом деле нужно 8 уравнений - 5 дифференциальных и 3 линейных (см фото в 1 посте)
Если я все это запихиваю под ode, он нормально переваривать будет?

И еще вопрос: когда я ставлю нужные мне коэффиценты в файлик, очень сильно проседает производительность, и даже на промежутке для t от 0 до 10 считает несколько минут.
Как пофиксить можно?
0
Эксперт по математике/физике
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
23.04.2015, 07:48 12
Такое число уравнений для MATLAB не проблема, проблема что растет время решения.
Для ode45 производные вычисляются 4 раза на каждый шаг интегрирования. Поэтому обязательно оптимизируй функцию diff_urav.
Например присваивание вычисляется быстрее чем умножение, а возведение в квадрат обязательно замени умножением.

Второе направление это подбор шага.
t=0 : 0.2 :100; 0.2- это шаг. Чем он больше тем расчет быстрее но менее точно вплодь до развала решения. Поэтому требуется подбор с анализом получаемых решений.

Третье направление выбор другой функции вместо ode45, возможно они будут давать на ваших уравнениях лучший результат.
Хотя ode45 мне очень нравится, надежный не капризный метод, с него рекомендую всегда начинать.
Когда MATLABA еще небыло у меня были реализации данного метода сначала на BASiC, потом FORTRAN, потом С.
0
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 39
23.04.2015, 11:59 13
Привет, занят примерно тем же самым Определение параметров при аппроксимации , есть рабочая прога. Пиши в лс
0
23.04.2015, 11:59
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2015, 11:59
Помогаю со студенческими работами здесь

Выпадающий список в Excel с подтягиванием к нему таблицы из другого листа
Добрый день! Прошу помощи! Задача следующая. Совершенно неразрешимая для меня пока)) Для...

Найти фундаментальную систему решений однородной системы и выразить через нее общее решение этой системы
Найти фундаментальную систему решений однородной системы и выразить через нее общее решение этой...

Решение системы уравнений в matlab. Не сходится решение
Здравствуйте! решаю такую сичтему уравнений (уравнения Кирхгофа применительно к задаче гидравлики...

Решение не было найдено. Решение системы уравнений
Подскажите пожалуйста, в чем ошибка. Вроде бы все перепроверила, задано все верно. Заметила, что у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru