我一直在努力解决线性方程组,其中一些变量是其他变量的插值函数。我已经尝试将这些函数转换为符号函数,但这似乎不起作用。有没有人有不涉及曲线拟合数据的解决方法?我真的想保留原始数据集的准确性。我的数据集太大,无法在此代码示例中放置真实数据集,因此我提供了[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)
答案 0 :(得分:0)
我不知道你的系统是否只是一个例子,但可以通过检查而不使用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
,那么该函数没有符号数学的版本(或者您可以直接搜索{{ 1}})。如果您想评估help sym/funcname
行,则表明您拥有所有必要的值:
interp2
返回 interp2([0 100],[100 0],[0 100;0 100],4,-3)
,表示它使用了外推法(请参阅帮助/ documentation)。
总而言之,我无法弄清楚你要做什么或为什么要使用插值。我建议在Symbolic Math toolbox上阅读更多内容,并找出问题所在。