5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
1

Вычисление кривизны Гаусса

17.02.2011, 23:41. Показов 1494. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Я попыталась сделать функцию в матлабе, которая считала бы кривизну Гаусса, например для тора, который задаётся следующим видом:
x=(5+2*cos(u))*cos(v)
y=(5+2*cos(u))*sin(v)
z=2*sin(u).
Всё дело в том, что функция как то считает кривизну, но она не использует формулы для сокращения в тригонометрии (например cos(u)^2 +sin(u)^2=1, а пишет просто это выражение:cos(u)^2 +sin(u)^2) и в конечном итоге получается не простой ответ, а огромная строка этих вычислений и по ним не строится график. Может кто нибудь понимает, что надо сделать? может я не те функции применяю или просто не доработала? Вот код функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function gc = gcurvature(x,y,z)
syms u v
xu   =   diff(x,u,1);
xuv  = diff(xu,v,1);
xv   =  diff(x,v,1);
xuu  =   diff(x,u,2);
xvv  = diff(x,v,2);
 
yu   =   diff(y,u,1);
yv   =   diff(y,v,1);
yuv  =   diff(yu,v,1);
yvv  = diff(y,v,2);
yuu  = diff(y,u,2);
 
zu   =   diff(z,u,1);
zv   = diff(z,v,1);
zuv  =   diff(zu,v,1);
zuu  =   diff(z,u,2);
zvv  = diff(z,v,2);
 
 for i=1:(size(z,1))
     for j=1:(size(z,2))
        Xu          =   [xu(i,j) yu(i,j) zu(i,j)];
        Xv          =   [xv yv zv];
        Xuu         =   [xuu yuu zuu];
        Xuv         =   [xuv yuv zuv];
        Xvv         =   [xvv yvv zvv];
        E           =   dot(Xu,Xu);
        F           =   dot(Xu,Xv);
        G           =   dot(Xv,Xv);
        m           =   cross(Xu,Xv);
        n           =   m/sqrt(sum(m.*m));
        L           =   dot(Xuu,n);
        M           =   dot(Xuv,n);
        N           =   dot(Xvv,n);
       
        %[U, V] = meshgrid(linspace(0, 2*pi, n), linspace(0, 2*pi, m));
        gc = ((L*N)-M^2)/((E*G)-F^2);
      %surfl(x, y, z );
     % hold on
     % plot(gc)
  % axis([-5 5 -5 5 -5 5])
   %axis off
   %colormap pink
  % hold off
      end
 end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2011, 23:41
Ответы с готовыми решениями:

Вычисление определителя методом Гаусса
Приветствую! Имеется блок-схема по которой нужно решить задачу. Не могу понять где я свернул не там...

Во сколько раз радиус R1 кривизны траектории протона больше радиуса R2 кривизны траектории α-частицы?
Протон и α-частица, ускоренные одинаковой разностью потенциалов, влетают в однородное магнитное...

Во сколько раз радиус кривизны траектории протона больше радиуса кривизны траектории электрона
Протон и электрон, ускоренные одинаковой разностью потенциалов, влетают в однородное магнитное...

Вычисление методом Гаусса
Ребят, такая проблемма. Надо в C# написать программное решение - вычисление методом Гаусса. Я не...

2
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
18.02.2011, 09:51 2
Уважаемая, Karta, Вы показываете только подпрограмму-функцию и не даете программы, которая ее вызывает. Не зная связи между этими двумя программами Вам трудно помочь.
Кривизна поверхности, на сколько я понимаю, содержится в матрице gc. Как Вы передаете эту матрицу в основную программу, т.е. как происходит обращение к подпрограмме gcurvature(x,y,z).
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
20.02.2011, 01:14  [ТС] 3
Вот, посылаю то, до чего смогла додуматься:
>> a = 40
>> b = 20
>> U, V] = meshgrid(linspace(0, 2*pi, a), linspace(0, 2*pi, b))
>> X=(5+2.*cos(U)).*cos(V)
>> Y=(5+2.*cos(U)).*sin(V)
>> Z=2.*sin(U)
>> c = gcurvature(X,Y,Z)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function gc = gcurvature(X,Y,Z)
syms U V
xu   =   diff(X,U,1);
xuv  = diff(xu,V,1);
xv   =  diff(X,V,1);
xuu  =   diff(X,U,2);
xvv  = diff(X,V,2);
 
yu   =   diff(Y,U,1);
yv   =   diff(Y,V,1);
yuv  =   diff(yu,V,1);
yvv  = diff(Y,V,2);
yuu  = diff(Y,U,2);
 
zu   =   diff(Z,U,1);
zv   = diff(Z,V,1);
zuv  =   diff(zu,V,1);
zuu  =   diff(Z,U,2);
zvv  = diff(Z,V,2);
 
 for i=1:(size(Z,1))
     for j=1:(size(Z,2))
        Xu          =   [xu(i,j) yu(i,j) zu(i,j)];
        Xv          =   [xv(i,j) yv(i,j) zv(i,j)];
        Xuu         =   [xuu(i,j) yuu(i,j) zuu(i,j)];
        Xuv         =   [xuv(i,j) yuv(i,j) zuv(i,j)];
        Xvv         =   [xvv(i,j) yvv(i,j) zvv(i,j)];
        E           =   dot(Xu,Xu);
        F           =   dot(Xu,Xv);
        G           =   dot(Xv,Xv);
        m           =   cross(Xu,Xv);
        n           =   m/sqrt(sum(m.*m));
        L           =   dot(Xuu,n);
        M           =   dot(Xuv,n);
        N           =   dot(Xvv,n);
        
       % a := 40;
       % b := 20;
       % [U, V] := meshgrid(linspace(0, 2*pi, a), linspace(0, 2*pi, b));
        gc = ((L*N)-M^2)/((E*G)-F^2);
      %surfl(x, y, z );
     % hold on
     % plot(gc)
  % axis([-5 5 -5 5 -5 5])
   %axis off
   %colormap pink
  % hold off
      end
 end
а дальше моя функция не вычисляется вообще, не говоря уже про график... я уже просто не знаю, что ещё предпринять... Может у кого то есть какие нибудь мысли на этот счёт?
0
20.02.2011, 01:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2011, 01:14
Помогаю со студенческими работами здесь

Вычисление определителя Методом Гаусса
Как сделать обмен строк в этом методе? #include <stdio.h> #include <conio.h> #include <cstdlib>...

Вычисление определителя методом Гаусса
Добрый день! Объясните, пожалуйста кто нибудь, почему в вычислении определителя по Гауссу в одной...

Вычисление определителей методом Гаусса
Написать программу, реализующую вычисление определителя методом Гаусса с выбором ведущего...

Вычисление интеграла методом Гаусса
Написать и отладить программу вычисления интеграла указанным методом двумя способами – по заданному...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru