Hello everyone, I'm trying to solve equations in a Matlab function that is part of a Simulink model. One of those two equations is an interpolation of a given array. % 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 I would like to avoid such an iterational process since the iteration has to be done each simulation-step which could cause long simulation times depending on the accuracy and the initial condition(s) I determine. Thus, I wanted to ask you if there is another method / solution to solving that problem.
Prashant Kumar answered .
2025-11-20
fun = @(T) a * T + interp1(p(:,1),p(:,2),T) * (b + c * T) - h; Tfinal = fzero(fun,[p(1,1),p(end,1)]);
returns interpolated values of a 1-D function at specific query points using linear interpolation. Vector vq = interp1(x,v,xq)x contains the sample points, and v contains the corresponding values, v(x). Vector xq contains the coordinates of the query points.
If you have multiple sets of data that are sampled at the same point coordinates, then you can pass v as an array. Each column of array v contains a different set of 1-D sample values.