| Код | program vpf_anyutka_linear_independence;
const N = 3;{размерность} EPSILON = 1e-4;{точность}
type TVector = array[ 1..N ] of real;{тип - вектор}
procedure InputVector( var vector : TVector ); {процедура ввода вектора} var i : integer;{счетчик} begin for i := 1 to N - 1 do{для каждого компонента векотра, кроме последнего} read( vector[ i ] );{читаем очередной компонент вектора} readln( vector[ N ] );{читаем последний компонент вектора с переходом на новую строку} end;
procedure PrintVector( var vector : TVector ); {процедура печати вектора} var i : integer;{счетчик} begin for i := 1 to N - 1 do{для каждого компонента вектора, кроме последнего} write( vector[ i ], ' ' );{печатаем очередной компонент вектора и разделитель - пробел} writeln( vector[ N ] );{печатаем последний компонент вектора с переходом на новую строку} end;
function IsLinearIndependence( var vectorA, vectorB : TVector ) : boolean; {функция проверки на линейную зависимость двух векторов} {Система двух векторов линейно зависима тогда и только тогда, когда эти векторы - коллинеарны } var i : integer;{счетчик} scalarProduct, lengthA, lengthB : real;{scalarProduct - скалярное произведение векотров, lengthA, lengthB - длины векторов} begin {инициализация} lengthA := 0.0; lengthB := 0.0; scalarProduct := 0.0; for i := 1 to N do{для каждого компонента} begin lengthA := lengthA + sqr( vectorA[ i ] );{суммируем квадраты компонентов вектора} lengthB := lengthB + sqr( vectorB[ i ] );{суммируем квадраты компонентов вектора} scalarProduct := scalarProduct + vectorA[ i ] * vectorB[ i ];{вычисляем скалярное произведение} end; if( ( lengthA < EPSILON ) or ( lengthB < EPSILON ) ) then {один из векторов - нулевой => линейная зависимость} IsLinearIndependence := true else{иначе} begin lengthA := sqrt( lengthA );{извлекаем корень, чтобы узнать длину вектора} lengthB := sqrt( lengthB );{извлекаем корень, чтобы узнать длину вектора} { |x||y|cos(alpha) = xy } { cos(alpha) = (xy) / ( |x||y| ) } { коллинеарность означает, что alpha = 0 => cos( alpha ) = 1 } { 1 = (xy) / ( |x||y| ) } { проверяем это } IsLinearIndependence := abs ( scalarProduct / ( lengthA * lengthB ) - 1 ) < EPSILON; end; end;
var x, y : TVector;{вводимые вектора} begin {ввод векторов} writeln( 'Пожалуйста введите вектор X с ', N, ' компонентами:' ); InputVector( x ); writeln( 'Пожалуйста введите вектор Y с ', N, ' компонентами:' ); InputVector( y );
{печать исходных данных} writeln; writeln( 'Исходные данные' ); writeln( 'Вектор X:' ); PrintVector( x ); writeln( 'Вектор Y:' ); PrintVector( y );
{печать результата} writeln; writeln( 'Результат:' ); write( 'Вектора - линейно ' ); if IsLinearIndependence( x, y ) then writeln( 'зависимые' ) else writeln( 'независимые' ); readln;{ждем ввода} end.
|
|