如何在MATLAB中用两个变量作为曲面绘制多项式?

时间:2018-04-12 11:45:37

标签: matlab graph matlab-figure

我已经尝试在MATLAB中绘制这个等式:

  

0.9486 - (1.0544 * w0)+(0.8961 * w1)+(w0 * w1)+ 1.1 *(w0 ^ 2 + w1 ^ 2)

w0的值为0至4,w1为-4至0

我需要在MATLAB中将其绘制为曲面,因此我编写了以下代码:

w0=(0:0.2:4); % y-axis
w1=(0:-0.2:-4); % x-axis

J=zeros(length(w0),length(w1)); % Matrix to be plotted on z-axis as a 
surface

i=0; % indices for creating J
j=0; % indices for creating J

for w0=0:0.2:4
   j=j+1;
   i=i+1;
    for w1=0:-0.2:-4
           J(i,j)=0.9486-1.0544*w0+0.8961*w1+w0.*w1+1.1*(w0.*w0+w1.*w1);
           % Equation to be implemented 
    end
end
w0=(0:0.2:4); 
w1=(0:-0.2:-4);
%w0 and w1 created again as for loops reduced them to their 
final value of 4 and -4.


mesh(w1,w0,J) %to create surface plot

ax = gca;
ax.XDir = 'reverse'; %reversing the axis as required in the task

虽然创建了曲面,但矩阵J未被精确填充。确实应该是21x21(w0和w1都是1x21向量),但J中的值仅出现在对角线上,其余为零。

我不能将w0和w1作为索引,因为它们包含小数,并且将i和j作为这样的索引(在第一个for循环之后)是我可以获得J的21x21矩阵大小的唯一方法。

这是所需表面的图像:

enter image description here

这是我到目前为止能够绘制的表面图像:

enter image description here

任何人都可以帮我正确填充J矩阵,以便重新创建正确的曲面吗?

2 个答案:

答案 0 :(得分:2)

我没有仔细查看您的代码,但

这是我怎么做的。这使用implicit singleton expansion,这需要Matlab R2016b或更高版本:

w0=(0:0.2:4).'; % y-axis
w1=(0:-0.2:-4); % x-axis
J = 0.9486 - (1.0544.*w0) + (0.8961.*w1) + (w0.*w1) + 1.1*(w0.^2+w1.^2);
mesh(w1,w0,J)
xlabel w1
ylabel w0
ax = gca;
ax.XDir = 'reverse';

enter image description here

答案 1 :(得分:1)

fsurf()功能相同的工作。这是代码......

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">
       <android.support.v7.widget.RecyclerView
           android:id="@+id/second_category_rcV"
           android:layout_width="match_parent"
           android:layout_height="wrap_content" />

       <ImageView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/ic_launcher_background" />

       <ProgressBar
           android:id="@+id/second_progress"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal|center_vertical"
           android:indeterminateBehavior="repeat"
           android:visibility="visible" />

   </LinearLayout>
</android.support.v4.widget.SwipeRefreshLayout>

产生如下表面: Surface plot of f1