Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование в MatLAb. ВУЗ

Максим Карпов Ученик (182), на голосовании 2 дня назад
задание по теоретической механике. по коду нужно получить картинку, картинка получается, но выдаёт ошибку функции.
код:
syms t
r=2+sin(8*t);
phi=t+0.2*cos(6*t);
x=r*cos(phi);
y=r*sin(phi);
vx=diff(x);
vy=diff(y);
wx=diff(vx);
wy=diff(vy);
t=0:0.01:10;
x=eval(x);
y=eval(y);
vx=eval(vx);
vy=eval(vy);
wx=eval(wx);
wy=eval(wy);
phiv=atan2(vy,vx);
phiw=atan2(wy,wx);
figure
axis equal
xlim([-10 10])
ylim([-10 10])
xlim manual
ylim manual
hold on

plot(x,y);
p=plot(x(1),y(1),'o','markersize',10,'markerfacecolor',[0 1 0]);

arrow = [-0.8 0 -0.8; 0.25 0 -0.25];
vline = plot([x(1) x(1)+vx(1)],[y(1) y(1)+vy(1)],'color',[1 0 0]);
rarrow = rot2d(arrow,phiv(1));
varrow = plot(x(1)+vx(1)+rarrow(1,:),y(1)+vy(1)+rarrow(2,:),'color',[1 0 0]);

wline = plot([x(1) x(1)+wx(1)],[y(1) y(1)+wy(1)],'color',[0 0.5 0]);
rarrow = rot2d(arrow,phiw(1));
warrow = plot(x(1)+wx(1)+rarrow(1,:),y(1)+wy(1)+rarrow(2,:),'color',[0 0.5 0]);

rline=[];
rpoint=[];

for i=1:length(t)
set(p,'xdata',x(i),'ydata',y(i));

set(vline,'xdata',[x(i) x(i)+vx(i)],'ydata',[y(i) y(i)+vy(i)]);
rarrow = rot2d(arrow,phiv(i));
set(varrow,'xdata',x(i)+vx(i)+rarrow(1,:),'ydata',y(i)+vy(i)+rarrow(2,:));

set(wline,'xdata',[x(i) x(i)+wx(i)],'ydata',[y(i) y(i)+wy(i)]);
rarrow = rot2d(arrow,phiw(i));
set(warrow,'xdata',x(i)+wx(i)+rarrow(1,:),'ydata',y(i)+wy(i)+rarrow(2,:));
set(rline);
set(rpoint);
pause(0.01);
end

function a = rot2d(m,phi)
a(1,:)=m(1,:)*cos(phi)-m(2,:)*sin(phi);
a(2,:)=m(1,:)*sin(phi)+m(2,:)*cos(phi);
end

ошибка: Unrecognized function or variable 'rot2d'
помогите убрать ошибку.
Голосование за лучший ответ
Factator Мастер (1827) 1 месяц назад
Попробуй
 function main 
syms t
r=2+sin(8*t);
phi=t+0.2*cos(6*t);
x=r*cos(phi);
y=r*sin(phi);
vx=diff(x);
vy=diff(y);
wx=diff(vx);
wy=diff(vy);
t=0:0.01:10;
x=eval(x);
y=eval(y);
vx=eval(vx);
vy=eval(vy);
wx=eval(wx);
wy=eval(wy);
phiv=atan2(vy,vx);
phiw=atan2(wy,wx);
figure
axis equal
xlim([-10 10])
ylim([-10 10])
xlim manual
ylim manual
hold on

plot(x,y);
p=plot(x(1),y(1),'o','markersize',10,'markerfacecolor',[0 1 0]);

arrow = [-0.8 0 -0.8; 0.25 0 -0.25];
vline = plot([x(1) x(1)+vx(1)],[y(1) y(1)+vy(1)],'color',[1 0 0]);
rarrow = rot2d(arrow,phiv(1));
varrow = plot(x(1)+vx(1)+rarrow(1,:),y(1)+vy(1)+rarrow(2,:),'color',[1 0 0]);

wline = plot([x(1) x(1)+wx(1)],[y(1) y(1)+wy(1)],'color',[0 0.5 0]);
rarrow = rot2d(arrow,phiw(1));
warrow = plot(x(1)+wx(1)+rarrow(1,:),y(1)+wy(1)+rarrow(2,:),'color',[0 0.5 0]);

rline=[];
rpoint=[];

for i=1:length(t)
set(p,'xdata',x(i),'ydata',y(i));

set(vline,'xdata',[x(i) x(i)+vx(i)],'ydata',[y(i) y(i)+vy(i)]);
rarrow = rot2d(arrow,phiv(i));
set(varrow,'xdata',x(i)+vx(i)+rarrow(1,:),'ydata',y(i)+vy(i)+rarrow(2,:));

set(wline,'xdata',[x(i) x(i)+wx(i)],'ydata',[y(i) y(i)+wy(i)]);
rarrow = rot2d(arrow,phiw(i));
set(warrow,'xdata',x(i)+wx(i)+rarrow(1,:),'ydata',y(i)+wy(i)+rarrow(2,:));
set(rline);
set(rpoint);
pause(0.01);
end
end

function a = rot2d(m,phi)
a(1,:)=m(1,:)*cos(phi)-m(2,:)*sin(phi);
a(2,:)=m(1,:)*sin(phi)+m(2,:)*cos(phi);
end

main
Максим КарповУченик (182) 1 месяц назад
function main

Error: Function definitions are not supported in this context. Functions can only be created as local or nested functions in code files.
вот что выдаёт
Максим КарповУченик (182) 1 месяц назад
я пользуюсь онлайн версией матлаба, может там нужно както запустить библиотеки какие-то?
Centurio Просветленный (31633) 1 месяц назад
В сообщении об ошибке ясно говорится, что не записана заранее функция rot2d. По всей видимости, это m-функция, заданная пользователем. Скорее всего, код не ваш, вы его откуда-то взяли. Однако, к нему должен ещё прилагаться код m-функции rot2d.

Зачем вы используете символьные вычисления? Сдаётся мне, что вам в итоге нужно получить конкретные численные значения.
Похожие вопросы