Матлаб: Решение символической системы линейных уравнений с функциями интерполяции

Я пытаюсь решить систему линейных уравнений, причем некоторые переменные являются интерполированными функциями других переменных. Я попытался превратить эти функции в символические функции, но это, похоже, не работает. У кого-нибудь есть обходное решение, которое не связано с подгонкой данных? Я бы очень хотел сохранить исходный набор данных для точности. Мой набор данных слишком велик, чтобы поместить настоящий пример в этот код, поэтому я предоставил набор данных заполнителя из [0 100], [100 0], [0 100; 0 100].

Вот мой код:

% Setting up system of equations
syms FD ICE EM GEN
AM = [0 1 1 0 ;
0 1 0 0 ;
0 0 1 0;
0 0 0 1];
Tvec = [FD;ICE;EM;GEN]
eqs= AM * Tvec == Tvec %System of symbolic equations
% Adding the givens to my system of equations
eqs(5) = FD==1;
eqs(6) = ICE==4;
eqs(7) = interp2([0 100],[100 0],[0 100;0 100], ICE,EM) % <-- this is where the problem is.
results=solve(eqs)
1 ответ

Я не знаю, является ли ваша система просто примером, но ее можно решить тривиально путем проверки без использования solve. Вы можете попробовать написать то, что он представляет на бумаге, или сделать это:

syms FD ICE EM GEN
AM = [0 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1];
Tvec = [FD;ICE;EM;GEN]
eqs = AM*Tvec == Tvec

возвращается

eqs =
EM + ICE == FD ICE == ICE EM == EM GEN == GEN

Последние три уравнения должны выглядеть довольно глупо для вас, поскольку они не предоставляют никакой информации. Вы указали в своих пятом и шестом уравнениях, что FD == 1 и ICE == 4. По крайней мере, это не тривиально. Действительно, наряду с вашим первым уравнением EM + ICE == FD вы можете использовать их для решения того, что EM == -3.

Далее, ваше седьмое уравнение даже не уравнение, как там нет == везде. Кроме того, как вы обнаружили, interp2 не принимает символические входы. Это справедливо для многих функций Matlab. Как правило, если вы не видите sym/thefuncname перечисленные внизу, когда вы получаете помощь для функции funcname, тогда эта функция не имеет версии для символической математики (или вы можете напрямую искать help sym/funcname). Если вы хотите оценить строку interp2, кажется, что у вас есть все необходимые значения:

interp2([0 100],[100 0],[0 100;0 100],4,-3)

который возвращает NaN указывающий, что он использовал экстраполяцию (см. справку /документацию).

В общем, я не могу понять, что вы пытаетесь сделать или почему вы используете интерполяцию. Я бы посоветовал прочитать больше на панели инструментов Symbolic Math и выяснить, в чем заключается ваша проблема.

licensed under cc by-sa 3.0 with attribution.