Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96

"взаимосвязанные" 3Д графики

11.10.2013, 21:43. Показов 1664. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли(и как) сделать в матлабе так, чтобы имелся один 3Д график, скажем, с положительными значениями, а под ним - вертикальная поверхность, образованная кривой в плоскости XY, то есть как бы продемонстрировать криволинейный интеграл и площадь, которую он вычисляет. Но проблема не только в том, чтобы начертить эти две плоскости, а в том, чтобы задать границу вертикальной плоскости, чтобы она не выходила за пределы первоначального графика, когда основная функция не задана. Программу необходимо сделать в виде функции, чтобы можно было её применить к любой заданной функции, чтобы вычислить криволинейный интеграл(здесь можно кривую сделать достоянием функции, то есть интеграл будет вычислятся постоянно по одной и той же кривой).

То есть, меня интересует как сделать так, чтобы плоскость заканчивалась там, она пересекается с графиком заданной функции.

P. S. Я не прошу писать за меня функцию, а только подсказать, как сделать описанный выше момент, с учётом того, что функция будет задаваться какая угодно или в крайнем случае положительная
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2013, 21:43
Ответы с готовыми решениями:

Взаимосвязанные поля
Привет всем. Нужна помощь. Имеется база данных Аксес которую я подключил через ADOQuery также имеется вторая зависимая (лишь программно)....

Взаимосвязанные поля
Доброе всем время суток. Просьба помочь. Ведется база поступивших тревог на пульт охраны. табл.Pult - тип пульта, табл.Ob -...

Взаимосвязанные таблицы
Добрый день уважаемые форумчане! возник вопрос, имеются 3 связанные таблицы. к примеру выбираю строку в 1й таблице, во второй и третьей...

17
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.10.2013, 10:29
А можно чуть подробнее? на примере и эскиз графика и плоскостей - чтот я не могу сообразить...
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
15.10.2013, 13:16  [ТС]
Вот так:


Я хочу написать функцию, которая бы высчитывала криволинейный интеграл, а потом показывала на картинке площадь чего именно интеграл посчитал. f(x.y) криволинейный интеграл, которой будет вычисляться, я бы хотел, чтобы была задана вне функции, то есть обращаешься к функции вычисления интеграла, задаешь какую-нибудь,например, положительную f(x.y), функция считает интеграл и показывает на картинке что она посчитала
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.10.2013, 13:22
там выходит две поверхности и нужно посчитать площадь красного лоскутка?
И как задается эта кривая линия вдоль которй идет интегрирование?
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
15.10.2013, 13:56  [ТС]
Посчитать площадь это уже второстепенная задача, я думаю я с ней сам могу справится, но то, что я не знаю как сделать - это нарисовать вот это для любой заданной верхней функции. Кривая будет постоянной, то есть меняться будет только граница плоскости.

То есть задача такая: иллюстрировать для любой функции геометрическое значение криволинейного интеграла, показать, чего именно площадь находится
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.10.2013, 16:14
Вот загтовка:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear, clc
 
F = @(x,y) 2 - exp(-x.^2); % некоторая поверхность
s = @(x) sin(3*pi*x); % кривая y = f(x)
 
% интервалы значений для поверхности
x = -1:0.01:3; 
y = -2:0.1:2;
 
t = -0.5:0.01:2; % интервал для кривой
[X Y] = meshgrid( x,y );
surf(X,Y,F(X,Y),'FaceAlpha',0.4) % поверхность
shading interp
hold on
plot3(t,s(t),F(t,s(t)),'b') % кривая на поверхности
plot(t,s(t),'r') % проекция
Как залить эту поверхность - я пока не придумал (но копать можно в строну patch и fill3)
1
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
15.10.2013, 16:30  [ТС]
Спасибо Матлаба дома нет, на днях попробую в универе и отпишусь, может быть уже целой программой

А что такое @(x)?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
15.10.2013, 16:38
Цитата Сообщение от Dukaz Посмотреть сообщение
А что такое @(x)?
так мы задаем функцию от х

