查看: 132|回復: 6|關注: 0
打印 上一主題 下一主題

[已解決] matlab 迴圈方式的程式,如何將四個波形用subplot個別在一張圖分成四格

[復制鏈接]

新手

9 麥片

財富積分


050


1

主題

4

帖子

0

最佳答案
各位大哥好..
我的程式是用迴圈方式做的
到最後的畫圖!
我如何將四個波形用SUBPLOT分成四格劃在同一張圖上
主程式
clear all;clc;close all;
%%
data(1).m=0.1;
data(1).k=1;
data(1).gamma=0.1;
data(1).Fe=1;
data(1).f=0;
data(1).Phie=0;
data(1).x0=0;
data(1).v0=0.1;
data(2)=data(1);
data(3)=data(1);
data(4)=data(1);
t_total=10;
NumDiv=200;
%%
fn=sqrt(data(1).k/data(1).m)/(2*pi);
T=1/fn;
dt=T/NumDiv;
data(1).f=0.5*fn;
data(2).f=1*fn;
data(3).f=1.5*fn;
data(4).f=2.0*fn;
LineSpec=[ 'r', 'g', 'b', 'k'];
Legend=['0.5'; '1.0'; '1.5'; '2.0'];
filename='forced oscillation';
%%
[t, x]=SecondODE_Force(data,dt,t_total);
MyPlot(t, x, LineSpec, Legend, filename);

迴圈
unction [ t, x ] = SecondODE_Force(data,dt,t_total)
%%
[m,N]=size(data);
t=-dt:dt:t_total;
[n1,n]=size(t);
x=zeros(N,n);
for k=1:N
    kp=data(k).k/data(k).m;
    gammap=data(k).gamma/data(k).m;
    Omaga=2*pi*data(k).f;
    x(k,1)=data(k).x0-data(k).v0*dt;
    x(k,2)=data(k).x0;
    c1=(2-kp*dt^2)/(1+0.5*gammap*dt);
    c2=-(1-0.5*gammap*dt)/(1+0.5*gammap*dt);
    c3=(data(k).Fe*dt^2/data(k).m)/(1+0.5*gammap*dt);
%%
    for i=3:n
        x(k,i)=c1*x(k,i-1)+c2*x(k,i-2)+c3*cos(Omaga*t(i-1)+data(k).Phie);
    end
end
end

繪出圖面
function MyPlot(t, x, LineSpec, Legend, filename)
[m,n]=size(x);
for k=1:m
    plot(t(2:n),x(k,2:n),LineSpec(k)); %黑色逗點
    hold on
end
legend(Legend);
title(filename);
saveas(gcf,filename,'tif');
hold off
end


新手

19 麥片

財富積分


050


1

主題

22

帖子

3

最佳答案
  • 關注者: 1
2#
發表于 6 天前 | 只看該作者
subplot(2,2,1);plot(x,y);title('name1');
subplot(2,2,2);plot(x,y);title('name2');
subplot(2,2,3);plot(x,y);title('name3');
subplot(2,2,4);plot(x,y);title('name4');
這樣嗎?

新手

9 麥片

財富積分


050


1

主題

4

帖子

0

最佳答案
3#
 樓主| 發表于 6 天前 | 只看該作者
本帖最后由 alexliang121 于 2019-10-25 09:16 編輯
a908393843 發表于 2019-10-25 08:41
subplot(2,2,1);plot(x,y);title('name1');
subplot(2,2,2);plot(x,y);title('name2');
subplot(2,2,3);plo ...

大哥!!是要這樣沒錯!我加在畫圖的迴圈中產生error
應該是說!我如何抓出四種波的數值顯示在四格框框內

我已將畫圖的迴圈改成這樣
function MyPlot(t, x, LineSpec, Legend, filename)


subplot(2,2,1);plot(?,?);title('name1');
subplot(2,2,2);plot(?,?);title('name2');
subplot(2,2,3);plot(?,?);title('name3');
subplot(2,2,4);plot(?,?);title('name4');
hold on
legend(Legend);
saveas(gcf,filename,'tif');
hold off
end


新手

19 麥片

財富積分


050


1

主題

22

帖子

3

最佳答案
  • 關注者: 1
4#
發表于 6 天前 | 只看該作者 |此回復為最佳答案
本帖最后由 a908393843 于 2019-10-25 11:18 編輯
alexliang121 發表于 2019-10-25 09:01
大哥!!是要這樣沒錯!我加在畫圖的迴圈中產生error
應該是說!我如何抓出四種波的數值顯示在四格框框內

不是畫圖出現問題,而是你的function定義不夠完善,畫圖不需要function啊,直接加到程序裡面就可以了,每次畫出你想抓的波就可以了啊。
你發的程序不齊沒法試跑。
    clc;clear all;
    x=[1,2,3,4,5]
    y=x
subplot(221);plot(x,y.^2);title('y^2=x');
subplot(2,2,2);plot(x,y-1);title('y=x+1')
subplot(2,2,3);plot(x+1,y);title('y=x+1')
subplot(2,2,4);plot(x.^2,y);title('y=x^2')


另外如果你之前的畫圖是可以的話,就直接在畫圖前面依次加個subplot(221),subplot(222),subplot(223),subplot(224)就可以了。

新手

9 麥片

財富積分


050


1

主題

4

帖子

0

最佳答案
5#
 樓主| 發表于 6 天前 | 只看該作者
本帖最后由 alexliang121 于 2019-10-25 11:25 編輯
a908393843 發表于 2019-10-25 10:57
不是畫圖出現問題,而是你的function定義不夠完善,畫圖不需要function啊,直接加到程序裡面就可以了,每 ...

了解!我測試一下!
感謝大大,已完成

新手

19 麥片

財富積分


050


1

主題

22

帖子

3

最佳答案
  • 關注者: 1
6#
發表于 6 天前 | 只看該作者

其實我也是新手,多試試,一步步運行,百度,help。
自己寫的,自己改的,加注釋,以后用上的時候,不至于哪里出現問題看不懂,我是這樣做的...
希望你能解決問題,如果有問題,你把代碼發全,比如function的定義,這些,不然別人改也不好改

新手

9 麥片

財富積分


050


1

主題

4

帖子

0

最佳答案
7#
 樓主| 發表于 6 天前 | 只看該作者
a908393843 發表于 2019-10-25 11:25
其實我也是新手,多試試,一步步運行,百度,help。
自己寫的,自己改的,加注釋,以后用上的時候,不至 ...

有幫助啊!!!搞定了!
感謝你
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關閉

站長推薦上一條 /3 下一條

快速回復 返回頂部 返回列表
哪一款德州扑克还能玩