如何使用hold on命令为不同的参数绘制matlab函数

时间:2015-05-31 13:29:52

标签: matlab plot matlab-figure

我有一个包含一些常量参数的matlab函数,我想绘制该函数,在相同的数字上,使用hold on(可能)同时更改该常量的值。 这是我的代码:

close all
clear all
clc
m = 5;
x = 1:1:10;
y = m*x + 10;
h1 = figure;
plot(x,y)
m = 10;
figure(h1);
hold on
plot(x,y,': r')

当我尝试使用此代码时,我得到了两条彼此重合的行;并且它看起来matlab刚刚使用参数m的最后一个值如何使它使用不同的值。 我找到了一些东西here,但并不能满足我的需求。 有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您还需要重新计算y

m = 5;
x = 1:1:10;
y = m*x + 10;

h1 = figure;
plot(x,y); hold on;

m = 10;
y = m*x + 10;

figure(h1);
plot(x,y,': r')

或者创建一个匿名函数:

x = 1:1:10;
f = @(m) m*x + 10;

%// and then:
h1 = figure;
plot(x,f(5)       ); hold on;
plot(x,f(10),': r');

答案 1 :(得分:0)

目前,您只是更新 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:scrollbars="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="192dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbara" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/frame" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> ,但您还必须再次计算<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="ranjithnair02.com.supporttest.BlankFragment"> <ListView android:id="@+id/rcyv" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="10dp" android:layout_marginRight="10dp" android:src="@android:drawable/ic_search_category_default" app:borderWidth="0dp" app:elevation="5dp" app:rippleColor="@color/wallet_highlighted_text_holo_light" /> </RelativeLayout> 。这就是为什么当你发出第二个图时它绘制完全相同的y(即m仍然是5)函数的原因。

您可能希望使用简单的for循环,例如:

m

答案 2 :(得分:0)

除了short答案 - 改进plot ..

    %% Data Preparations
    x = 1:10;
    ms = 3;             % number of different slopes

    %% Graph Preparations
    hold on;

    % Prepare the string cell array
    s = cell(1, ms);

    % Handle storage
    h = zeros(1, ms);

    % Plot graphs
    for m=1:ms
        y = m*x + 10;
        h(m)= plot(x,y,'Color',[1/m rand() rand()]);
        s{m} = sprintf('Plot of y(m=%d)', m);
    end

    % Plot all or select the plots to include in the legend
    ind = [ms:-1:1] .* ones(1,ms);  % plot all
    %ind = [ 1 3 4 ];               % plot selected

    % Create legend for the selected plots
    legend(h(ind), s{ind});

其他建议:当使用MATLAB并尝试提高代码的性能时,你应该尽量避免使用for循环,因为MATLAB是MATrix操作,而且它是最好的。你已经采用了这种理念,你将创造出最美丽的代码单行! ;)

此脚本采用Steve Lord的帖子。