Вот что получается в той программке:
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
15.10.2013, 20:16  [ТС]
Не уверен, но может быть можно сделать так?
<...>
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
t = -0.5:0.01:2; % интервал для кривой
[X Y] = meshgrid( x,y );
surf(X,Y,F(X,Y),'FaceAlpha',0.4) % поверхность
shading interp
hold on
plot3(t,s(t),F(t,s(t)),'b') % кривая на поверхности
plot(t,s(t),'r') % проекция 
[H,T,S(T)]=meshgrid(0:0.1:2,t, s(t));
for i=1:20
    for j=1:20
       for m=1:20
       H(i,j)>F(s(T(i,m))
       H(i,j)=0
       end
    end
end
surf(T,S(t),H)
Добавлено через 1 час 28 минут
C коэфициентами я, по-моему, что-то напутал. Не суть важно. Идея понятна
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
17.10.2013, 14:10  [ТС]
Ну-с, мне удалось это сделать

Matlab M
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
clear, clc
figure(1)
F = @(x,y) 2 - exp(-x.^2); % некоторая поверхность
s = @(x) sin(3*pi*x); % кривая y = f(x)
 
% интервалы значений для поверхности
x = -1:0.1:3; 
y = -2:0.1:2;
 
 t = -0.5:0.1:2; % интервал для кривой
[X Y]=meshgrid( x,y );
surf(X,Y,F(X,Y),'FaceAlpha',0.4) % поверхность
shading interp
hold on
plot3(t,s(t),F(t,s(t)),'b') % кривая на поверхности
plot(t,s(t),'r') % проекция 
 %H=0:0.1:F(t,s(t))
hold on
[T, S]=meshgrid(t, s(t))
[H]=meshgrid(0:0.075:1.925)
for i=1:26
for j=1:26
        if H(i,j)>F(0.1*i-0.5,s(0.1*i-0.5))
          for m=j:26
            H(i,m)=H(i,j-1)
           end
        end
end
 
end
%plot3(t,s(t),H)
surf(T',S,H)
shading interp
Отвратительно, конечно, выглядит, но это я пока для простоты работы увеличил шаг. Но, главное, наличие результата


Спасибо за помощь
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
17.10.2013, 16:07
А я сообразил, как посчитать интеграл вдоль прямой
Matlab M
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
clear, clc
 
 
F = @(x,y) 2 - exp(-x.^2); % некоторая поверхность
s = @(x) sin(3*pi*x); % кривая y = f(x)
 
% интервалы значений для поверхности
x = -1:0.01:3; 
y = -2:0.1:2;
 
t = -0.5:0.01:2; % интервал для кривой
[X Y] = meshgrid( x,y );
surf(X,Y,F(X,Y),'FaceAlpha',0.4) % поверхность
shading interp
hold on
plot3(t,s(t),F(t,s(t)),'b') % кривая на поверхности
plot(t,s(t),'r') % проекция 
 
L = [0 cumsum( sqrt(diff(t).^2+diff(s(t)).^2) )]; % длинна кривой
P = F(t,s(t)); % значение функции фдоль кривой
S = trapz(L,P); % считаем интеграл
 
figure
area(L,P)
ylabel('Значение ф-ции')
xlabel('Расстояние')
legend(['\int FdS=',num2str(S)])
Добавлен кусочек (строки 19-27) где считается расстояние, интеграл и рисуется развертка траэктории



Поясни только твою идею, для чего ты делал кучу циклов?
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
18.10.2013, 12:56  [ТС]
Интеграл довольно лёгкая вещь, я его сделал правда опять циклами и увеличил точность с помощью ромберга

А как без циклов? Я просто посрезал верхушки у матрицы, где её значение больше значения поверхности в этой точке. Если и можно как-то иначе записать, то я не знаю, я новичок в матлабе и делаю всё по старинке с помощью циклов
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.10.2013, 15:45
увы, я пока не придумал, как нарисовать такую вертикальную поверхность
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.10.2013, 16:28
Ан, нет таки победил
Matlab M
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
clear, clc
 
F = @(x,y) 2 - exp(-x.^2); % некоторая поверхность
s = @(x) sin(3*pi*x); % кривая y = f(x)
 
% интервалы значений для поверхности
x = -1:0.01:3; 
y = -2:0.1:2;
 
t = -0.5:0.01:2; % интервал для кривой
[X Y] = meshgrid( x,y );
Z = F(X,Y);
 
 
surf(X,Y,Z,'FaceAlpha',0.3) % поверхность
shading interp
hold on
plot3(t,s(t),F(t,s(t)),'g','linew',2) % кривая на поверхности
plot(t,s(t),'g','linew',2) % проекция 
 
x1 = [t' t']; 
y1 = s(x1);
z1 = [zeros(size(t')) F(t,s(t))'];
 
surf(x1,y1,z1,'facecolor','r')
xlabel('X')
ylabel('Y')
zlabel('Z')
 
L = [0 cumsum( sqrt(diff(t).^2+diff(s(t)).^2) )]; % длинна кривой
P = F(t,s(t)); % значение функции фдоль кривой
S = trapz(L,P); % считаем интеграл
 
figure
area(L,P)
ylabel('Значение ф-ции')
xlabel('Расстояние')
legend(['\int FdS=',num2str(S)])


Как видишь, я добавил строки 21-25 и обошлось без цикла (хотя поначалу он там был, один), суть которых создать двустолбцовые матрицы x1,y1,z1, первый столбец для z1=0, а второй - для z1 = F(x,y), таким образом как раз и получаем нужную поверхность
2
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
18.10.2013, 19:19  [ТС]
Ага, то есть z1 везде имеет только два значения. Действительно красиво, ничего не скажешь

Интеграл я, правда, посчитаю сложнее и длинее
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.10.2013, 19:56
Цитата Сообщение от Dukaz Посмотреть сообщение
Интеграл я, правда, посчитаю сложнее и длинее
Любопытно взглянуть, т.к. раньше криволинейные интегралы считать не доводилось
*точность моего метода (метод трапеций) можно менять шагом массива t
** есть в матлабе еще хорошая и точная функция интегрирования quad, но для нее нужно аналитическое выражение
0
 Аватар для Dukaz
11 / 11 / 2
Регистрация: 01.05.2013
Сообщений: 96
22.10.2013, 19:33  [ТС]
Вот и доделал программу. Можно было бы ещё улучшить, например ромберга сделать с помощью апроксимации, так же кривую можно было бы задавать не только с переменной х, но и параметрически, но мне уже не хочется больше ей заниматься.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear all
clc
F=input('введите функцию в виде F=@(x,y) 2-exp(-x.^2) : F=')
s=input('введите функцию кривой в виде s=@(x) sin(3*pi*x) : s=')
mez1=input('введите нижнюю границу интегрирования: ')
mez2=input('введите вверхнюю границу интегрирования: ')
e=abs(mez2-mez1)/180
 
%F = @(x,y) 0.2-exp(-0.5*x.^2-2*y.^2); 
%s = @(x) 1-x.^3+cos(2*pi*x);
%@(x,y) 1+x.^2.*y.^2./(abs(x.*y)+1)
 
D=kresleni(F,s,mez1,mez2,e)
Plochaintegralu=integral(F,s,mez1,mez2,e)
Привожу эту часть программы, чтобы было понятнее что именно происходит дальше:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function[Plocha]=integral(F,s,mez1,mez2,e)
int=[0 0 0]
for i=0:2
    krok=2^i*e
    t = mez1:krok:mez2
    t1=[t t(length(t))+krok]
    der=sqrt(1+(diff(s(t1))).^2)
    a=F(t,s(t))
    mezivypocet=a.*der
    skorointegral=mezivypocet
    skorointegral(1,1)=0.5*mezivypocet(1,1)
    skorointegral(1,length(mezivypocet))=0.5*mezivypocet(1,length(mezivypocet))
    int(i+1)=krok*sum(skorointegral)
end
%Romberg
Plocha=64/45*int(1)-20/45*int(2)+1/45*int(3)
Не обращайте внимания на названия переменных, это на другом языке

А третm. часть программы, сам рисунок, я слегка модернизировал:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function[F1,F2,F3,F4]=kresleni(F,s,mez1,mez2,e)
t = mez1:e:mez2
e2=abs((max(t)-min(t)))/400
e3=abs((max(s(t))-min(s(t))))/40
x=min(t):e2:max(t) 
y=min(s(t))-5*e3:e3:max(s(t))+5*e3 
[X Y] = meshgrid( x,y);
Z = F(X,Y);
F1=surf(X,Y,Z,'FaceAlpha',0.3)
shading interp
hold on
F2=plot3(t,s(t),F(t,s(t)),'g','linew',2) 
F3=plot(t,s(t),'g','linew',2)
 
x1 = [t' t']; 
y1 = s(x1);
z1 = [zeros(size(t')) F(t,s(t))'];
 
F4=surf(x1,y1,z1,'facecolor','r')
Z3=zeros(size(Y))
xlabel('X')
ylabel('Y')
zlabel('Z')
Изменил здесь только то, что границы построения графика будут зависеть от границ интегрирования(по иксу - одиноково, по игрику - чуть больше, чем у кривой, для красоты), чтобы не задавать несколько раз переменные, шаг и т. д. и чтобы не вылезла случайно кривая за границу графика. Напоследок пример как это выглядит:
1
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
23.10.2013, 08:17
а она с ручным вводом функции разве работает?
обычно делают так:

Matlab M
str = input('Введите функцию F(x,y)=','s'); %считываем текстовую строку
F = inline(str); %создаем функцию из строки
*я добре розумiю украiнську мову
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2013, 08:17
Помогаю со студенческими работами здесь

Взаимосвязанные списки
Всем привет, помогите разобраться в такой ситуации: у меня несколько выпадающих списков(select) с одинаковыми значениями мне нужно...

Взаимосвязанные списки
Всем привет, помогите разобраться в такой ситуации: у меня несколько выпадающих списков(select) с одинаковыми значениями мне нужно...

Взаимосвязанные перечисления
Имеется справочник &quot;преподаватель&quot;. Имеем поля: Факультет и кафедра. Факультет и кафедра - 2 перечисления. Как сделать чтобы при выборе...

Взаимосвязанные расчеты
Добрый день. Есть две взаимосвязанные функции: y=f(x,a,b,c) и x=f(y,a,b,c). (по коду Ira() и ArI()) Значения x,y,a,b,c находятся в...

Взаимосвязанные таблицы на 2-5 листах
Основной лист: конкретный трактор с уникальным номером;Менеджер по продажам;Продано(ДА\НЕТ) Лист менеджера Иванова; конкретный...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru