可以用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{:})
希望对楼主有帮助。
欢迎分享,转载请注明来源:表白网
评论列表(0条)