Il metodo utilizzato funziona solo in casi molto particolari (si potrebbe dire "in casi estremamente fortunati").
Perchè funzioni è necessario, infatti, che il set di valori scelti per la variabile "X"
x = 0:.1:1000;
"
contenga il valore dell'ascissa del punto di intersezione (valore della "X" che verifica in sistema delle due equazioni); se ciò accade, i corrispondenti valori calcolati per le "Y" risulteranno uguali (a meno delle approssimazioni del calcolo) e, quindi, la funzione
find sarà in grado di trovare il valore cercato.
Nel caso delle due equazioni riportate nella domanda, la soluzione del sistema di equazioni (od il punto di intersezione delle due rette) è:
X=862.7500
Y=0.6054
purtroppo, il vettore x (definito come "x = 0:.1:1000;") non contiene il valore "862.7500", di conseguenza, i due vettori "y1" e "y2" non conterranno il valore "0.6054" per cui la funzione
find produrrà il risultato "Empty matrix: 1-by-0".
A dimostrazione del fatto che il metodo funziona solo in casi "eccezionali", se il vettore x viene definito come "
x = 0:.25:1000;", esso conterrà il valore dell'ascissa del punto di intersezione, tuttavia, il calcolo dei corrispondenti valori di "y1" e "y2" differirà di "
"1.1102e-16".
Questa insignificante differenza impedirà alla funzione
find di trovare i valori di "y" che risolvono il sistema di equazioni
find(x == 862.7500)
ans =
3452
>> y1(3452)
ans =
0.6054
>> y2(3452)
ans =
0.6054
>> y1(3452)-y2(3452)
ans =
1.1102e-16
Per risolvere in modo generale il problema si potrebbe scrivere una funzione che, ricevuti in input i coefficienti che definiscono le due rette, calcoli direttamente il punto di intersezione (cioè che risolva un sistema di due equazioni di primo grado).
Un esempio di come implementare questa funzione è il seguente:
function [X, Y]=inters2rette(m1,k1,m2,k2)
% [X, Y]=inters2retta(m1,k1,m2,k2)
% Calcola le coordinate del puntio di intersezione di due rette definite
% come:
% retta 1 ==> y=m1*x+k1
% retta 2 ==> y=m2*x+k2
%
% se le rette non hanno un punto di intersezione ==> X=NaN, Y=NaN
%
%
% ATTENZIONE: BISOGNA INSERIRE OPPORTUNI CONTROLLI SULLA VALIDITA DEGLI
% INPUNT
%
X=NaN;
Y=NaN;
D=(-m1+m2);
if(D ~= 0)
X=(k1-k2)/D;
Y=(-m1*k2+m2*k1)/D;
end
Hope this helps.