Всем привет,

Я пытаюсь решить уравнения в функции Matlab, которая является частью модели Simulink.

Одно из этих двух уравнений является интерполяцией заданного массива.

% variable definiton
% T                     function argument
% p = f(T)              values are given in form of a 69x2 double
% a | b | c | h         constants / parameters (defined or calculated beforehand)
% equations
% eqn 1
% p = interp1(p(:,1),p(:,2),T)
% eqn 2
% h = a * T + p * (b + c * T)
% As I am used to solve equations with my pocket calculator I quickly found something like this while browsing:
syms T
solve (h == a * T + interp1(p(:,1),p(:,2),T) * (b + c * T),T);
% Unfortunately I do not have the required toolbox to solve equations which is why I need to find a work-around
% my next idea was to use an iteration to solve this (which I did not formulate and test until now)
% it would be something like that though:
for T = 1:100
    p = interp1(p(:,1),p(:,2),T);
    h_iter = a * T + p * (b + c * T);
    if h_iter > h - h_marge | h_iter < h + h_marge
        break
    end
end
% with h_marge being a predefined value for accuracy tolerance

Я хотел бы избежать такого итерационного процесса, поскольку итерация должна выполняться на каждом шаге моделирования, что может привести к длительному времени моделирования.

в зависимости от точности и начальных условий, которые я определяю.

Таким образом, я хотел спросить вас, есть ли другой метод/решение для решения этой проблемы.

ПРИМЕЧАНИЕ. 

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Ответ эксперта

Прашант Кумар ответил. 2021–10–21 06:59:13

interp1 несовместим с символическими параметрами. Вы НЕ МОЖЕТЕ использовать interp1 с решением. Период. Итак, где бы вы ни нашли этот фрагмент кода, они были неверны.

Вы можете использовать такой инструмент, как fzero, с interp1. fzero и interp1 совместимы.

Далее, глядя на вашу проблему, это на самом деле задача с ДВУМЯ переменными и двумя уравнениями. То есть у нас есть известные константы a,b,c,h. И есть два неизвестных. К сожалению, вы, кажется, используете p в двух местах одновременно, и как массив известных элементов, и как переменную. И это чертовски сбивает с толку.

Итак, я сделаю предположение, что у вас есть две переменные, я буду называть тогда T и p_T. То есть p_T задается как:

p_T = интерп1 (р (:, 1), р (:, 2), Т)

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