查看: 342|回复: 8

[编程技巧] 求解这种图像MATLAB如何画出来的!!!

[复制链接]
发表于 2017-9-13 15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?我要加入

x
系统的方程为:
QQ截图20170913150653.png

系统的图像为:
QQ截图20170913150442.png

图中F的大小分别为:0.002,0.01,0.05,0.1,0.2
求大神解救,真情感谢!!!


回复
分享到:

使用道具 举报

发表于 2017-9-13 15:45 | 显示全部楼层
这个是典型的非线性系统跳跃现象,可以参考下面的文献

基于MATLAB的强迫振动达芬方程的非线性幅频响应分析_陈赵江.pdf

412.78 KB, 下载次数: 35

 楼主| 发表于 2017-9-13 16:50 | 显示全部楼层
linlin820 发表于 2017-9-13 15:45
这个是典型的非线性系统跳跃现象,可以参考下面的文献

多谢!
 楼主| 发表于 2017-9-17 18:28 | 显示全部楼层
linlin820 发表于 2017-9-13 15:45
这个是典型的非线性系统跳跃现象,可以参考下面的文献

你好,文献里面2.1程序我运行出来是这种。和结果差太多。这是什么情况??? untitled.jpg
发表于 2017-9-18 11:17 | 显示全部楼层
PrettyJerry 发表于 2017-9-17 18:28
你好,文献里面2.1程序我运行出来是这种。和结果差太多。这是什么情况???

是不是绘图所选取的参数域不全造成的
这种图应该是分段做出来的
 楼主| 发表于 2017-9-18 15:06 | 显示全部楼层
MVH 发表于 2017-9-18 11:17
是不是绘图所选取的参数域不全造成的
这种图应该是分段做出来的

谢谢帮助,是我编程有问题。修改后已经能画出来了。
发表于 2017-9-18 16:05 | 显示全部楼层
可否把代码分享一下 楼主
 楼主| 发表于 2017-9-18 20:56 | 显示全部楼层
陌影 发表于 2017-9-18 16:05
可否把代码分享一下 楼主

%强迫振动达芬方程幅频响应曲线的解析求法
%参数设定
epsilon=0.2;%小参数
gammal=4;%非线性参数
F1=0.3;%激励幅值
zetal=0.25;%阻尼项
a=linspace(0.1,2.0,100);%计算响应幅值范围
for ii=1:1:length(a)
    %根据(23)式,对应一个响应幅值,可能存在两个激励频率值;
    %Omega1为较小的激励频率值
    Omega1(ii)=(1+3*epsilon*gammal/8*a(ii)^2-sqrt((epsilon*F1/(2*a(ii)))^2-(epsilon*zetal)^2));
    %Omega1对应的本征函数值
    lamOmega11=sqrt(-((Omega1(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega1(ii)-1)/epsilon-9*gammal/8*a(ii)^2))-zetal;
    lamOmega12=-sqrt(-((Omega1(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega1(ii)-1)/epsilon-9*gammal/8*a(ii)^2))-zetal;
    %Omega2为较大的激励频率值
    Omega2(ii)=(1+3*epsilon*gammal/8*a(ii)^2+sqrt((epsilon*F1/(2*a(ii)))^2-(epsilon*zetal)^2));
    %Omega2对应的本征函数值
    lamOmega21=sqrt(-((Omega2(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega2(ii)-1)/epsilon-9*gammal/8*a(ii)^2))-zetal;
    lamOmega22=-sqrt(-((Omega2(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega2(ii)-1)/epsilon-9*gammal/8*a(ii)^2))-zetal;
    if lamOmega11==conj(lamOmega21) %如果两个本征值相等退出计算(即此时计算到频响曲线最高点)
     plot(Omega1(ii),a(ii),'k.','MarkerSize',15')
     hold on
     break
    else
        FG=((Omega1(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega1(ii)-1)/epsilon-9*gammal/8*a(ii)^2)+zetal^2;
        %对应上文中的(31)式
        if FG<0
            plot(Omega1(ii),a(ii),'color',[0.5 0.5 0.5],'MarkerSize',15) %不稳定点
        else
            plot(Omega1(ii),a(ii),'k.','MarkerSize',15) %稳定点
            hold on
        end
        GF=((Omega2(ii)-1)/epsilon-3*gammal/8*a(ii)^2)*((Omega2(ii)-1)/epsilon-9*gammal/8*a(ii)^2)+zetal^2;
        %对应上下文中的(31)式
        if GF<0
            plot(Omega2(ii),a(ii),'.','color',[0.5 0.5 0.5],'MarkerSize',15) %不稳定点
        else
            plot(Omega2(ii),a(ii),'k.','MarkerSize',15)%稳定点
            hold on
        end
        xlabel('\Omega') %x轴标题
        ylabel('a') %y轴标题
        xlim([0.5,1.8]);%x轴范围
        ylim([0,2]);%y轴范围
    end %满足条件退出循环(计算得到幅频响应曲线顶点)
end %结束对不同a值得计算


评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-8 16:21 | 显示全部楼层
终于解决了,谢谢分享
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

快速回复 返回顶部 返回列表