matlab 怎么动态画曲线

matlab 怎么动态画曲线,第1张

可以用Matlab制作gif来实现,下面是一个示例代码:

%适用于在一幅图中表现给图过程,即图形的增长过程

 

%主要用来绘制三维的欧拉公式

clc;clear;clf;close all;

 

%获得数据

tmax = 4pi;

t = 0:001:tmax;

tmp = exp(1it);

x = real(tmp);

y = imag(tmp);

[a,b] = size(x);

y1 = zeros(a,b) ;

x1 = zeros(a,b);

 

%确定首幅图的样式,并指定标题,坐标轴标题等样式

plot3(x(1,1),t(1,1),y(1,1),'black');

hold on

plot3(x(1,1),t(1,1),y1(1,1),'blue');

plot3(x1(1,1),t(1,1),y(1,1),'r');

axis([-1,1,0,tmax,-1,1])

str = ['$${e^{it}} = \cos t + i\sin t $$',char(13,10)','created

by Lijunjie!'];

title({str},'Interpreter','latex')

xlabel('实轴');

ylabel('时间轴');

zlabel('虚轴');

grid on;

set(gcf,'Position',[0,0,600,600], 'color','w');

set(gca,'ydir','reverse')   %反转坐标轴

 

%确保图像在采集的过程中包括坐标轴及标题

ax = gca;

axUnits = 'pixels';

pos = axPosition;

ti = axTightInset;

rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];

 

%在指定的范围内获得图像文件

frame = getframe(ax,rect);

im=frame2im(frame);

 

%创建gif文件,指定其样式,写入首帧图像

k = 1;

%用胞元存储采集到的图像,方便后面反转图像用

[I{k},map{k}]=rgb2ind(im,256);

imwrite(I{k},map{k,1},'mygifgif','gif','Loopcount',Inf,'DelayTime',02);

 k = k + 1;

 

 %画图并采集到gif中

steptmp = 20;   %每幅图要画的点数

i = steptmp;

while i < (b-1)

    x_1 = x(1,(i-steptmp+1):i+1);

    t_1 = t(1,(i-steptmp+1):i+1);

    y_1 = y(1,(i-steptmp+1):i+1);

    y1_1 = y1(1,(i-steptmp+1):i+1);

    x1_1 = x1(1,(i-steptmp+1):i+1);

    plot3(x_1,t_1,y_1,'black');

    hold on

    plot3(x_1,t_1,y1_1,'blue');

    plot3(x1_1,t_1,y_1,'r');

   

    %下面是制作gif的主要代码,除了调节间隔时间外,一般不需要改动 

    ax = gca;

    axUnits = 'pixels';

    pos = axPosition;

    ti = axTightInset;

    rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];

    frame = getframe(ax,rect);

    im=frame2im(frame);

    [I{k},map{k}]=rgb2ind(im,256);

    %写入模式为“追加”模式

    imwrite(I{k},map{k},'mygifgif','gif','WriteMode','append','DelayTime',01); 

    k = k + 1;

   

    i = i + steptmp;

end

 

%将图像按相反的顺序再写入到gif中

for i = (k-1):-1:1

imwrite(I{i},map{i},'mygifgif','gif','WriteMode','append','DelayTime',01); 

end

运行完毕后,在Matlab当前的路径下,即可找到一个gif文件:

如将静态改为动态,可以增加一个循环,在循环的end前面增加一个命令M(ⅰ)=getframa,然后在end后面增加一个命令movⅰe(M,1)。

实现代码:

n=10 %input('n='); 

T0=001;A=1; 

t=[0:00001:005]; 

z=square(2pi100t); 

x=0; 

w0=2pi/T0; 

for i=1:n 

fw(i)=(2i-1)w0; 

a(i)=4A/(pi(2i-1)); 

y(i,:)=a(i)sin(fw(i)t); 

fai(i)=0; 

x=x+y(i,:); 

figure(1) 

a=1:100;

subplot(n,1,i); 

plot(t,y(i,:));xlabel('时间/s');ylabel('振幅') 

title(['方波',num2str(a(i)),'次谐波']) 

figure(2); 

plot(t,x);xlabel('时间/s');ylabel('方波'); 

title([num2str(a(i)),'次谐波合成图'])

M(i)=getframe;

end

movie(M,1)

end

运行程序 得到如下效果。

理论上是可以的。可以用fmincon()求其非线性规划问题。求解方法:

1、自定义目标函数fmincon_fun(x)

2、自定义约束函数fmincon_con(x)

3、用fmincon()求解 x,其命令代码

[x,fval,exitflag] = fmincon(@(x) fmincon_fun(x),x0,[],[],[],[],lb,ub,@(x) fmincon_con(x));

能否把z(t)、y(t)、u(t)、F( ) 、C( )、G( )、z(0) 具体的表达式贴出来,看能否实现?如不方便,可以私信于我。

1这种方法不行。

例如:

k=10;

for i=1:k

k=k-1;

end %循环次数仍为10

2你说的意思不是太清楚。一般可以用双重循环实现复杂问题。

3你可以试一下

k=100;

for i=1:99

k=k-i;

for j=1:k-1

%%%%%函数体

end

end

clear all;

close all;

clc

% Set graphics parameters

fig = figure;

set(fig,'color','w')

x=0:01:2pi;

y=sin(x);

h=plot(x,y,'r-');

% Buttons

uicontrol('pos',[20 20 60 20],'string','Exit','fontsize',12, 

   'callback','close(gcbf)');

uicontrol('pos',[20 40 60 20],'string','Start','fontsize',12, 

   'callback','set(gcbf,''userdata'',1)');

uicontrol('pos',[20 60 60 20],'string','Stop','fontsize',12, 

   'callback','set(gcbf,''userdata'',0)');

% Run

t = 0;

dt = pi/100;

set(fig,'userdata',0)

while ishandle(fig)

    if get(fig,'userdata')

        t = t-dt;

        dy = sin(x+t); 

        set(h,'Xdata',x,'Ydata',dy);

        drawnow;                

     else

        pause(05);

    end

end;

选择Excel导入。

首先打开matlab,进入界面单击红框出标题导入Excel数据文件

2、进入对应的文件夹中,选择lizi这个Excel文件。

3、在导出后,在工作区就能看到lizi数据,双击lizi变量,并且导入标题即可。

1、如果想把[2,2,2,2]赋值给第10个元素,可以用下面两种做法之一(作用完全等同):

c{1,10}=[2,2,2,2]

c(1,10)={[2,2,2,2]}

 

2、如果想把[2,2,2,2]赋值给多个元素,可以用类似下面的做法:

[c{1:5}]=deal([2,2,2,2])

 

3、如果想把[2,2,2,2]的元素分配到cell数组的多个元素,可以用:

[c{1:4}]=deal(2,2,2,2)

如果数据存在一个变量中,且维数及元素数量未知,那么更通用一点的做法是

c=cell(1,10);

a=[2,2,2,2];

n=prod(size(a));

b=mat2cell(a(:),ones(1,n),1);

[c{1:n}]=deal(b{:})

 

希望对楼主有帮助。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/281636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-03
下一篇2023-07-03

发表评论

登录后才能评论

评论列表(0条)

    保存