2016-09-23 52 views
0

我有多个阵列,你不能完全拟合曲线/方程,但我确实需要解决它们的很多值。简化它看起来像这样当我绘制它,但真正的有很多点:plot
所以说,我想解决的y = 22,我会怎么做?正如你所看到的,会有三种解决方案,但我只需要最左边的一个。 线性没问题,但我宁愿使用非线性方法。MATLAB解决阵列

我发现的唯一方法是将方程拟合到一组点并求解该方程,但方程不能准确地近似阵列。

+0

你可以给一个你的数据是什么样子的样本? (数字格式,不是图表)。 –

+0

如果你要非常准确,你总是可以适应多个方程peicewise-ly(?)并解决每个问题 –

+0

我可以使用simulink,然后在y接近22时捕获x,但是我将如何系统地使用25个阵列需要分别解决12个y值的问题? – Bart

回答

0

该实现使用一阶插值 - 如果您想要更高的准确性并且感觉合适,可以对另一个阶估计器使用类似的策略。

假设data是包含在第一列x值,并在第二y值数据的数组的名称,列通过增加或减少x值排序,你想找到的值的所有数据y = 22;

searchPoint = 22; %search for all solutions where y = 22 
matchPoints = []; %matrix containing all values of x 
for ii = 1:length(data)-1 
    if (data(ii,2)>searchPoint)&&(data(ii+1,2)<searchPoint) 
     xMatch = data(ii,1)+(searchPoint-data(ii,2))*(data(ii+1,1)-data(ii,1))/(data(ii+1,2)-data(ii,2)); %Linear interpolation to solve for xMatch 
     matchPoints = [matchPoints xMatch]; 
    elseif (data(ii,2)<searchPoint)&&(data(ii+1,2)>searchPoint) 
     xMatch = data(ii,1)+(searchPoint-data(ii,2))*(data(ii+1,1)-data(ii,1))/(data(ii+1,2)-data(ii,2)); %Linear interpolation to solve for xMatch 
     matchPoints = [matchPoints xMatch]; 
    elseif (data(ii,2)==searchPoint) %check if data(ii,2) is equal 
     matchPoints = [matchPoints data(ii,1)]; 
    end 
end 

if(data(end,2)==searchPoint) %Since ii only goes to the rest of the data 
    matchPoints = [matchPoints data(end,1)]; 
end 

这是写SANS编译,但逻辑是在八度测试(换句话说,对不起,如果有变量名轻微错字,但算算应该是正确的)