IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V < 1 2  
Ответить в эту темуОткрыть новую тему
> С++ & Pascal, Вектора в n-мерном пространстве
tig81
сообщение 3.10.2010, 12:28
Сообщение #21


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(InFuz @ 3.10.2010, 15:08) *

а квадрат евклидовой нормы это будет e=x1^2+y1^2+x2^2+y2^2 ?

Откуда такая формула?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 3.10.2010, 13:11
Сообщение #22


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



евклидова норма это корень из суммы квадратов координат вектора.
я не совсем понял вот и спрашиваю.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 3.10.2010, 13:18
Сообщение #23


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



e = (x2-x1)^2 + (y2-y1)^2 - это уже квадрат нормы
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 3.10.2010, 13:29
Сообщение #24


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



1 вот так получилась

Цитата
program vekt;
uses crt;
var x1,x2,y1,y2,xb,yb,sp:integer; en:real;
BEGIN
clrscr;

write('x1= '); readln(x1);
write('y1= '); readln(y1);
write('x2= '); readln(x2);
write('y2= '); readln(y2);

xb:=x1+x2;
yb:=y1+y2;
writeln('A(x1,y1)+B(x2,y2)= (',xb,',',yb,')');
xb:=x1-x2;
yb:=y1-y2;
writeln('A(x1,y1)-B(x2,y2)= (',xb,',',yb,')');
sp:=x1*y1+x2*y2;
writeln('A*B=',sp);
en:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
writeln('Evk. norm.= ',en);

readkey
END.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 3.10.2010, 13:45
Сообщение #25


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



То что я написал - это норма разности двух векторов.
Немножко перепутал норму и метрику.
норма вычисляется относительного одного вектора
Для первого: sqrt(x1^2+y1^2)
Для второго: sqrt(x2^2+y2^2)

По первой более нет замечаний.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tig81
сообщение 3.10.2010, 13:46
Сообщение #26


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(Vahappaday @ 3.10.2010, 16:18) *

e = (x2-x1)^2 + (y2-y1)^2 - это уже квадрат нормы

Квадрат нормы чего?


Цитата(Vahappaday @ 3.10.2010, 16:45) *

То что я написал - это норма разности двух векторов.

А...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 3.10.2010, 13:54
Сообщение #27


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



ясно
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 8.10.2010, 13:50
Сообщение #28


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Цитата(Евгений М. @ 3.10.2010, 15:32) *

У меня сомнения, что вектора (1;2) и (2;5) коллинеарны. Вообще Вы используете целочисленное деление (т.е. дробные части откидываются).
Используйте это равенство:
x1*y2-x2*y1=0
Если равенство выполняется то вектора коллинеарны.


а для n мерного пространства какая будет формула?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 8.10.2010, 15:41
Сообщение #29


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



для n-мерного пространства будет n-1 формула
(x1)1*(x2)2 - (x1)2*(x2)1=0
(x2)1*(x3)2 - (x2)2*(x3)1=0
....
(x(n-1))1*(xn)2 - (x(n-1))2*(xn)1=0,
где
(xi)j - i-я координата j-го вектора
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 9.10.2010, 12:29
Сообщение #30


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Vahappaday чот не въеду не как в то что вы написали.
вот у меня такая штука получилась, я создал массив kmas который хранит коэффициенты k для каждой пары x1,x2; y1,y2 и т.д. но все равно не фига не работает выдает что (1,2) кол-ен (2,5)

Код
//-----------------------------------------------------------------
    void main()
    {
      clrscr();
      int i,sp1=1,sp2=1,n,f=0;
      cout<<"n="; cin>>n;
      int* vek1 = new int[n];
      int* vek2 = new int[n];
      double* kmas = new double[n];
//------------------------------------------------------------------
      cout<<"zadaite 1 vektor"<<"\n";
      for (i=0; i<n; i++)
      {
    cin>>vek1[i];
      }
      cout<<"zadaite 2 vektor"<<"\n";
      for (i=0; i<n; i++)
      {
    cin>>vek2[i];
      }
//------------------------------------------------------------------
      for (i=0; i<n; i++)
      {
    sp1=sp1*vek1[i];
    sp2=sp2*vek2[i];
    if(vek2[i]!=0)kmas[i]=(double)vek1[i]/vek2[i];
      }
      sp2=sp1+sp2;
      if(sp2==0) cout<<"vektora perp. \n";
      else cout<<"vektora ne perp. \n";
      for (i=0; i<n-1; i++)
      {
    if(kmas[i]==kmas[i+1]) f=1;
    else {f=0; break;}
      }
      if(f=1) cout<<"vektora kol.";
      else cout<<"vektora ne kol.";
       for (i=0; i<n; i++)
      {
    cout<<"\n kmas["<<i<<"]="<<kmas[i];
      }

      delete []vek1;
      delete []vek2;
      delete []kmas;
      getch();
    }
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 9.10.2010, 15:42
Сообщение #31


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



if(f==1) cout<<"vektora kol.";
Косячить будет ещё и в случае, когда один из векторов имеет нулевую координату.
Так что рекомендую всё же обратиться к тем формулам, что я написал.

Да и проверка на перпендикулярность не корректна:
например, на вектора (2; 2), (1; -1) ваша программа говорит, что они не перпендикулярны, хотя они как раз таковыми являются.
Перемножать надо не все координаты одного вектора между собой.
Надо сделать сумму произведений соответствующих координат векторов.

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 10.10.2010, 10:47
Сообщение #32


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Цитата(Vahappaday @ 9.10.2010, 19:42) *

Да и проверка на перпендикулярность не корректна:
например, на вектора (2; 2), (1; -1) ваша программа говорит, что они не перпендикулярны, хотя они как раз таковыми являются.
Перемножать надо не все координаты одного вектора между собой.
Надо сделать сумму произведений соответствующих координат векторов.


как же 2,2 и 1,-1 преп. если 2*2 не равно 1*(-1)? если скалярное произведение = 0, то вектора перпендикулярны.

помогите формулы внедрить а то чот я в них ни как не разбирусь например (xi)j - i-я координата j-го вектора у нас только 2 вектора нам не нужно j.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 10.10.2010, 11:25
Сообщение #33


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Насчёт (2;2) и (1; -1) - нарисуйте на бумажке, будет сразу видно, что они перпендикулярны.
И скалярное произведение у них будет такое:
2*1 + 2*(-1) = 2-2=0

Насчёт коллинеарности, я бы проверял так:
f=1;
for (i=0; i<n-1; i++)
{
if(vek1[i]*vek2[i+1] - vek1[i+1]*vek2[i])
{
f=0;
break;
}
}
А дальше уж Ваша проверка.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V < 1 2
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 19.4.2024, 15:18

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru