Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389

Как передать аргументы функции

11.06.2019, 10:11. Показов 5520. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Знаю вопрос банальный, но я не особо шарю в MatLab. Я так понял здесь:
Кликните здесь для просмотра всего текста
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function BoundarySpline(x0,y0,t0,xf,yf,tf)
    %Setup figure
    figure (1);
    
    %Segment Parameters
    global  Lmin;
    global Amin;
    Lmin = 7.5;
    Amin =pi/2;
    
    %Control Polylines
    px = [];
    py = [];
  
    x1 = x0+Lmin*cos(t0);
    y1 = y0+Lmin*sin(t0);
    
    x2 = xf+Lmin*cos(tf-pi);
    y2 = yf+Lmin*sin(tf-pi); 
    
    px=[x0,x1,x2,xf];
    py=[y0,y1,y2,yf];
 
    %Ensure that all turns do not exceed turning angle thershold
    
    %--------Start segment--------%
    %check start
    [sx,sy]=sharpb(px,py);
    
    
    px=[sx,px(end-1:end)];
    py=[sy,py(end-1:end)];
 
    %--------End Segment--------%
    [ex,ey]=sharpb(fliplr(px),fliplr(py));
    ex =  fliplr(ex);
    ey =  fliplr(ey);
    
    %%update control polyline
    px = [sx,ex];
    py = [sy,ey];
     
    
    %Add Midpoints
    [px,py]=midpoint(px,py);
   
    
    %check mid section feasbility
    [px,py]=sharp(px,py);
    
    %Produce plots
    [x,y]=Bspline(px,py);
    
    %Curvature(x,y,0.1);
    %Tracking(x,y);
    %HeadingTrack(x,y,0.1,px(1),py(1),qtan(py(1),px(1),py(2),px(2)),10000);
 
  
end
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function [px,py]=midpoint(px,py)
    %add midpoints
    for i=0:1:size(px,2)-1;
        mx(2*i+1)=px(i+1);
        my(2*i+1)=py(i+1);
    end
    for i=2:2:size(mx,2)-1;
        mx(i)=(mx(i-1)+mx(i+1))/2;
        my(i)=(my(i-1)+my(i+1))/2;
    end
    px=mx(:)';
    py=my(:)';
end
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function [px,py]=sharp(px,py)
    global  Lmin;
    global  Amin;
    %number of segments = (number of points-5)/2 + 1
    %seg=(size(px,2)-3)/2;
    i=2;
    while i <((size(px,2)-3)/2);
        n=2*i-1; %segment start point
        
        %Apply cosine rule to find turning angle value
        c=sqrt((px(n)-px(n+4))^2+(py(n)-py(n+4))^2);
        a=sqrt((px(n)-px(n+2))^2+(py(n)-py(n+2))^2);
        b=sqrt((px(n+2)-px(n+4))^2+(py(n+2)-py(n+4))^2);
        H=(a*a+b*b-c*c)/(2*a*b);
        gamma= acos(H);
        gamma*180/pi;    
       
        
        if gamma<(Amin)
            %shift cells in arrays by two starting from the last cell in
            %segment
            for j=size(px,2):-1:n+4;
                px(j+2)=px(j);
                py(j+2)=py(j);
            end
%             %calculate the three new points
%             %locate points relative to each other
%             s(1,1)=px(n);s(1,2)=py(n);
%             g(1,1)=px(n+2);g(1,2)=py(n+2);
%             v(1,1)=px(n+6);v(1,2)=py(n+6);
%             d= sign(det([(s-g);(g-v)])/(norm(s-g)));
%             dx=sign(px(n+6)-px(n))*1;
%             dy=sign(py(n+6)-py(n))*1;
            
            %New points
            ang=qtan(py(n),px(n),py(n+2),px(n+2));
            
            px1=px(n+2)+Lmin*cos(pi/2+ang);
            py1=py(n+2)+Lmin*sin(pi/2+ang);
            d1 = sqrt((px1-px(n+6))^2+(py1-py(n+6))^2);
            px2=px(n+2)-Lmin*cos(pi/2+ang);
            py2=py(n+2)-Lmin*sin(pi/2+ang);
            d2 = sqrt((px2-px(n+6))^2+(py2-py(n+6))^2);
            
            if d1<=d2;
                px(n+4) = px1;
                py(n+4) = py1;
            else
                px(n+4) = px2;
                py(n+4) = py2;
            end
            
            px(n+5)=(px(n+4)+px(n+6))/2;
            py(n+5)=(py(n+4)+py(n+6))/2;
            
            px(n+3)=(px(n+4)+px(n+2))/2;
            py(n+3)=(py(n+4)+py(n+2))/2;
            i=i+1;
        end
       
       i=i+1;
       
    end
end
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function [px,py]=sharpb(px,py)
    global  Lmin;
    global  Amin;
   
    i=1;
    
        n=i; %segment start point
        
        %Apply cosine rule to find turning angle value
        c=sqrt((px(n)-px(n+2))^2+(py(n)-py(n+2))^2);
        a=sqrt((px(n)-px(n+1))^2+(py(n)-py(n+1))^2);
        b=sqrt((px(n+1)-px(n+2))^2+(py(n+1)-py(n+2))^2);
        H=(a*a+b*b-c*c)/(2*a*b);
        gamma= acos(H);
        
        if gamma<(Amin)
            %shift cells in arrays by two starting from the last cell in
            %segment
            for j=size(px,2):-1:n+2;
                px(j+1)=px(j);
                py(j+1)=py(j);
            end
            %calculate the three new points
            %locate points relative to each other
%             s(1,1)=px(n);s(1,2)=py(n);
%             g(1,1)=px(n+1);g(1,2)=py(n+1);
%             v(1,1)=px(n+2);v(1,2)=py(n+2);
%             d= sign(det([(s-g);(g-v)])/(norm(s-g)));
%             
%      
%             dx=sign(px(n+3)-px(n))*1;
%             dy=sign(py(n+3)-py(n))*1;
%            
            %New points
            ang=qtan(py(n),px(n),py(n+1),px(n+1));
            
            px1=px(n+1)+Lmin*cos(pi/2+ang);
            py1=py(n+1)+Lmin*sin(pi/2+ang);
            d1 = sqrt((px1-px(n+3))^2+(py1-py(n+3))^2);
            px2=px(n+1)-Lmin*cos(pi/2+ang);
            py2=py(n+1)-Lmin*sin(pi/2+ang);
            d2 = sqrt((px2-px(n+3))^2+(py2-py(n+3))^2);
            
            if d1<=d2;
                px(n+2) = px1;
                py(n+2) = py1;
            else
                px(n+2) = px2;
                py(n+2) = py2;
            end
            
            px =px(1:3);
            py =py(1:3);
        else
            px =px(1:2);
            py =py(1:2);
        end
       
       i=i+1;
       
    end
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function [x,y]=Bspline(px,py)
 
px=px(:)';py=py(:)';
%Intialize some variables
du = 0.001;
u=0:du:1; %parameter
x=u*0;
y=u*0;
% Calculate basis function for a B-spline curve based on user inputed control points 
for deg=3;
% generate normalized uniform knot vector with clamped ends
uhat=knot(px,deg);
% evaluate deBoor algorithm at each point along the parameter values
for i=1:1:size(u,2);
    [x(i),y(i)]=deBoor(u(i),px,py,uhat,deg);
end
figure(1); plot(x,y,'LineWidth',2, 'Color',[34,147,216]/255);grid off; xlabel ('x','FontName','Times New Roman','FontAngle','Italic','FontSize',22); ylabel('y','FontName','Times New Roman','FontAngle','Italic','FontSize',22);hold on;
%figure(1); plot(px,py,'-*','Color',[165,165,165]/255);hold on
axis('equal')
end
end
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
function [x,y]=deBoor(u,px,py,uhat,deg)
%create basis function empty matrix
N=zeros(size(px,2)+deg,deg+1); % degree+1 = 4th order is assumed for cubic curves
%create first level of basis function where p=1, and i<= control+3
for i=1:1:size(px,2)+deg;
    if ((u >= uhat(i)) && (u < uhat(i+1)));
        N(i,1)=1;
    end
end
if u==1
    for i=1:1:size(px,2)+deg;
    if ((u >= uhat(i)) && (u <= uhat(i+1)));
        N(i,1)=1;
    end
    end
end
%de Boor's recursive algorithm
for p=2:1:deg+1;
    i_max = size(px,2)+deg+1-p;
    for i=1:1:i_max;
        if uhat(i+p-1)~=uhat(i) && uhat(i+p)~=uhat(i+1)
        N(i,p)=(N(i,p-1)*(u-uhat(i))/(uhat(i+p-1)-uhat(i)))+((N(i+1,p-1)*(-u+uhat(i+p))/(uhat(i+p)-uhat(i+1))));
        %N(isnan(N)) = 0 ;
        elseif uhat(i+p-1)==uhat(i)
        N(i,p)=((N(i+1,p-1)*(-u+uhat(i+p))/(uhat(i+p)-uhat(i+1))));
        elseif uhat(i+p)==uhat(i+1)
        N(i,p)=(N(i,p-1)*(u-uhat(i))/(uhat(i+p-1)-uhat(i)));
        end
    end
end
%Evaluate bspline curve at this instance
x=0;
y=0;
for i=1:1:size(px,2)
    x=x+N(i,deg+1)*px(i);
    y=y+N(i,deg+1)*py(i);
end
end
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function uhat=knot(px,p)
knot_size=size(px,2)+(p+1); % m=n+p+1
delta_uhat=1/(knot_size+1-(p+1)*2); %end knots are of the orders multiplicity
uhat=zeros(1,knot_size);
for i=1:1:p+1
    uhat(i)=0;
    uhat(knot_size+1-i)=1;
end
 
for i=p+2:knot_size-(p+1)
    uhat(i)=uhat(i-1)+delta_uhat;
end
end
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
39
function theta=qtan(y1,x1,y2,x2)
    
theta=atan((y2-y1)/(x2-x1));
 
%First Quadrant
if (x2>x1)&&(y2>y1);
    theta =abs(theta);
    
%90 degrees
elseif (x2==x1)&&(y2>y1);
    theta = pi/2;
   
%180 degrees
elseif (x2<x1)&&(y2==y1);
    theta = pi;
    
%270 degrees
elseif (x2==x1)&&(y2<y1);
    theta =-pi/2;   
    
%Second Quadrant
elseif (x2<x1)&&(y2>y1);
    theta = pi - abs(theta);
    
%Third Quadrant
elseif (x2<x1)&&(y2<y1);
    theta = abs(theta) -pi;
    
%Fourth Quadrant
elseif (x2>x1)&&(y2<y1);
    theta = -abs(theta);
    
%Zero
elseif (x2>x1)&&(y2==y1);
    theta =0;
    
end
 
end

Нужно передать аргументы в функцию, чтобы она заработал. Подскажите плиз как это сделать????

Добавлено через 35 минут
Данный код должен реализовывать b-сплайн на основе его параметрического описания
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2019, 10:11
Ответы с готовыми решениями:

Аргументы функции
Добрый день. Столкнулся с проблемой передачи аргументов в функцию. У меня есть матрица, которую я хочу как-то изменить внутри функции....

Аргументы функции normrnd
В общем есть прога для моделирования кабельной линии связи n=1024; i=1:n; %Частотная характеристика линии связи f=0:n-1; %в 10 кГц ...

Как передать Inline-функции параметры?
Суть проблемы такова. Есть m-файл следующего содержания: function c = MyFunc(SS,a,b) F = inline(SS); c = F(a,b); На вход...

11
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
11.06.2019, 15:01
Я не понял вопроса. Вы дали кучу функций, у каждой есть свои аргументы
1
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389
12.06.2019, 14:08  [ТС]
Цитата Сообщение от nuHrBuH Посмотреть сообщение
Вы дали кучу функций, у каждой есть свои аргументы
Нууу как их передать хотя бы в первую
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
12.06.2019, 17:09
Выходные?
Matlab M
1
function [x,y] = BoundarySpline(x0,y0,t0,xf,yf,tf)
1
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389
12.06.2019, 17:24  [ТС]
Цитата Сообщение от nuHrBuH Посмотреть сообщение
Выходные?
Да не, я так понял на вход нет значений
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
12.06.2019, 17:32
Как их найти
1
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389
12.06.2019, 18:01  [ТС]
Цитата Сообщение от nuHrBuH Посмотреть сообщение
Как их найти
nuHrBuH, можете просто без привязки к коду выше сказать как в MatLab выше сказать как в matLab задать входной аргумент для функции а потом передать выходной в другую функцию
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
12.06.2019, 18:31
Цитата Сообщение от Jasta Посмотреть сообщение
как в matLab задать входной аргумент для функции
Цитата Сообщение от Jasta Посмотреть сообщение
а потом передать выходной в другую функцию
Matlab M
1
2
y=sin(3.14);
x=asin(y);
1
19 / 17 / 6
Регистрация: 09.01.2014
Сообщений: 351
12.06.2019, 18:35
function [out] = myfun(in) - задаете функцию. out - выход, in - вход.
чтобы получить выходной аргумент пишите к скрипте
[любое имя переменной] = myfun(некоторый аргумент)
1
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389
12.06.2019, 18:46  [ТС]
Цитата Сообщение от SSC Посмотреть сообщение
y=sin(3.14);
x=asin(y);
У меня что то не работает:
Matlab M
1
2
3
4
function [f1] = fOne (t)
f1 = 1/6*(1-t)^3;
end
d = fOne(0.2);
Выдаёт ошибку:
Error: File: fOne.m Line: 4 Column: 1
This statement is not inside any function.
(It follows the END that terminates the definition of the function "fOne".)
Что не так???
0
19 / 17 / 6
Регистрация: 09.01.2014
Сообщений: 351
12.06.2019, 19:05
Лучший ответ Сообщение было отмечено Jasta как решение

Решение

попробуйте функцию в отдельном файле создать, а 4 строку перенести в 1 строку скрипта
1
 Аватар для Jasta
1516 / 573 / 137
Регистрация: 20.02.2016
Сообщений: 3,389
12.06.2019, 19:34  [ТС]
Цитата Сообщение от Ofdeath Посмотреть сообщение
попробуйте функцию в отдельном файле создать, а 4 строку перенести в 1 строку скрипта
то есть в одном файле функция:
Matlab M
1
2
3
function [f1] = fOne (t)
f1 = 1/6*(1-t)^3;
end
а во втором её вызов^
Matlab M
1
d = fOne(0.2);
Так???

Добавлено через 6 минут
После
Цитата Сообщение от Ofdeath Посмотреть сообщение
попробуйте функцию в отдельном файле создать, а 4 строку перенести в 1 строку скрипта
После перезапуска заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2019, 19:34
Помогаю со студенческими работами здесь

Как передать аргументы функции, назначенной addEventListener?
К примеру: function alerter (txt) { alert(txt); } document.body.addEventListener(&quot;click&quot;,alerter,false,&quot;it's work&quot;); Не...

Как передать имя функции и её аргументы в виде текстовой переменной и запустить её преобразовав в команду?
Возможно ли передать имя функции и её аргументы в виде текстовой переменной и потом запустить её преобразовав текст в команду? Т.е....

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число
Короче, вот бы всё норм. Хочу соединять, но он мне выдаёт ошибку, когда использую strcat. Не могу понять, с типами аргументов вроде проблем...

Как передать аргументы?
Подскажите как передать аргументы чтобы калькулятор заработал? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; int Op(int...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru